diff --git a/STgSharpTest/StgSharpTest.csproj b/STgSharpTest/StgSharpTest.csproj new file mode 100644 index 00000000..1ef69cc8 --- /dev/null +++ b/STgSharpTest/StgSharpTest.csproj @@ -0,0 +1,36 @@ + + + + net8.0 + enable + enable + preview + false + true + AnyCPU;x64 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/STgSharpTest/UnitTest1.cs b/STgSharpTest/UnitTest1.cs new file mode 100644 index 00000000..3b842f5b --- /dev/null +++ b/STgSharpTest/UnitTest1.cs @@ -0,0 +1,118 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="UnitTest1.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp; +using StgSharp.Collections; +using StgSharp.Script; +using StgSharp.Script.Express; + + +//using StgSharp.Model; + +using System.Collections.Concurrent; +using System.Text.RegularExpressions; + +namespace STgSharpTest +{ + [TestClass] + public class UnitTest1 + { + string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp"; + + [TestMethod] + public void RegexTest() + { + string sample = "FILE_DESCRIPTION(('CATIA V5 STEP Exchange'),'2;1');"; + + foreach( var match in Regex.Match( + sample, @"^(?[A-Z_]+)\s?\((?.+)\)\;" ) + .Groups ) { + Console.WriteLine( $"{match.ToString()}" ); + Console.WriteLine( "\t\t\t" ); + } + } + + [TestMethod] + public void TestSource() + { + ScriptSourceTransmitter st = new ScriptSourceTransmitter("end", 0); + for (int i = 0; i < 10; i++) + { + st.WriteLine($"Code{i} {new string(' ', i + 1)}-- Comment{i}"); + } + st.WriteLine("Code (* comment"); + for (int i = 0; i < 10; i++) + { + st.WriteLine($"comment-code"); + } + st.WriteLine($"comment *) code"); + for (int i = 0; i < 10; i++) + { + st.WriteLine($" Code{i} (* (* Comment *) *) Code{i}"); + } + st.WriteLine("end"); + + ExpSourceReader reader = new ExpSourceReader(st); + while (!st.IsEmpty) + { + Console.WriteLine(new string(reader.ReadLine())); + } + } + + [TestMethod] + public void TestMethod() + { + ScriptSourceTransmitter st = new ScriptSourceTransmitter("end", 0); + for (int i = 0; i < 10; i++) + { + st.WriteLine($"Code{i} {new string(' ',i+1)}-- Comment{i}"); + } + st.WriteLine("Code (* comment"); + for (int i = 0; i < 10; i++) + { + st.WriteLine($"comment-code"); + } + st.WriteLine($"comment *) code"); + for (int i = 0; i < 10; i++) + { + st.WriteLine($" Code{i} (* (* Comment *) *) Code{i}"); + } + st.WriteLine("end"); + + ExpSourceReader reader = new ExpSourceReader(st); + while (!st.IsEmpty) + { + Console.WriteLine(reader.ReadToken().Value.ToString()); + } + } + + +} +} \ No newline at end of file diff --git a/StgSharp.Common/Collections/BidirectionalDictionary.cs b/StgSharp.Common/Collections/BidirectionalDictionary.cs new file mode 100644 index 00000000..7969ef15 --- /dev/null +++ b/StgSharp.Common/Collections/BidirectionalDictionary.cs @@ -0,0 +1,194 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="BidirectionalDictionary" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace StgSharp.Collections +{ + public sealed class BidirectionalDictionary : IBidirectionalDictionary + where TFirst: notnull + where TSecond: notnull + { + + private readonly Dictionary _forward; + private readonly Dictionary _reverse; + + public BidirectionalDictionary() + { + _forward = []; + _reverse = []; + } + + public TFirst this[TSecond key] + { + get => _reverse.TryGetValue(key, out TFirst value) ? + value : + throw new ArgumentException($"Cannot find key {key} in dictionary."); + set + { + if (_reverse.TryGetValue(key, out TFirst origin)) + { + _reverse[key] = value; + _ = _forward.Remove(origin); + } else + { + _reverse.Add(key, value); + } + _forward.Add(value, key); + } + } + + public TSecond this[TFirst key] + { + get => _forward.TryGetValue(key, out TSecond value) ? + value : + throw new ArgumentException($"Cannot find key {key} in dictionary."); + set + { + if (_forward.TryGetValue(key, out TSecond origin)) + { + _forward[key] = value; + _ = _reverse.Remove(origin); + } else + { + _forward.Add(key, value); + } + _reverse.Add(value, key); + } + } + + public bool IsReadOnly => false; + + public ICollection FirstIndex => _forward.Keys; + + public ICollection SecondIndex => _reverse.Keys; + + public int Count => _forward.Count; + + public IReadOnlyDictionary Forward => new ReadOnlyDictionary( + _forward); + + public IReadOnlyDictionary Reverse => new ReadOnlyDictionary( + _reverse); + + public void Add(KeyValuePair item) + { + if (_forward.ContainsKey(item.Key) || _reverse.ContainsKey(item.Value)) { + throw new ArgumentException("Duplicate key or value."); + } + _forward.Add(item.Key, item.Value); + _reverse.Add(item.Value, item.Key); + } + + public void Add(TFirst key, TSecond value) + { + if (_forward.ContainsKey(key) || _reverse.ContainsKey(value)) { + throw new ArgumentException("Duplicate key or value."); + } + _forward.Add(key, value); + _reverse.Add(value, key); + } + + public void Clear() + { + _forward.Clear(); + _reverse.Clear(); + } + + public bool Contains(KeyValuePair item) + { + return _forward.Contains(item) && _reverse.TryGetValue(item.Value, out TFirst var) && var!.Equals(item.Key); + } + + public bool Contains(TSecond key) + { + return _reverse.ContainsKey(key); + } + + public bool Contains(TFirst key) + { + return _forward.ContainsKey(key); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + if (array == null) { + throw new ArgumentNullException(nameof(array)); + } + if (arrayIndex < 0 || arrayIndex > array.Length) { + throw new ArgumentOutOfRangeException(nameof(arrayIndex)); + } + if (array.Length - arrayIndex < _forward.Count) { + throw new ArgumentException("The array is too small to copy the elements."); + } + + foreach (KeyValuePair pair in _forward) { + array[arrayIndex++] = pair; + } + } + + public IEnumerator> GetEnumerator() + { + foreach (KeyValuePair pair in _forward) { + yield return pair; + } + } + + public bool Remove(TFirst key) + { + throw new NotImplementedException(); + } + + public bool Remove(KeyValuePair item) + { + if (_forward.Remove(item.Key)) { + return _reverse.Remove(item.Value); + } + return false; + } + + public bool TryGetValue(TFirst key, out TSecond value) + { + return _forward.TryGetValue(key, out value); + } + + public bool TryGetValue(TSecond key, out TFirst value) + { + return _reverse.TryGetValue(key, out value); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Collections/CapacityFixedList.cs b/StgSharp.Common/Collections/CapacityFixedList.cs new file mode 100644 index 00000000..123ed724 --- /dev/null +++ b/StgSharp.Common/Collections/CapacityFixedList.cs @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CapacityFixedList" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace StgSharp.Collections +{ + public static class CapacityFixedListBuilder + { + + internal static CapacityFixedList Create(ReadOnlySpan values) + { + return new CapacityFixedList(values); + } + + } + + [CollectionBuilder(typeof(CapacityFixedListBuilder), nameof(CapacityFixedListBuilder.Create))] + public class CapacityFixedList : IList + { + + private T[] _values; + private int capacity, _index; + + public CapacityFixedList(int size) + { + _values = new T[size]; + } + + public CapacityFixedList(ReadOnlySpan values) + { + _values = values.ToArray(); + } + + public T this[int index] + { + get => index < _index ? _values[index] : throw new ArgumentOutOfRangeException(nameof(index)); + set + { + if (index < _index) + { + _values[index] = value; + } else + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + } + } + + public bool IsReadOnly => false; + + public int Count => _index + 1; + + public void Add(T item) + { + if (_index < capacity - 1) + { + _index++; + this[_index] = item; + } + } + + public void Clear() + { + _values = new T[capacity]; + _index = 0; + } + + public bool Contains(T item) + { + for (int i = 0; i <= _index; i++) + { + if (item.Equals(_values[i])) { + return true; + } + } + return false; + } + + public void CopyTo(T[] array, int arrayIndex) + { + _values.CopyTo(array, arrayIndex); + } + + public IEnumerator GetEnumerator() + { + for (int i = 0; i <= _index; i++) { + yield return _values[i]; + } + } + + public int IndexOf(T item) + { + T v; + for (int i = 0; i <= _index; i++) + { + if ((v = _values[i]) != null && v.Equals(item)) { + return i; + } + } + return -1; + } + + public bool Remove(T item) + { + T v; + for (int i = 0; i <= _index; i++) + { + if ((v = _values[i]) != null && v.Equals(item)) + { + _values[i] = _values[_index]; + _index--; + return true; + } + } + return false; + } + + public void RemoveAll(Predicate predicate) + { + for (int i = _index; i > 0; i--) + { + if (predicate(_values[i])) + { + _values[i] = _values[_index]; + _index--; + } + } + } + + public void RemoveAt(int index) + { + if (index <= _index) + { + _values[index] = _values[_index]; + _index--; + } + } + + public void Resize(int newSize) + { + Array.Resize(ref _values, newSize); + } + + IEnumerator IEnumerable.GetEnumerator() + { + yield return GetEnumerator(); + } + + void IList.Insert(int index, T item) + { + throw new NotSupportedException(); + } + + }//------------------------------------- End of Class ------------------------------------------ +} diff --git a/StgSharp.Common/Collections/IBidrirectionalDictionary.cs b/StgSharp.Common/Collections/IBidrirectionalDictionary.cs new file mode 100644 index 00000000..200558e8 --- /dev/null +++ b/StgSharp.Common/Collections/IBidrirectionalDictionary.cs @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IBidrirectionalDictionary" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System.Collections.Generic; + +namespace StgSharp.Collections +{ + public interface IBidirectionalDictionary : IDictionary + { + + TFirst this[TSecond key] { get; set; } + + ICollection FirstIndex { get; } + + ICollection SecondIndex { get; } + + IReadOnlyDictionary Forward { get; } + + IReadOnlyDictionary Reverse { get; } + + /// + /// Determines whether the contains the + /// specified key. + /// + /// + /// The value to locate in the . + /// + /// + /// true if the contains an element with + /// the specified key; otherwise, false. + /// + bool Contains(TSecond key); + + /// + /// Determines whether the contains the + /// specified key. + /// + /// + /// The value to locate in the . + /// + /// + /// true if the contains an element with + /// the specified key; otherwise, false. + /// + bool Contains(TFirst key); + + bool TryGetValue(TSecond key, out TFirst value); + + #pragma warning disable CA1033 + ICollection IDictionary.Keys => FirstIndex; + + ICollection IDictionary.Values => SecondIndex; + + bool IDictionary.ContainsKey(TFirst key) + { + return Contains(key); + } +#pragma warning restore CA1033 + } +} \ No newline at end of file diff --git a/StgSharp.Common/Collections/IHashMultiplexer.cs b/StgSharp.Common/Collections/IHashMultiplexer.cs new file mode 100644 index 00000000..6f0acde4 --- /dev/null +++ b/StgSharp.Common/Collections/IHashMultiplexer.cs @@ -0,0 +1,53 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IHashMultiplexer" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System.Collections.Generic; + +namespace StgSharp.Collections +{ + public interface IHashMultiplexer : IEqualityComparer + { + + int RemainedMultiplexCount { get; set; } + + /// + /// Cache hash result for obj with counts. + /// + /// + /// + /// + /// + /// + /// + void CacheHash(T obj, int count); + + void ExtendCache(int count); + + int ForceComputeHash(T count); + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Collections/ListSegment.cs b/StgSharp.Common/Collections/ListSegment.cs new file mode 100644 index 00000000..1185648d --- /dev/null +++ b/StgSharp.Common/Collections/ListSegment.cs @@ -0,0 +1,131 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ListSegment" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace StgSharp.Collections +{ + /// + /// Part of a collection. This contains a direct reference to _origin collection, so all + /// change to _origin collection will be reflected in this object. + /// + /// + /// + /// + public struct ListSegment : ICollection + { + + private int _begin; + private int _length; + private List _collection; + + public ListSegment(List collection, int begin, int length) + { + ArgumentNullException.ThrowIfNull(collection); + ArgumentOutOfRangeException.ThrowIfLessThan(begin, 0); + ArgumentOutOfRangeException.ThrowIfLessThan(length, 0); + ArgumentOutOfRangeException.ThrowIfLessThan(begin + length, collection.Count); + _collection = collection; + _begin = begin; + _length = length; + } + + public T this[int indexValue] + { + get + { + ArgumentOutOfRangeException.ThrowIfLessThan(indexValue, 0); + ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(indexValue, _length); + return _collection[indexValue + _begin]; + } + } + + public T this[Index i] + { + get + { + int offset = i.IsFromEnd ? _length - i.Value : i.Value; + ArgumentOutOfRangeException.ThrowIfLessThan(offset, 0); + ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(offset, _length); + return _collection[offset + _begin]; + } + } + + public bool IsReadOnly => true; + + public int Count => _length; + + public bool Contains(T item) + { + int index = _collection.IndexOf(item); + return index >= _begin && index < _length + index; + } + + public void CopyTo(T[] array, int arrayIndex) + { + ArgumentNullException.ThrowIfNull(array); + Span span = CollectionsMarshal.AsSpan(_collection).Slice(_begin, _length); + Span target = new Span(array, arrayIndex, _length); + span.CopyTo(target); + } + + public IEnumerator GetEnumerator() + { + for (int i = _begin; i < _length; i++) { + yield return this[i]; + } + } + + void ICollection.Add(T item) + { + throw new NotSupportedException(); + } + + void ICollection.Clear() + { + throw new NotSupportedException(); + } + + bool ICollection.Remove(T item) + { + throw new NotSupportedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + } +} diff --git a/StgSharp.Common/Collections/RandomAccessibleStack.cs b/StgSharp.Common/Collections/RandomAccessibleStack.cs new file mode 100644 index 00000000..fabe52ab --- /dev/null +++ b/StgSharp.Common/Collections/RandomAccessibleStack.cs @@ -0,0 +1,181 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="RandomAccessibleStack" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Generic; + +namespace StgSharp.Collections +{ + public class RandomAccessibleStack : IEnumerable + { + + private const int DefaultCapacity = 4; + + private T[] _array; + private int _size; + private int _version; + + /// + /// Initializes a new instance of the RandomAccessStack class that is empty and has the + /// default initial capacity. + /// + public RandomAccessibleStack() + { + _array = new T[DefaultCapacity]; + } + + /// + /// Initializes a new instance of the RandomAccessStack class that is empty and has the + /// specified initial capacity. + /// + public RandomAccessibleStack(int capacity) + { + if (capacity < 0) { + throw new ArgumentOutOfRangeException( + nameof(capacity), "Capacity must be non-negative."); + } + + _array = new T[capacity]; + } + + /// + /// Gets or sets the element at the specified index in the stack (0 = bottom, Count-1 = + /// top). + /// + public T this[int index] + { + get + { + if (index < 0 || index >= _size) { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + return _array[index]; + } + /* + set + { + if( index < 0 || index >= PrimSize ) { + throw new ArgumentOutOfRangeException( nameof( index ) ); + } + _array[ index ] = value; + _version++; + } + /**/ + } + + /// + /// Gets the number of elements contained in the stack. + /// + public int Count => _size; + + /// + /// Removes all objects from the stack. + /// + public void Clear() + { + Array.Clear(_array, 0, _size); + _size = 0; + _version++; + } + + /// + /// Returns an enumerator that iterates through the stack from top to bottom. Throws if + /// the stack is modified during iteration. + /// + public IEnumerator GetEnumerator() + { + int expectedVersion = _version; + for (int i = _size - 1; i >= 0; i--) + { + if (expectedVersion != _version) { + throw new InvalidOperationException( + "Collection was modified during enumeration."); + } + + yield return _array[i]; + } + } + + /// + /// Returns the object at the top of the stack without removing it. + /// + public T Peek() + { + if (_size == 0) { + throw new InvalidOperationException("Stack is empty."); + } + + return _array[_size - 1]; + } + + /// + /// Removes and returns the object at the top of the stack. + /// + public T Pop() + { + if (_size == 0) { + throw new InvalidOperationException("Stack is empty."); + } + + T item = _array[--_size]; + _array[_size] = default!; + _version++; + return item; + } + + /// + /// Adds an item to the top of the stack. + /// + public void Push(T item) + { + if (_size == _array.Length) { + EnsureCapacity(_size + 1); + } + + _array[_size++] = item; + _version++; + } + + private void EnsureCapacity(int min) + { + int newCapacity = _array.Length == 0 ? DefaultCapacity : _array.Length * 2; + if (newCapacity < min) { + newCapacity = min; + } + + Array.Resize(ref _array, newCapacity); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + } +} diff --git a/StgSharp.Common/Collections/StringHashMultiplexer.cs b/StgSharp.Common/Collections/StringHashMultiplexer.cs new file mode 100644 index 00000000..05f2ffc4 --- /dev/null +++ b/StgSharp.Common/Collections/StringHashMultiplexer.cs @@ -0,0 +1,162 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="StringHashMultiplexer" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; + +namespace StgSharp.Collections +{ + public sealed class StringHashMultiplexer : IHashMultiplexer + { + + private int _initCount, _remainedCount, _hashCache, _hashLast; + private string _source, _sourceLast; + + public int RemainedMultiplexCount + { + get => _remainedCount; + set => _initCount = value; + } + + public void CacheHash(string obj, int count) + { + _hashCache = ForceComputeHash(obj); + _initCount = count; + _remainedCount = _initCount; + _source = obj; + } + + public bool Equals(string x, string y) + { + return x == y; + } + + public void ExtendCache(int count) + { + _initCount += count; + _remainedCount += count; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe int ForceComputeHash([NotNull] string obj) + { + int hash; + fixed (char* cPtr = obj.AsSpan()) { + hash = NativeIntrinsic.Intrinsic.city_hash_simplify(cPtr, obj.Length); + } + return hash; + } + + public int GetHashCode(string obj) + { + if (_remainedCount > 0 && ReferenceEquals(_source, obj)) + { + _remainedCount--; + return _hashCache; + } + if (ReferenceEquals(_sourceLast, obj)) { + return _hashLast; + } + _sourceLast = obj; + _hashLast = ForceComputeHash(obj); + return _hashLast; + } + + } + + public sealed class ConcurrentStringHashMultiplexer : IHashMultiplexer, IDisposable + { + + private bool disposedValue; + private readonly ThreadLocal _multiplexers = + new(() => new StringHashMultiplexer()); + + public int RemainedMultiplexCount + { + get => _multiplexers.Value!.RemainedMultiplexCount; + set => _multiplexers.Value!.RemainedMultiplexCount = value; + } + + public void CacheHash(string obj, int count) + { + throw new NotImplementedException(); + } + + // ~ConcurrentStringHashMultiplexer() + // { + // Dispose(disposing: false); + // } + + public void Dispose() + { + Dispose(disposing:true); + GC.SuppressFinalize(this); + } + + public bool Equals(string x, string y) + { + return x == y; + } + + public void ExtendCache(int count) + { + _multiplexers.Value!.ExtendCache(count); + } + + public unsafe int ForceComputeHash([NotNull] string obj) + { + int hash; + fixed (char* cPtr = obj.AsSpan()) { + hash = NativeIntrinsic.Intrinsic.city_hash_simplify(cPtr, obj.Length); + } + return hash; + } + + public int GetHashCode(string obj) + { + return _multiplexers.Value!.GetHashCode(obj); + } + + private void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) { + _multiplexers.Dispose(); + } + + disposedValue = true; + } + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/BattleField.cs b/StgSharp.Common/Controlling/Controls/BattleField.cs new file mode 100644 index 00000000..8f2b5e8b --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/BattleField.cs @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="BattleField" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Graphics; + +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Text; + +// TODO 这玩意如何加载一个渲染流程以获得各个图元还没搞清楚 + +namespace StgSharp.Controls +{ + public class BattleField : ControllingItem + { + + public bool IsEntity => true; + + public ReadOnlySpan TextureBox + { + get => throw new NotImplementedException(); + } + + public Rectangle BoundingBox { get; set; } + + public Vec2 Position { get; set; } + + public IEnumerator GetEnumerator() + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/ButtonGroup.cs b/StgSharp.Common/Controlling/Controls/ButtonGroup.cs new file mode 100644 index 00000000..2b85ab21 --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/ButtonGroup.cs @@ -0,0 +1,149 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ButtonGroup" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Transactions; + +namespace StgSharp.Controls +{ + public abstract class KeyboardButtonGroup : ControllingItem + { + + private List buttonList; + private TriggerButton current; + + public KeyboardButtonGroup() + { + buttonList = new List(); + } + + public bool IsEntity + { + get => false; + } + + public ReadOnlySpan TextureBox + { + get => throw new NotSupportedException(); + } + + public Rectangle BoundingBox { get; set; } + + public TriggerButton CurrentButton + { + get => current; + } + + public Vec2 Position { get; set; } + + protected List AllButton + { + get => buttonList; + } + + public void AddButton(TriggerButton button) + { + buttonList.Add(button); + } + + public abstract void Confirm(); + + public IEnumerator GetEnumerator() + { + foreach (TriggerButton item in buttonList) { + yield return item.Single(); + } + } + + public void MoveDown() + { + TriggerButton button = current; + while ((button.Down != null) && button.Down.IsDisabled) { + button = button.Right; + } + if (current == button) { + return; + } + current.DeHighlight(); + button.Enable(); + current = button; + } + + public void MoveLeft() + { + TriggerButton button = current; + while ((button.Left != null) && button.Left.IsDisabled) { + button = button.Left; + } + if (current == button) { + return; + } + current.DeHighlight(); + button.Enable(); + current = button; + } + + public void MoveRight() + { + TriggerButton button = current; + while ((button.Right != null) && button.Right.IsDisabled) { + button = button.Right; + } + if (current == button) { + return; + } + current.DeHighlight(); + button.Enable(); + current = button; + } + + public void MoveUp() + { + TriggerButton button = current; + while ((button.Up != null) && button.Up.IsDisabled) { + button = button.Right; + } + if (current == button) { + return; + } + current.DeHighlight(); + button.Enable(); + current = button; + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/CharacterIndexImage.cs b/StgSharp.Common/Controlling/Controls/CharacterIndexImage.cs new file mode 100644 index 00000000..3ff71e2c --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/CharacterIndexImage.cs @@ -0,0 +1,109 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CharacterIndexImage" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Text; + +namespace StgSharp.Controls +{ + public class CharacterLineIndexImage : ControllingItem + { + + private char[] displayIndex; + private char defaultChar; + + private Dictionary texIndex; + private int length; + private PlainGeometryMesh _tittleMesh; + + public CharacterLineIndexImage( + int length, + char defaultChar, + PlainGeometryMesh tittleMesh, + IEnumerable<(char, PlainGeometryMesh)> indexEnumeration) + { + this.length = length; + displayIndex = new char[length]; + _tittleMesh = tittleMesh; + texIndex = indexEnumeration.ToDictionary(item => item.Item1, item => item.Item2); + } + + public bool IsEntity + { + get => true; + } + + public ReadOnlySpan TextureBox + { + get => throw new NotSupportedException(); + } + + public Rectangle BoundingBox + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public Vec2 Position + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public void Display(string message) + { + if (string.IsNullOrEmpty(message)) { + message = string.Empty; + } + + string result = (message.Length >= length) ? + message.Substring(message.Length - displayIndex.Length) : + message.PadLeft( + length, defaultChar); + + displayIndex = result.ToCharArray(); + } + + public IEnumerator GetEnumerator() + { + yield return _tittleMesh; + foreach (char item in displayIndex) { + yield return texIndex[item]; + } + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/ControllingIntem.cs b/StgSharp.Common/Controlling/Controls/ControllingIntem.cs new file mode 100644 index 00000000..b93a2066 --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/ControllingIntem.cs @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ControllingIntem" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Controls +{ + public interface ControllingItem : IEnumerable + { + + public abstract bool IsEntity { get; } + + public abstract ReadOnlySpan TextureBox { get; } + + public abstract Rectangle BoundingBox { get; set; } + + public abstract Vec2 Position { get; set; } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/DecorationBox.cs b/StgSharp.Common/Controlling/Controls/DecorationBox.cs new file mode 100644 index 00000000..01472dce --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/DecorationBox.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="DecorationBox.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace StgSharp.Controls +{ + public class DecorationBox : ControllingItem + { + + private PlainGeometryMesh renderMesh; + + public DecorationBox(Rectangle bound, Image texture, Vec2[] texCoord) + { + renderMesh = new PlainGeometryMesh( + BoundingBox, new TextureProvider(texture, texCoord)); + } + + public bool IsEntity => true; + + public ReadOnlySpan TextureBox + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => renderMesh.TextureCoord; + } + + public Rectangle BoundingBox { get; set; } + + public Vec2 Position { get; set; } + + public IEnumerator GetEnumerator() + { + yield return renderMesh; + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/MarkingLable.cs b/StgSharp.Common/Controlling/Controls/MarkingLable.cs new file mode 100644 index 00000000..554d0b08 --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/MarkingLable.cs @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="MarkingLable" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Controls; +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.Controls +{ + public class MarkingLabel : ControllingItem + { + + private PlainGeometryMesh marker; + + private Vec2 _currentPosition, _movementVec; + + public MarkingLabel(PlainGeometryMesh marker) + { + this.marker = marker; + } + + public bool IsEntity => true; + + public ReadOnlySpan TextureBox + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => marker.TextureCoord; + } + + public Rectangle BoundingBox { get; set; } + + public Vec2 Position { get; set; } + + public IEnumerator GetEnumerator() + { + yield return marker; + } + + public void Move(Vec2 movement) + { + throw new NotImplementedException(); + } + + public void MoveTo(Vec2 target) + { + Move(target - Position); + } + + } +} diff --git a/StgSharp.Common/Controlling/Controls/TriggerButton.cs b/StgSharp.Common/Controlling/Controls/TriggerButton.cs new file mode 100644 index 00000000..f5c612bd --- /dev/null +++ b/StgSharp.Common/Controlling/Controls/TriggerButton.cs @@ -0,0 +1,213 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TriggerButton" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Controls; +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Controls +{ + public delegate void RenderButtonTextureCallback(ButtonStatus status, float beginTime, in TextureProvider texture); + + public enum ButtonStatus + { + + Error = 0b0, + Disable = 0b1, + Enable = 0b10, + Highlight = 0b100, + Confirm = 0b1000, + + DisableToEnable = Disable | Enable, + EnableToDisable = -(Enable | DisableToEnable), + + EnableToHighlight = Enable | Highlight, + HighlightToEnable = -(Enable | Highlight), + + HighlightToDisable = -(Highlight | Disable), + + } + + public class TriggerButton : ControllingItem + { + + private Action? confirmCallback; + private Action? disableCallback; + + #nullable enable + private Action? enableCallback; + private float _statusBeginTime; + + private RenderButtonTextureCallback _renderButton; + private TextureProvider _texture; + + #nullable restore + + public TriggerButton() + { + CurrentStatus = ButtonStatus.Disable; + } + + public event Action ConfirmEvent + { + add { confirmCallback += value; } + remove { confirmCallback -= value; } + } + + public event Action DisableEvent + { + add { disableCallback += value; } + remove { disableCallback -= value; } + } + + public event Action EnableEvent + { + add { enableCallback += value; } + remove { enableCallback -= value; } + } + + public event RenderButtonTextureCallback RenderButtonTexture + { + add + { + if (_renderButton == null) + { + _renderButton = value; + } else + { + _renderButton += value; + } + } + remove + { + if (_renderButton != null) { + _renderButton -= value; + } + } + } + + public bool IsHighLighted { get; internal set; } + + public bool IsDisabled { get; internal set; } + + public bool IsEntity => true; + + public ReadOnlySpan TextureBox + { + get => MemoryMarshal.Cast(_texture.TextureCoordinate); + } + + public Rectangle BoundingBox { get; set; } + + public TriggerButton Left { get; internal set; } + + public TriggerButton Right { get; internal set; } + + public TriggerButton Up { get; internal set; } + + public TriggerButton Down { get; internal set; } + + public Vec2 Position { get; set; } + + internal TextureProvider Texture + { + get => _texture; + set => _texture = value; + } + + protected ButtonStatus CurrentStatus { get; set; } + + public void DeHighlight() + { + if (CurrentStatus == ButtonStatus.Highlight) { + CurrentStatus = ButtonStatus.HighlightToEnable; + } + } + + public void Disable() + { + CurrentStatus = CurrentStatus switch + { + ButtonStatus.Enable => ButtonStatus.EnableToDisable, + ButtonStatus.Highlight => ButtonStatus.HighlightToDisable, + _ => CurrentStatus, + }; + if (disableCallback != null) { + disableCallback(); + } + } + + public void Enable() + { + if (CurrentStatus == ButtonStatus.Disable) + { + CurrentStatus = ButtonStatus.DisableToEnable; + } else + { + return; + } + if (enableCallback != null) { + enableCallback(); + } + } + + public IEnumerator GetEnumerator() + { + _renderButton(CurrentStatus, _statusBeginTime, in _texture); + yield return new PlainGeometryMesh(this.BoundingBox, _texture); + } + + public void Highlight() + { + if (CurrentStatus == ButtonStatus.Enable) + { + CurrentStatus |= ButtonStatus.EnableToHighlight; + } else + { + return; + } + if (confirmCallback != null) { + confirmCallback(); + } + } + + internal void Init(ButtonStatus status) + { + if (CurrentStatus == ButtonStatus.Error) { + CurrentStatus = status; + } + } + + }//----------------------------------- End of class -------------------------------------------- +} diff --git a/StgSharp.Common/Controlling/KeyEnum.cs b/StgSharp.Common/Controlling/KeyEnum.cs new file mode 100644 index 00000000..c2ac0553 --- /dev/null +++ b/StgSharp.Common/Controlling/KeyEnum.cs @@ -0,0 +1,234 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="KeyEnum" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; + +using System; + +namespace StgSharp +{ + public enum KeyboardKey : int + { + + UNKNOWN = -1, + None = 0, + Space = 32, + Apostrophe = 39/*'*/, + Comma = 44/*,*/, + Minus = 45/*-*/, + Period = 46/*.*/, + Slash = 47/*/*/, + Zero = 48, + One = 49, + Two = 50, + Three = 51, + Four = 52, + Five = 53, + Six = 54, + Seven = 55, + Eight = 56, + Nine = 57, + Semicolon = 59/*,*/, + Equal = 61/*=*/, + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + LeftBracket = 91/*[*/, + BACKSLASH = 92/*\*/, + RightBracket = 93/*]*/, + GraveAccent = 96/*`*/, + World1 = 161/*non-US#1*/, + World2 = 162/*non-US#2*/, + Esc = 256, + Enter = 257, + Tab = 258, + Backspace = 259, + Insert = 260, + Delete = 261, + Right = 262, + Left = 263, + Down = 264, + Up = 265, + PgUp = 266, + PgDown = 267, + Home = 268, + End = 269, + CapsLock = 280, + ScrollLock = 281, + NumLock = 282, + PrintScreen = 283, + Pause = 284, + F1 = 290, + F2 = 291, + F3 = 292, + F4 = 293, + F5 = 294, + F6 = 295, + F7 = 296, + F8 = 297, + F9 = 298, + F10 = 299, + F11 = 300, + F12 = 301, + F13 = 302, + F14 = 303, + F15 = 304, + F16 = 305, + F17 = 306, + F18 = 307, + F19 = 308, + F20 = 309, + F21 = 310, + F22 = 311, + F23 = 312, + F24 = 313, + F25 = 314, + NumPad0 = 320, + NumPad1 = 321, + NumPad2 = 322, + NumPad3 = 323, + NumPad4 = 324, + NumPad5 = 325, + NumPad6 = 326, + NumPad7 = 327, + NumPad8 = 328, + NumPad9 = 329, + NumPadDec = 330, + NumPadDiv = 331, + NumPadMul = 332, + NumPadSub = 333, + NumPadAdd = 334, + NumPadAnter = 335, + NumPadEqual = 336, + LeftShift = 340, + LeftControl = 341, + LeftAlt = 342, + LeftSuper = 343, + RightShift = 344, + RightControl = 345, + RightAlt = 346, + RightSuper = 347, + Menu = 348, + First = Space, + Last = Menu, + + } + + #pragma warning disable CA1707 + #pragma warning disable CA1712 + #pragma warning disable CA1008 + #pragma warning disable CA1027 + public enum Joystick : int + #pragma warning restore CA1027 + { + + Joystick_1 = FrameworkConstant. JOYSTICK_1, + Joystick_2 = FrameworkConstant. JOYSTICK_2, + Joystick_3 = FrameworkConstant. JOYSTICK_3, + Joystick_4 = FrameworkConstant. JOYSTICK_4, + Joystick_5 = FrameworkConstant. JOYSTICK_5, + Joystick_6 = FrameworkConstant. JOYSTICK_6, + Joystick_7 = FrameworkConstant. JOYSTICK_7, + Joystick_8 = FrameworkConstant. JOYSTICK_8, + Joystick_9 = FrameworkConstant. JOYSTICK_9, + Joystick_10 = FrameworkConstant.JOYSTICK_10, + Joystick_11 = FrameworkConstant.JOYSTICK_11, + Joystick_12 = FrameworkConstant.JOYSTICK_12, + Joystick_13 = FrameworkConstant.JOYSTICK_13, + Joystick_14 = FrameworkConstant.JOYSTICK_14, + Joystick_15 = FrameworkConstant.JOYSTICK_15, + Joystick_16 = FrameworkConstant.JOYSTICK_16, + First = Joystick_1, + Last = Joystick_16 + + } + + [System.Flags] + public enum Mouse : int + { + + Button1 = 0, + Button2 = 1, + Button3 = 2, + Button4 = 3, + Button5 = 4, + Button6 = 5, + Button7 = 6, + Button8 = 7, + First = Button1, + Last = Button8, + Left = Button1, + Right = Button2, + Middle = Button3 + + } + + #pragma warning restore CA1707 + #pragma warning restore CA1712 + #pragma warning restore CA7008 + + internal enum InputEquipment + { + + Keyboard, + Mouse, + Joystick + + } + + public enum KeyStatus : int + { + + RELEASE = 0, + PRESS = 1 + + } +} diff --git a/StgSharp.Common/Controlling/KeyEventAttribute.cs b/StgSharp.Common/Controlling/KeyEventAttribute.cs new file mode 100644 index 00000000..36e936d5 --- /dev/null +++ b/StgSharp.Common/Controlling/KeyEventAttribute.cs @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="KeyEventAttribute" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + [AttributeUsage(AttributeTargets.Method)] + public class KeyEventAttribute : Attribute + { + + internal int _equipment; + internal int _keyStat; + internal int _keyTarget; + + public KeyEventAttribute(KeyboardKey key, KeyStatus status) + { + _equipment = (int)InputEquipment.Keyboard; + _keyTarget = (int)key; + _keyStat = (int)status; + } + + public KeyEventAttribute(Joystick joystick, KeyStatus status) + { + _equipment = (int)InputEquipment.Keyboard; + _keyTarget = (int)joystick; + _keyStat = (int)status; + } + + public KeyEventAttribute(Mouse mouse, KeyStatus status) + { + _equipment = (int)InputEquipment.Keyboard; + _keyTarget = (int)mouse; + _keyStat = (int)status; + } + + } +} diff --git a/StgSharp.Common/Controlling/UsrActivity/IClickTrigger.cs b/StgSharp.Common/Controlling/UsrActivity/IClickTrigger.cs new file mode 100644 index 00000000..fe9e90ee --- /dev/null +++ b/StgSharp.Common/Controlling/UsrActivity/IClickTrigger.cs @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IClickTrigger" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public interface IClickTrigger + { + + public int TargetKeyOrButtonID { get; } + + public KeyStatus TriggeredStatus { get; } + + } +} diff --git a/StgSharp.Common/Controlling/UsrActivity/JoystickTrigger.cs b/StgSharp.Common/Controlling/UsrActivity/JoystickTrigger.cs new file mode 100644 index 00000000..2331d2ad --- /dev/null +++ b/StgSharp.Common/Controlling/UsrActivity/JoystickTrigger.cs @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="JoystickTrigger" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public readonly struct JoystickTrigger : IClickTrigger, IEquatable + { + + private readonly Joystick _stick; + private readonly KeyStatus _status; + + public JoystickTrigger(Joystick targetKey, KeyStatus status) + { + this._stick = targetKey; + _status = status; + } + + public int TargetKeyOrButtonID => (int)_stick; + + public Joystick Stick + { + get => _stick; + } + + public KeyStatus TriggeredStatus => _status; + + public override bool Equals(object obj) + { + return base.Equals(obj); + } + + public override int GetHashCode() + { + return ((int)_stick) + (17 * ((int)_status)); + } + + public override string ToString() + { + return $"Key {_stick} triggered when {_status}"; + } + + public static bool operator !=(JoystickTrigger left, JoystickTrigger right) + { + return !(left == right); + } + + public static bool operator ==(JoystickTrigger left, JoystickTrigger right) + { + return (left._status == right._status) && (left._stick == right._stick); + } + + bool IEquatable.Equals(JoystickTrigger other) + { + return other == this; + } + + } +} diff --git a/StgSharp.Common/Controlling/UsrActivity/KeyTrigger.cs b/StgSharp.Common/Controlling/UsrActivity/KeyTrigger.cs new file mode 100644 index 00000000..2f310e4c --- /dev/null +++ b/StgSharp.Common/Controlling/UsrActivity/KeyTrigger.cs @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="KeyTrigger" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public readonly struct KeyTrigger : IClickTrigger, IEquatable + { + + private readonly KeyboardKey _targetKey; + private readonly KeyStatus _triggerStat; + + public KeyTrigger(KeyboardKey targetKey, KeyStatus targetStat) + { + this._targetKey = targetKey; + this._triggerStat = targetStat; + } + + public int TargetKeyOrButtonID => (int)_targetKey; + + public KeyStatus TriggeredStatus => _triggerStat; + + public override bool Equals(object obj) + { + return base.Equals(obj); + } + + public override int GetHashCode() + { + return ((int)_targetKey) + (17 * ((int)_triggerStat)); + } + + public override string ToString() + { + return $"Key {_targetKey} triggered when {_triggerStat}"; + } + + public static bool operator !=(KeyTrigger left, KeyTrigger right) + { + return !(left == right); + } + + public static bool operator ==(KeyTrigger left, KeyTrigger right) + { + return (left._triggerStat == right._triggerStat) && (left._targetKey == right._targetKey); + } + + bool IEquatable.Equals(KeyTrigger other) + { + return other == this; + } + + } +} diff --git a/StgSharp.Common/Controlling/UsrActivity/MouseTrigger.cs b/StgSharp.Common/Controlling/UsrActivity/MouseTrigger.cs new file mode 100644 index 00000000..4df57366 --- /dev/null +++ b/StgSharp.Common/Controlling/UsrActivity/MouseTrigger.cs @@ -0,0 +1,69 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="MouseTrigger" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public readonly struct MouseTrigger : IClickTrigger, IEquatable + { + + private readonly KeyStatus _status; + private readonly Mouse _mouse; + + public MouseTrigger(Mouse mouse, KeyStatus status) + { + _mouse = mouse; + _status = status; + } + + public int TargetKeyOrButtonID => (int)_mouse; + + public KeyStatus TriggeredStatus => _status; + + public bool Equals(MouseTrigger other) + { + return this == other; + } + + public static bool operator !=(MouseTrigger left, MouseTrigger right) + { + return left._mouse != right._mouse || left._status != right._status; + } + + public static bool operator ==(MouseTrigger left, MouseTrigger right) + { + return left._mouse == right._mouse && left._status == right._status; + } + + } +} diff --git a/StgSharp.Common/Controlling/UsrActivity/TriggetFactory.cs b/StgSharp.Common/Controlling/UsrActivity/TriggetFactory.cs new file mode 100644 index 00000000..dc29cfb6 --- /dev/null +++ b/StgSharp.Common/Controlling/UsrActivity/TriggetFactory.cs @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TriggetFactory" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Controlling.UsrActivity +{ + public static class TriggetBuilder + { + + private const int JoystickMax = (int)Joystick.Last + 1; + private const int JoystickMin = (int)Joystick.First - 1; + private const int KeyboardMax = (int)KeyboardKey.Last + 1; + private const int KeyboardMin = (int)KeyboardKey.First - 1; + private const int MouseMax = (int)Mouse.Last + 1; + private const int MouseMin = (int)Mouse.First - 1; + + private static KeyTrigger keyboardtemp; + private static MouseTrigger mousetemp; + + public static JoystickTrigger BuildJoystickClickTrigger(int keyCode, KeyStatus status) + { + if (keyCode > MouseMin && keyCode < MouseMax) { + return new JoystickTrigger((Joystick)keyCode, status); + } + throw new InvalidOperationException("Known key code or key is not on joystick."); + } + + public static KeyTrigger BuildKeyboardClickTrigger(int keyCode, KeyStatus status) + { + if (keyCode > KeyboardMin && keyCode < KeyboardMax) { + return new KeyTrigger((KeyboardKey)keyCode, status); + } + throw new InvalidOperationException("Known key code or kay is not on keyboard."); + } + + public static MouseTrigger BuildMouseClickTrigger(int keyCode, KeyStatus status) + { + if (keyCode >= MouseMin && keyCode <= MouseMax) { + return new MouseTrigger((Mouse)keyCode, status); + } + throw new InvalidOperationException("Known key code or key is not on mouse."); + } + + public static IClickTrigger BuildTrigger(int keyCode, KeyStatus status) + { + if (keyCode > KeyboardMin && keyCode < KeyboardMax) { + return new KeyTrigger((KeyboardKey)keyCode, status); + } + if (keyCode > JoystickMin && keyCode < JoystickMax) { + return new JoystickTrigger((Joystick)keyCode, status); + } + if (keyCode >= MouseMin && keyCode <= MouseMax) { + return new MouseTrigger((Mouse)keyCode, status); + } + throw new InvalidOperationException("Known key code."); + } + + } +} diff --git a/StgSharp.Common/Counter.cs b/StgSharp.Common/Counter.cs new file mode 100644 index 00000000..c74b7765 --- /dev/null +++ b/StgSharp.Common/Counter.cs @@ -0,0 +1,111 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Counter" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Numerics; + +namespace StgSharp +{ + public class Counter where T: unmanaged, INumber + { + + internal dynamic _value; + internal readonly T _defaultValue; + internal readonly T _defualtDecreament; + + internal readonly T _defualtIncreament; + + public Counter(T defaultValue, T defaultIncrement, T defaultDecrement) + { + _value = defaultValue; + _defaultValue = defaultValue; + _defualtIncreament = defaultIncrement; + _defualtDecreament = defaultDecrement; + } + + public T DecrementSpan => _defualtDecreament; + + public T IncrementSpan => _defualtIncreament; + + public T CurrentSpan => _value - _defaultValue; + + public T Value + { + get => _value; + set => _value = value; + } + + public void Add(T value) + { + _value += value; + } + + public void QuickAdd() + { + _value += _defualtIncreament; + } + + public void QuickSub() + { + _value -= _defualtDecreament; + } + + public void Reset() + { + _value = _defaultValue; + } + + public void Sub(T value) + { + _value -= value; + } + + public override string ToString() => Value.ToString(); + + public static Counter operator --(Counter counter) + { + counter.QuickSub(); + return counter; + } + + public static Counter operator ++(Counter counter) + { + counter.QuickAdd(); + return counter; + } + + public static implicit operator T(Counter counter) + { + return counter switch + { + null => T.Zero, + _ => counter.Value + }; + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Data/GlobalData/root.cs b/StgSharp.Common/Data/GlobalData/root.cs new file mode 100644 index 00000000..a8c2b707 --- /dev/null +++ b/StgSharp.Common/Data/GlobalData/root.cs @@ -0,0 +1,39 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="root" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Internal; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public static unsafe partial class World { }//------------------ end of class --------------------- +} diff --git a/StgSharp.Common/Data/RandomGenerator.cs b/StgSharp.Common/Data/RandomGenerator.cs new file mode 100644 index 00000000..51ae4a18 --- /dev/null +++ b/StgSharp.Common/Data/RandomGenerator.cs @@ -0,0 +1,144 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="RandomGenerator" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; + +using System; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Xml.Serialization; + +namespace StgSharp.Data +{ + public unsafe class RandomGenerator + { + + private byte[] currentKey; + private readonly byte[] originKey; + + public RandomGenerator() : this(DateTime.UtcNow.ToBinary()) { } + + public RandomGenerator(object source) + { + ArgumentNullException.ThrowIfNull(source); + XmlSerializer s = new(source.GetType()); + using (StringWriter sw = new()) + { + s.Serialize(sw, source); + string data = sw.ToString(); + originKey = Encoding.Unicode.GetBytes(data); + } + currentKey = [ + 0, + 0, + 0, + 0 + ]; + fixed (byte* o = originKey, c = currentKey) { + *(int*)c = UnsafeCompute.CityHashSimplify((char*)o, 0, originKey.Length / 2); + } + TotalGeneratedRandom = 0; + } + + public int TotalGeneratedRandom + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private set; + } + + public unsafe int GenRandomInt() + { + uint source = PrivateRand(); + TotalGeneratedRandom++; + M64 m = new M64(); + m.Member(0) = source; + m.Member(1) = source; + return (m << (TotalGeneratedRandom % 32)).Member(1); + } + + public byte GenRandomInt8() + { + TotalGeneratedRandom++; + if (TotalGeneratedRandom % 4 == 0) { + PrivateRand(); + } + return currentKey[TotalGeneratedRandom % 4]; + } + + public float GenRandomSingle() + { + TotalGeneratedRandom++; + + while (true) + { + uint + temp0 = PrivateRand(), + temp1 = PrivateRand(); + + if (temp0 * temp1 != 0) + { + float ret = temp0 % temp1 * 1.0f / temp1; + if (ret < 0.335f) + { + ret = ret * ((ret * (-0.7811934f)) + 1.4489113f); + } else + { + ret = (ret * ((ret * (-0.1158368f)) + 1.0580600f)) + 0.0590584f; + } + if (ret > 1) + { + continue; + } + return ret; + } + } + } + + public void Reset() + { + currentKey = originKey; + TotalGeneratedRandom = 0; + } + + private unsafe uint PrivateRand() + { + uint ret; + fixed (byte* bptr = currentKey) + { + *(int*)bptr = UnsafeCompute.CityHashSimplify((char*)bptr, currentKey.Length / 2); + ret = *(uint*)bptr; + } + + // Console.WriteLine(ret.ToString(16)); + return ret; + } + + } +} diff --git a/StgSharp.Common/Data/SSD/Area.cs b/StgSharp.Common/Data/SSD/Area.cs new file mode 100644 index 00000000..2a27e1b2 --- /dev/null +++ b/StgSharp.Common/Data/SSD/Area.cs @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Area" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Internal.FileIO; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Internal +{ + /// + /// An independent storage area, used as the only folder type in root folder. Contains several + /// files reference as virtual disc. Data is actually stored in s in certain RAID mode. + /// + public partial class Area { } +} diff --git a/StgSharp.Common/Data/SSD/DataHead.cs b/StgSharp.Common/Data/SSD/DataHead.cs new file mode 100644 index 00000000..cfa53ead --- /dev/null +++ b/StgSharp.Common/Data/SSD/DataHead.cs @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="DataHead" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; + +using System; +using System.Numerics; +using System.Runtime.InteropServices; + +namespace StgSharp.Internal +{ + [StructLayout(LayoutKind.Explicit, Size = 16)] + public struct SSDSegmentHead + { + + [FieldOffset(12)] internal byte size; + + [FieldOffset(0)] internal M128 data; + [FieldOffset(13)] public byte selfDefine_1; + [FieldOffset(14)] public byte selfDefine_2; + [FieldOffset(15)] public byte selfDefine_3; + + [FieldOffset(0)] public int globalID; + [FieldOffset(4)] public int nextID; + [FieldOffset(8)] public int previousHash; + + public int Size + { + get => ((int)size) + 1; + set + { + if ((value > 256) || (value < 0)) { + throw new ArgumentOutOfRangeException(); + } + size = (byte)(value - 1); + } + } + + public unsafe byte[] GetBytes() + { + byte[] ret = new byte[16]; + fixed (M128* vptr = &data) + { + byte* bptr = (byte*)vptr; + for (int i = 0; i < 15; i++) { + ret[i] = *bptr; + } + } + return ret; + } + + } +} diff --git a/StgSharp.Common/Data/SSD/DataSegment.cs b/StgSharp.Common/Data/SSD/DataSegment.cs new file mode 100644 index 00000000..b3699772 --- /dev/null +++ b/StgSharp.Common/Data/SSD/DataSegment.cs @@ -0,0 +1,186 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="DataSegment" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; +using StgSharp.HighPerformance; +using StgSharp.Internal.Intrinsic; + +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Internal +{ + [StructLayout(LayoutKind.Explicit, Size = World.ssdSegmentLength * 16)] + public unsafe struct SSDSegment : IComparable, IComparable + { + + [FieldOffset(16)] public fixed byte Data[16 * (World.ssdSegmentLength - 1)]; + [FieldOffset(12)] public int DataHash; + [FieldOffset(8)] public int PreviousHash; + [FieldOffset(0 * 16)] public SSDSegmentHead Head; + + public SSDSegment(int previousHash) + { + this.PreviousHash = previousHash; + } + + public byte this[int index] + { + get + { + if (index > (16 * (World.ssdSegmentLength - 1)) - 1) { + throw new IndexOutOfRangeException(); + } + return Data[index]; + } + + set + { + if (index > (16 * (World.ssdSegmentLength - 1)) - 1) { + throw new IndexOutOfRangeException(); + } + Data[index] = value; + } + } + + public int ID + { + get { return Head.globalID; } + set { Head.globalID = value; } + } + + public short Size => Head.size; + + public void FillRandomBytes(int begin) + { + if (begin > 255) { + return; + } + for (int i = begin; i < 255; i++) { + Data[i] = Scalar.Random(); + } + } + + public static SSDSegment FromStream(byte[] stream) + { + if (stream.Length != 16 * World.ssdSegmentLength) { + throw new ArgumentException(); + } + SSDSegment ret = new SSDSegment(); + fixed (byte* bptr = stream) + { + ret.Head.data = *(M128*)bptr; + for (int i = 1; i < World.ssdSegmentLength; i++) { + ret.WriteData(i - 1, *(M128*)(bptr + (16 * i))); + } + } + return ret; + } + + public byte[] GetBytes() + { + byte[] ret = new byte[16 * World.ssdSegmentLength]; + fixed (M128* mptr = &Head.data) + { + fixed (byte* aptr = ret) + { + Vector4* vsptr = (Vector4*)mptr; + Vector4* vtptr = (Vector4*)aptr; + for (int i = 0; i < 18; i++) { + *(vtptr + i) = *(vsptr + i); + } + } + } + + return ret; + } + + public int GetDataHash() + { + Vector4 v = Vector4.One; + fixed (M128* mptr = &Head.data) + { + Vector4* vptr = (Vector4*)mptr; + for (int i = 0; i < World.ssdSegmentLength - 1; i += 1) { + v += (*vptr) * 31; + } + } + M128 m = new M128(v); + DataHash = m.Vec.GetHashCode(); + return DataHash; + } + + public override int GetHashCode() + { + int ret = 17; + fixed (M128* mptr = &Head.data) + { + Vector4* vptr = (Vector4*)mptr; + for (int i = 0; i < World.ssdSegmentLength; i++) { + ret = (ret + (*vptr).GetHashCode()) * 31; + } + } + return ret; + } + + public unsafe T ReadData(int index) where T: unmanaged + { + fixed (byte* bptr = Data) + { + T* tptr = (T*)bptr; + return *(tptr + index); + } + } + + public unsafe void WriteData(int index, T value) where T: unmanaged + { + fixed (byte* bptr = Data) + { + T* tptr = (T*)bptr; + *(tptr + index) = value; + } + } + + int IComparable.CompareTo(int other) + { + return ID.CompareTo(other); + } + + int IComparable.CompareTo(SSDSegment other) + { + return ID.CompareTo(other.ID); + } + + } +} diff --git a/StgSharp.Common/Data/SSD/SSD.cs b/StgSharp.Common/Data/SSD/SSD.cs new file mode 100644 index 00000000..c13805bc --- /dev/null +++ b/StgSharp.Common/Data/SSD/SSD.cs @@ -0,0 +1,64 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="SSD" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Internal.FileIO; + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace StgSharp.Internal +{ + public partial class SSD + { + + private Dictionary fileList; + + private FileStream file; + private SSDrawHead head; + + public SSD() + { + fileList = new Dictionary(); + } + + public SSD(FileStream fileStream) + { + fileList = new Dictionary(); + file = fileStream; + } + + public static SSD FromFile(string fileRoute) + { + return new SSD(new FileStream(fileRoute, FileMode.Open, FileAccess.Read)) + { + }; + } + + } +} diff --git a/StgSharp.Common/Data/SSD/SSDVirtualFolder.cs b/StgSharp.Common/Data/SSD/SSDVirtualFolder.cs new file mode 100644 index 00000000..b49d7382 --- /dev/null +++ b/StgSharp.Common/Data/SSD/SSDVirtualFolder.cs @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="SSDVirtualFolder" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Internal.FileIO; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Internal +{ + public class SSDFolder : ISSDSerializable + { + + internal Dictionary folders; + internal int _folderID; + internal string _name; + + internal SSDFolder() + { + folders = new Dictionary(); + } + + internal SSDFolder(string name) + { + if (name == "root") { + throw new ArgumentException( + "Name cannot be root," + "it is preserved for root file indexer."); + } + if (name == "default") { + throw new ArgumentException( + "Name cannot be default," + "it is preserved for default file id provider."); + } + _name = name; + folders = new Dictionary(); + } + + public SerializableTypeCode SSDTypeCode => SerializableTypeCode.VirtualFolder; + + public void FromBytes(byte[] stream) + { + throw new NotImplementedException(); + } + + // TODO TOUGH TO Get Bytes from virtual folders + public byte[] GetBytes() + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Common/Data/SSD/SSDraw.cs b/StgSharp.Common/Data/SSD/SSDraw.cs new file mode 100644 index 00000000..34896a49 --- /dev/null +++ b/StgSharp.Common/Data/SSD/SSDraw.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="SSDraw" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.ShaderEdit; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Xml.Serialization; + +namespace StgSharp.Internal.FileIO +{ + public class SSDraw + { + + private byte[] data; + + public SSDraw(string name, Stream streamSource) + { + if ((streamSource == null) || (streamSource.Length == 0)) { + throw new ArgumentNullException(nameof(streamSource)); + } + Name = name; + data = new byte[streamSource.Length]; + streamSource.Read(data.AsSpan()); + } + + public SSDrawHead Head { get; set; } + + public string Name { get; set; } + + } + + [StructLayout(LayoutKind.Explicit, Size = 32 * 16)] + public unsafe struct SSDrawHead { } +} diff --git a/StgSharp.Common/Data/Serialize/Define.cs b/StgSharp.Common/Data/Serialize/Define.cs new file mode 100644 index 00000000..44898c8f --- /dev/null +++ b/StgSharp.Common/Data/Serialize/Define.cs @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Define" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Internal +{ + /// + /// A class contains a sets of methods to serialize several types + /// + public static partial class Serializer { } +} diff --git a/StgSharp.Common/Data/Serialize/ISSDSerializable.cs b/StgSharp.Common/Data/Serialize/ISSDSerializable.cs new file mode 100644 index 00000000..c2b7ea60 --- /dev/null +++ b/StgSharp.Common/Data/Serialize/ISSDSerializable.cs @@ -0,0 +1,103 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ISSDSerializable" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Internal +{ + public interface ISSDSerializable + { + + public SerializableTypeCode SSDTypeCode { get; } + + public byte[] GetBytes(); + + internal void FromBytes(byte[] stream); + + } + + public enum SerializableTypeCode + { + + Unknown = 0, + IndexTable = 1, + PixelImage = 2, + VectorImage = 3, + Audio = 4, + Shader = 5, + Text = 6, + RawData = 7, + VirtualFolder = int.MaxValue, + + } + + public static partial class Serializer + { + + public static T Deserialize(byte[] stream) where T: ISSDSerializable + { + T serializableObject = Activator.CreateInstance(); + serializableObject.FromBytes(stream); + return serializableObject; + } + + public static string GetNameTail(SerializableTypeCode typeCode) + { + switch (typeCode) + { + case SerializableTypeCode.IndexTable: + return "_idt"; + case SerializableTypeCode.PixelImage: + return "_pim"; + case SerializableTypeCode.VectorImage: + return "_vim"; + case SerializableTypeCode.Audio: + return "_wav"; + case SerializableTypeCode.Shader: + return "_gls"; + case SerializableTypeCode.Text: + return "_txt"; + case SerializableTypeCode.RawData: + return "_raw"; + case SerializableTypeCode.VirtualFolder: + return "_fod"; + default: + throw new ArgumentException("Unknown file type"); + } + } + + public static byte[] Serialize(ISSDSerializable serializableObject) + { + return serializableObject.GetBytes(); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Data/ValueBox.cs b/StgSharp.Common/Data/ValueBox.cs new file mode 100644 index 00000000..f978951b --- /dev/null +++ b/StgSharp.Common/Data/ValueBox.cs @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ValueBox" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Data +{ + public interface IValueBox + { + + ref object ValueReference { get; } + + static virtual IValueBox AsGeneric(IValueBox box) where T: unmanaged + { + if (box is not IValueBox genericBox) { + return null; + } + return genericBox; + } + + static virtual bool IsGeneric(IValueBox box) where T: unmanaged + { + return box is IValueBox; + } + + } + + public interface IValueBox where T: unmanaged + { + + T Value { get; set; } + + } + + /// + /// A class attempt to reduce cost of boxing, though still a bit slower than direct access to + /// _origin value type instance. + /// + /// + /// Type of instance to be boxed. + /// + public class ValueBox : IValueBox, IValueBox where T: unmanaged + { + + private T _value; + + public ValueBox(T value) + { + _value = value; + } + + public ref object ValueReference => ref Unsafe.As(ref _value); + + public T Value + { + get => _value; + set => _value = value; + } + + } +} diff --git a/StgSharp.Common/Environment/Dialogue.cs b/StgSharp.Common/Environment/Dialogue.cs new file mode 100644 index 00000000..9f1b507c --- /dev/null +++ b/StgSharp.Common/Environment/Dialogue.cs @@ -0,0 +1,177 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Dialogue" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Pipes; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; + +namespace StgSharp +{ + public static class Dialogue + { + + private static Process? _dialogueProcess; + private static AnonymousPipeServerStream _dialogueClientPipe,_dialogueServerPipe; + private static ConcurrentBag msgCache = new ConcurrentBag(); + private static int _readAndWriteThreadId; + private static ProcessStartInfo _dialogueProcessInfo; + private static StreamReader _dr; + private static StreamWriter _dw; + + public static bool NeedShowWhenStartup { get; set; } + + public static void PostError(Exception ex) + { + CreateDialogueProcessIfNotExist(); + + _dw.WriteLine($"posterror {ex.Message}"); + + _dialogueProcess!.Exited -= DialogueProcessExitCallback; + } + + public static void SetReadAndWriteThread(Thread thread) + { + _readAndWriteThreadId = thread.ManagedThreadId; + } + + internal static void CreateDialogueProcessIfNotExist() + { + if (_dialogueProcess != null) { + return; + } + if (!File.Exists(_dialogueProcessInfo.FileName)) { } + _dialogueProcess = Process.Start(_dialogueProcessInfo); + + _dr = new StreamReader(_dialogueClientPipe); + _dw = new StreamWriter(_dialogueServerPipe); + + _dialogueProcess!.Exited += DialogueProcessExitCallback; + + _dialogueServerPipe.DisposeLocalCopyOfClientHandle(); + _dialogueClientPipe.DisposeLocalCopyOfClientHandle(); + } + + internal static void LoadDialogue() + { + _dialogueServerPipe = new AnonymousPipeServerStream( + PipeDirection.Out, HandleInheritability.Inheritable); + _dialogueClientPipe = new AnonymousPipeServerStream( + PipeDirection.In, HandleInheritability.Inheritable); + + string route = Assembly.GetAssembly(typeof(World)).Location; + string path = Path.GetDirectoryName(route); + + string exeName; + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + exeName = ".exe"; + } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || + RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + exeName = string.Empty; + } else + { + throw new PlatformNotSupportedException("Unknown OS platform"); + } + + string consoleRoute = Path.Combine( + path, @"StgSharpTerminalDialogue", $@"StgSharpTerminalDialogue{exeName}"); + + _dialogueProcessInfo = new ProcessStartInfo + { + FileName = consoleRoute, + Arguments = + $"{_dialogueServerPipe.GetClientHandleAsString()} {_dialogueClientPipe.GetClientHandleAsString()}", + UseShellExecute = true, + RedirectStandardOutput = false, + }; + } + + internal static void PostMessage(string instruction, params string[] operands) + { + CreateDialogueProcessIfNotExist(); + + _dw.WriteLine($"{instruction} {operands}"); + } + + internal static void UnloadDialogue() + { + if (_dialogueProcess != null) { + _dialogueProcess.Kill(); + } + _dialogueProcess = null; + + _dialogueServerPipe.Dispose(); + _dialogueClientPipe.Dispose(); + } + + internal static string WaitCertainReturn(string target) + { + if (_dialogueProcess == null) { + return string.Empty; + } + + string temp = string .Empty; + do + { + temp = _dr.ReadLine(); + temp = temp ?? string.Empty; + if (!temp!.StartsWith(target)) + { + break; + } + } while (true); + + int index = temp.IndexOf(' '); + return index != -1 ? temp.Substring(index + 1) : string.Empty; + } + + private static void AssertThread() + { + if (_readAndWriteThreadId != Environment.CurrentManagedThreadId) { + throw new InvalidOperationException( + "Communication with dialogue can only call from certain thread."); + } + } + + private static void DialogueProcessExitCallback(object? sender, EventArgs e) + { + _dialogueProcess = null; + _dr.Close(); + _dw.Close(); + } + + } +} diff --git a/StgSharp.Common/Environment/ErrorDefine.cs b/StgSharp.Common/Environment/ErrorDefine.cs new file mode 100644 index 00000000..3a668dab --- /dev/null +++ b/StgSharp.Common/Environment/ErrorDefine.cs @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ErrorDefine" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public class UniformEmptyReferenceException : Exception + { + + public UniformEmptyReferenceException(string program, string name) + : base( + $"Location -1 returned when trying to find uniform {name} in shader program {program}") { } + + } +} diff --git a/StgSharp.Common/Environment/GlobalSetting.cs b/StgSharp.Common/Environment/GlobalSetting.cs new file mode 100644 index 00000000..2c68369b --- /dev/null +++ b/StgSharp.Common/Environment/GlobalSetting.cs @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="GlobalSetting" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public static unsafe partial class World + { + + internal const int ssdSegmentLength = 16; + + private static byte[] _currentHash = []; + + private static bool _inited; + + public static byte[] CurrentAssemblyHash + { + get + { + if (_currentHash == null) + { + string route = Assembly.GetExecutingAssembly().Location; + string time = DateTime.UtcNow.ToString(); + using (SHA256 sh = SHA256.Create()) + { + byte[] bytes = Encoding.UTF8.GetBytes(route); + _currentHash = sh.ComputeHash(bytes); + } + } + return _currentHash; + } + } + + public static int MainThreadID + { + get => (_mainThreadID == -1) ? + throw new InvalidOperationException( + "StgSharp environment is not inited. Main thread id is not available") : + _mainThreadID; + internal set => _mainThreadID = value; + } + + private static int _mainThreadID { get; set; } = -1; + + /// + /// CustomizeInit an instance of OpenGL program, This method should be called before any + /// other World api. + /// + public static void InitGL(int majorVersion, int minorVersion) + { + if (API == default) { + API = GraphicAPI.GL; + } + if (API != GraphicAPI.GL) { + return; + } + GraphicFramework.InternalInitGL(majorVersion, minorVersion); + } + + public static class GlobalSetting + { + + private static bool vSyncActivated; + + public static bool VSyncActivated + { + get => vsyncActivated; + set + { + GraphicFramework.glfwSwapInterval(value ? 1 : 0); + vsyncActivated = value; + } + } + + } + + }//-------------------------------------- End of Class ---------------------------------------// +} \ No newline at end of file diff --git a/StgSharp.Common/Environment/Monitors.cs b/StgSharp.Common/Environment/Monitors.cs new file mode 100644 index 00000000..0c050c27 --- /dev/null +++ b/StgSharp.Common/Environment/Monitors.cs @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Monitors" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Runtime.InteropServices; + +namespace StgSharp +{ + public static partial class World + { + + public static unsafe IntPtr[] MonitorsHandleArray + { + get + { + if (MonitorsArray == null) + { + int count = 0; + IntPtr* arrayHandle = GraphicFramework.glfwGetMonitors(&count); + MonitorsArray = new IntPtr[count]; + Marshal.Copy((IntPtr)arrayHandle, MonitorsArray, 0, count); + Marshal.FreeHGlobal((IntPtr)arrayHandle); + } + return MonitorsArray; + } + } + + public static nint[] MonitorsArray { get; set; } = []; + + public static IntPtr DefaultMonitor => MonitorsHandleArray[0]; + + } +} diff --git a/StgSharp.Common/Environment/Platform.cs b/StgSharp.Common/Environment/Platform.cs new file mode 100644 index 00000000..e62b875d --- /dev/null +++ b/StgSharp.Common/Environment/Platform.cs @@ -0,0 +1,223 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Platform" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp +{ + internal enum GraphicAPI : byte + { + + GL, + VK + + } + + public static partial class World + { + + /// + /// Version of current World platform. Main version represent in hundred's digit, and sub + /// version represent in ten's digit. + /// + public const long version = 430; + + private static bool vsyncActivated; + + private static uint markCount = 0; + internal static GraphicAPI API = default; + + public static int DefaultSIMDAlignment => NativeIntrinsic.IntrinsicLevel switch + { + IntrinsicLevel.SSE => 16, + IntrinsicLevel.AVX2 => 32, + IntrinsicLevel.AVX512 => 64, + IntrinsicLevel.NEON => 16, + IntrinsicLevel.Non => 8, + _ => 8, + }; + + public static ModuleToInitializeCollection Initialize() + { + return new ModuleToInitializeCollection(new Initializer()); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void LogError(Exception ex) + { + DefaultLog.InternalWriteLog(ex.Message, LogType.Error); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void LogInfo(string log) + { + DefaultLog.InternalWriteLog(log, LogType.Info); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void LogWarning(string log) + { + DefaultLog.InternalWriteLog(log, LogType.Warning); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void LogWarning(Exception notVerySeriesException) + { + DefaultLog.InternalWriteLog(notVerySeriesException.Message, LogType.Warning); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Mark(bool needConsole) + { + markCount++; + if (needConsole) { + Console.WriteLine(markCount); + } + } + + public static void Terminate(int exitCode) + { + MainTimeProvider.StopProvidingTime(); + GraphicFramework.glfwTerminate(); + Environment.Exit(exitCode); + } + + public static void Track( + object target, + string message, + bool isConsole, + [CallerFilePath] string filePath = "", + [CallerMemberName] string callerName = "", + [CallerLineNumber] int lineNumber = 0) + { + Type t = target.GetType(); + string log = $"Tracked object: {nameof(target)}\t\tType:{t.Name}\n"; + FieldInfo[] fieldInfo = t.GetFields( + BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + log += "|\tFieldName\t|\tFieldType\t|\tFieldValue\t|\n"; + foreach (FieldInfo field in fieldInfo) { + log += $"|{field.Name}\t\t|{field.FieldType}\t\t|{field.GetValue(target)}\t\t|\n"; + } + log += $"Tracking at:\n{filePath}\t{callerName}\tline {lineNumber}\n"; + log += $"Additional information:\n{message}\n"; + if (isConsole) + { + Console.WriteLine(log); + } else + { + DefaultLog.InternalWriteLog(log, LogType.Info); + } + } + + /// + /// Write a log message to log file, and mark the _level of this message. + /// + /// + /// A string contains information of how current evironment runs. + /// + /// + /// The severity of current message. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void WriteLog(string message, LogType logType) + { + DefaultLog.InternalWriteLog(message, logType); + } + + internal static TDele ConvertAPI(IntPtr funcPtr) + { + if (funcPtr == IntPtr.Zero) { + throw new InvalidCastException( + "Failed to convert api, the function pointer is zero."); + } + try + { + return Marshal.GetDelegateForFunctionPointer(funcPtr); + } + catch (Exception) + { + throw; + } + } + + internal static Delegate ConvertAPI(IntPtr funcPtr, Type T) + { + if (funcPtr == IntPtr.Zero) { + throw new InvalidCastException( + "Failed to convert api, the function pointer is zero."); + } + try + { + return Marshal.GetDelegateForFunctionPointer(funcPtr, T); + } + catch (Exception) + { + throw; + } + } + + internal static unsafe void InternalInitialize() + { + // Initialize time provider and start providing time + MainTimeProvider.StartProvidingTime(); + GraphicFramework.LoadGlfw(); + if (GraphicFramework.glfwInit() == 0) { + throw new Exception("Failed to init system graphic environment."); + } + DefaultLog.InternalAppendLog("\n\n\n"); + DefaultLog.InternalWriteLog( + $"Program {Assembly.GetEntryAssembly()!.FullName} on {Environment.MachineName} Started.", LogType.Info); + MainThreadID = System.Environment.CurrentManagedThreadId; + + + Dialogue.LoadDialogue(); + if (Dialogue.NeedShowWhenStartup) { + Dialogue.CreateDialogueProcessIfNotExist(); + } + + NativeIntrinsic.InitIntrinsicContext(); + } + + internal class Initializer : IStaticModule + { + + public string ModuleName => "StgSharp"; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void InitializeModule() + { + World.InternalInitialize(); + } + + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Environment/globalKeyStat.cs b/StgSharp.Common/Environment/globalKeyStat.cs new file mode 100644 index 00000000..3e307a0f --- /dev/null +++ b/StgSharp.Common/Environment/globalKeyStat.cs @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="globalKeyStat" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public static partial class World + { + + private static ConcurrentDictionary keyListener + = new ConcurrentDictionary(); + + public static KeyStatus CheckKey(KeyboardKey key) + { + return keyListener.GetOrAdd((int)key, KeyStatus.RELEASE); + } + + } +} diff --git a/StgSharp.Common/Geometries/Coordination/CoordinationBase.cs b/StgSharp.Common/Geometries/Coordination/CoordinationBase.cs new file mode 100644 index 00000000..9d36839c --- /dev/null +++ b/StgSharp.Common/Geometries/Coordination/CoordinationBase.cs @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CoordinationBase" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics.Graphic; + +using System.Runtime.CompilerServices; + +namespace StgSharp.Geometries +{ + public abstract class CoordinationBase + { + + private bool globalCoordAvailable; + private CoordinationBase localCoordination; + private Matrix44 coordMat; + + public CoordinationBase(CoordinationBase localCoordination) + { + this.localCoordination = localCoordination; + coordMat = new Matrix44(); + } + + public virtual Point LocalOrigin + { + get => new Point(coordMat.column[3].XYZ); + internal set => coordMat.column[3].XYZ = value.Coord; + } + + public virtual Vec3 LocalX + { + get => coordMat.column[3].XYZ; + internal set => coordMat.column[3].XYZ = value; + } + + public virtual Vec3 LocalY + { + get => coordMat.column[3].XYZ; + internal set => coordMat.column[3].XYZ = value; + } + + public virtual Vec3 LocalZ + { + get => coordMat.column[3].XYZ; + set => coordMat.column[3].XYZ = value; + } + + protected ref Matrix44 CoordMat + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => ref coordMat; + } + + } +} diff --git a/StgSharp.Common/Geometries/Coordination/PlainCoordinate.cs b/StgSharp.Common/Geometries/Coordination/PlainCoordinate.cs new file mode 100644 index 00000000..3a482cb8 --- /dev/null +++ b/StgSharp.Common/Geometries/Coordination/PlainCoordinate.cs @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PlainCoordinate" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Net.Http.Headers; +using System.Text; + +namespace StgSharp.Geometries +{ + public class PlainCoordinate : CoordinationBase + { + + public PlainCoordinate(CoordinationBase local, Point origin, Vec3 xAxis, Vec3 yAxis) + : base(local) + { + CoordMat = Matrix44.Unit; + + CoordMat.column[0] = new Vec4(xAxis, 0); + CoordMat.column[1] = new Vec4(yAxis, 0); + CoordMat.column[2] = new Vec4(Linear.Normalize(Vec3.Cross(xAxis, yAxis)), 0); + + LocalOrigin = origin; + } + + public static PlainCoordinate StandardPlainCoordination { get; } = new(null, new Point(0, 0, 0), + new Vec3(1, 0, 0), new Vec3(0, 1, 0)); + + } +} diff --git a/StgSharp.Common/Geometries/Coordination/SpaceCoordinate.cs b/StgSharp.Common/Geometries/Coordination/SpaceCoordinate.cs new file mode 100644 index 00000000..6a6b098c --- /dev/null +++ b/StgSharp.Common/Geometries/Coordination/SpaceCoordinate.cs @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="SpaceCoordinate" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Geometries +{ + public class SpaceCoordinate : CoordinationBase + { + + public SpaceCoordinate(CoordinationBase localCoordination, Point origin, Vec3 xAxis, Vec3 yAxis, Vec3 zAxis) + : base(localCoordination) { } + + } +} diff --git a/StgSharp.Common/Geometries/Coordination/StreamLocalCoordinate.cs b/StgSharp.Common/Geometries/Coordination/StreamLocalCoordinate.cs new file mode 100644 index 00000000..94b989f9 --- /dev/null +++ b/StgSharp.Common/Geometries/Coordination/StreamLocalCoordinate.cs @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="StreamLocalCoordinate" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + /* + public class StreamLocalCoordinate : CoordinationBase + { + } + /**/ +} diff --git a/StgSharp.Common/Geometries/GemoryException.cs b/StgSharp.Common/Geometries/GemoryException.cs new file mode 100644 index 00000000..d8117f18 --- /dev/null +++ b/StgSharp.Common/Geometries/GemoryException.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="GemoryException" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Runtime.Serialization; + +namespace StgSharp.Geometries +{ + public unsafe class ToUpperDimensionException : Exception + { + + protected ToUpperDimensionException(SerializationInfo info, StreamingContext context) : base(info, context) { } + + public ToUpperDimensionException() { } + + public ToUpperDimensionException(string message) : base(message) { } + + public ToUpperDimensionException(string message, Exception innerException) : base(message, innerException) { } + + } + + /// + /// 当几何体调用了过多的CalcVec方法时,产生UnusedVertexException异常 + /// + public class UnusedVertexException : Exception + { + + protected UnusedVertexException(SerializationInfo info, StreamingContext context) : base(info, context) { } + + public UnusedVertexException() { } + + public UnusedVertexException(string message) : base(message) { } + + public UnusedVertexException(string message, Exception innerException) : base(message, innerException) { } + + } +} diff --git a/StgSharp.Common/Geometries/GeometryOperation/GeometryOperation.cs b/StgSharp.Common/Geometries/GeometryOperation/GeometryOperation.cs new file mode 100644 index 00000000..efdc757e --- /dev/null +++ b/StgSharp.Common/Geometries/GeometryOperation/GeometryOperation.cs @@ -0,0 +1,113 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="GeometryOperation" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics.Graphic; +using StgSharp.Timing; + +using System; +using System.Runtime.InteropServices; + +namespace StgSharp.Geometries +{ + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate Vec3 GeometryMotionDelegate(TimeSpanProvider timeSource, out float rotation); + + public class GeometryMotion + { + + private bool isIncrementMode; + private bool sourceIsStatic; + private GeometryMotionDelegate movement; + private IntPtr handle; + private TimeSpanProvider time; + + public unsafe GeometryMotion( + bool isIncreament, + TimeSpanProvider timeSource, + GeometryMotionDelegate motionDelegate) + { + isIncrementMode = isIncreament; + time = timeSource; + if (motionDelegate == null) + { + handle = (IntPtr)(delegate*)&defaultMotion; + movement = defaultMotion; + } else if (motionDelegate.Method.IsStatic) + { + sourceIsStatic = true; + handle = Marshal.GetFunctionPointerForDelegate(motionDelegate); + movement = motionDelegate; + } else + { + movement = motionDelegate; + } + + // sourceIsStatic = false; + } + + public bool IsIncrement + { + get => isIncrementMode; + } + + public static GeometryMotion DefaultMotion + { + get => new GeometryMotion(true, null, null); + } + + public unsafe void RunMotion(ref Vec3 coord, ref float rotation) + { + float rot; + Vec3 vec; + if (sourceIsStatic) + { + vec = ((delegate* unmanaged[Cdecl])handle)( + time, out rot); + } else + { + vec = movement(time, out rot); + } + + if (isIncrementMode) + { + coord += vec; + rotation += rot; + } else + { + coord = vec; + rotation = rot; + } + } + + private static Vec3 defaultMotion(TimeSpanProvider provider, out float rotation) + { + rotation = 0; + return Vec3.Zero; + } + + }//------------------------------- End of Class ------------------------------- +} diff --git a/StgSharp.Common/Geometries/GeometryScaler/Angle.cs b/StgSharp.Common/Geometries/GeometryScaler/Angle.cs new file mode 100644 index 00000000..3dbf89a2 --- /dev/null +++ b/StgSharp.Common/Geometries/GeometryScaler/Angle.cs @@ -0,0 +1,175 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Angle" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Mathematics +{ + public static partial class GeometryScaler + { + + internal const float DegToRad = 180 / Scalar.Pi; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Cos(Radius r) + { + return MathF.Cos(r._radius); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Cos(Degree r) + { + return MathF.Cos(r._degree / DegToRad); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Sin(Radius r) + { + return MathF.Sin(r._radius); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Sin(Degree r) + { + return MathF.Sin(r._degree / DegToRad); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Tan(Radius r) + { + return MathF.Tan(r._radius); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Tan(Degree r) + { + return MathF.Tan(r._degree / DegToRad); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Degree ToDegree(float value) + { + return new Degree(value); + } + + } + + public struct Degree + { + + internal float _degree; + + public Degree(float dgree) + { + _degree = dgree; + } + + public static implicit operator Radius(Degree d) + { + return new Radius(d._degree / GeometryScaler.DegToRad); + } + + } + + public struct Radius + { + + internal float _radius; + + [Obsolete("Unsafe, you may forget this is radius.", true)] + public Radius() { } + + public Radius(float radius) + { + _radius = radius; + } + + public static Radius Zero + { + get => new Radius(0); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Radius operator -(Radius r) + { + return new Radius(-r._radius); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Radius operator -(Radius left, Radius Right) + { + return new Radius(left._radius - Right._radius); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(Radius left, Radius right) + { + return left._radius != right._radius; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Radius operator *(Radius left, float right) + { + return new Radius(left._radius * right); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Radius operator /(Radius left, float right) + { + return new Radius(left._radius / right); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float operator /(Radius left, Radius right) + { + return left._radius / right._radius; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Radius operator +(Radius left, Radius Right) + { + return new Radius(left._radius + Right._radius); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(Radius left, Radius right) + { + return left._radius == right._radius; + } + + public static implicit operator Degree(Radius r) + { + return new Degree((r._radius * 180) / Scalar.Pi); + } + + } +} diff --git a/StgSharp.Common/Geometries/IGeometry.cs b/StgSharp.Common/Geometries/IGeometry.cs new file mode 100644 index 00000000..d88eb569 --- /dev/null +++ b/StgSharp.Common/Geometries/IGeometry.cs @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IGeometry" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + public interface IGeometry + { + + public Point this[int index] { get; set; } + + #pragma warning disable CA1819 + public Vec4[] VertexStream + #pragma warning restore CA1819 + { get; } + + public CoordinationBase Coordination { get; } + + public int VertexCount { get; } + + public ReadOnlySpan VertexIndices { get; } + + } +} diff --git a/StgSharp.Common/Geometries/IGeomtryBuffer.cs b/StgSharp.Common/Geometries/IGeomtryBuffer.cs new file mode 100644 index 00000000..3cb80107 --- /dev/null +++ b/StgSharp.Common/Geometries/IGeomtryBuffer.cs @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IGeomtryBuffer" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + public interface IGeomtryBuffer { } +} diff --git a/StgSharp.Common/Geometries/IInstancing.cs b/StgSharp.Common/Geometries/IInstancing.cs new file mode 100644 index 00000000..ecab0a6d --- /dev/null +++ b/StgSharp.Common/Geometries/IInstancing.cs @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IInstancing" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + public interface IInstancing + { + + public float Rotation { get { return GlobalBuffer.CoordAndRotationList[BufferId].W; } set + { + Vec4 temp = GlobalBuffer.CoordAndRotationList[ + BufferId]; + temp.W = value; + GlobalBuffer.CoordAndRotationList[ + BufferId] = temp; + } } + + public float Scale { get { return GlobalBuffer.ScalingList[BufferId]; } set { GlobalBuffer.ScalingList[BufferId] = value; } } + + public GeometryMotion Motion { get; set; } + + public IInstancingBuffer GlobalBuffer { get; internal set; } + + public int BufferId { get; internal set; } + + public Vec3 CenterPositionGlobal { get; internal set; } + + public Vec3 Coord { get { return GlobalBuffer.CoordAndRotationList[BufferId].XYZ; } set { GlobalBuffer.CoordAndRotationList[BufferId] = new Vec4(value.reg); } } + + public void Move() + { + (Vec3 coord, float rotation) = (Coord, Rotation); + Motion.RunMotion(ref coord, ref rotation); + (Coord, Rotation) = (coord, rotation); + } + + } +} diff --git a/StgSharp.Common/Geometries/IInstancingBuffer.cs b/StgSharp.Common/Geometries/IInstancingBuffer.cs new file mode 100644 index 00000000..654ccb99 --- /dev/null +++ b/StgSharp.Common/Geometries/IInstancingBuffer.cs @@ -0,0 +1,53 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IInstancingBuffer" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Geometries +{ + public interface IInstancingBuffer + { + + public Span CoordAndRotationSpan { get; } + + public Span ScalingSpan { get; } + + internal IGeometry TypicalShape { get; } + + internal List InstanceList { get; } + + internal List CoordAndRotationList { get; } + + internal List ScalingList { get; } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Cordinate.cs b/StgSharp.Common/Geometries/PlainGeometry/Cordinate.cs new file mode 100644 index 00000000..6fa362cf --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Cordinate.cs @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Cordinate" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + [StructLayout(LayoutKind.Sequential)] + public struct PartialPlainCoordinate + { + /* + internal Matrix32 axis; + + /// + /// The _origin of this coordinate. + /// + public Vec3 origin; + + public PartialPlainCoordinate( Vec3 origin, Vec3 horiziontial, Vec3 vertical ) + { + this.origin = origin; + axis = new Matrix32(); + Unsafe.SkipInit( out axis.mat ); + axis.colum0 = horiziontial; + axis.colum1 = vertical; + } + + /// + /// The horizontial axis of the coordinate. Point to the right direction. + /// + public Vec3 axis_H => axis.colum0; + + /// + /// The vertical axis of the coordinate. Point to the top direction. + /// + public Vec3 axis_V => axis.colum1; + + [MethodImpl( MethodImplOptions.AggressiveInlining )] + public Vec3 GetRealLocate( Vec2 raletiveLocation ) + { + return origin + axis.VerticalVecMultiply( raletiveLocation ); + } + */ + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Define/GeometryOperation.cs b/StgSharp.Common/Geometries/PlainGeometry/Define/GeometryOperation.cs new file mode 100644 index 00000000..755b1762 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Define/GeometryOperation.cs @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="GeometryOperation" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System.Runtime.CompilerServices; + +namespace StgSharp.Geometries +{ + public static unsafe class GeometryOperation + { + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vec3 DefaultMotion(int tick) + { + return default(Vec3); + } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Define/IPlainEntity.cs b/StgSharp.Common/Geometries/PlainGeometry/Define/IPlainEntity.cs new file mode 100644 index 00000000..375e0604 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Define/IPlainEntity.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IPlainEntity" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + public interface IPlainEntity + { + + public Vec2 CenterPosition { get; set; } + + public bool CollideWith(IPlainEntity entity); + + } + + public class PlainEntity : IPlainEntity + { + + private PlainGeometry _shape; + + public PlainEntity(PlainGeometry shape) + { + _shape = shape; + } + + bool IPlainEntity.CollideWith(IPlainEntity entity) + { + throw new NotImplementedException(); + } + + Vec2 IPlainEntity.CenterPosition + { + get => _shape.Coordination.LocalOrigin.Coord.XY; + set => throw new InvalidOperationException(); + } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Define/ParticleOnPlain.cs b/StgSharp.Common/Geometries/PlainGeometry/Define/ParticleOnPlain.cs new file mode 100644 index 00000000..02f2bba0 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Define/ParticleOnPlain.cs @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ParticleOnPlain" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + public class ParticleOnPlain : IInstancing, IPlainEntity + { + + public ParticleOnPlain(PlainInstancingBuffer buffer) + { + if (buffer == null) { + throw new ArgumentNullException(paramName:nameof(buffer)); + } + GlobalBuffer = buffer; + BufferId = buffer.CreateInstanceID(); + ((IInstancingBuffer)buffer).InstanceList.Add(this); + } + + public GeometryMotion Motion { get; set; } + + public IInstancingBuffer GlobalBuffer { get; set; } + + public int BufferId { get; set; } + + Vec3 IInstancing.CenterPositionGlobal { get; set; } + + bool IPlainEntity.CollideWith(IPlainEntity entity) + { + throw new NotImplementedException(); + } + + Vec2 IPlainEntity.CenterPosition + { + get => GlobalBuffer.CoordAndRotationList[BufferId].XY; + set => throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Define/PlainGeometry.cs b/StgSharp.Common/Geometries/PlainGeometry/Define/PlainGeometry.cs new file mode 100644 index 00000000..45e87a2e --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Define/PlainGeometry.cs @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PlainGeometry" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.ComponentModel; + +namespace StgSharp.Geometries +{ + /// + /// Plain geometry only contains straight sides. + /// + public abstract class PlainGeometry : IGeometry + { + + protected Vec4[] vertexMat; + internal CoordinationBase coordinate; + + internal PlainGeometry(CoordinationBase coordination) + { + coordinate = coordination; + } + + public Point this[int index] + { + get => new Point(vertexMat[index]); + set => vertexMat[index].vec = value.coordVec; + } + + public int VertexCount => this.vertexMat.Length; + + public abstract ReadOnlySpan VertexIndices { get; } + + #pragma warning disable CA1819 + public Vec4[] VertexStream => vertexMat; + + public CoordinationBase Coordination => this.coordinate; +#pragma warning restore CA1819 + } +} \ No newline at end of file diff --git a/StgSharp.Common/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs b/StgSharp.Common/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs new file mode 100644 index 00000000..452fcb6c --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Define/PlainInstancingBuffer.cs @@ -0,0 +1,187 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PlainInstancingBuffer" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.Mathematics.Numeric; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Numerics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Geometries +{ + public class PlainInstancingBuffer : IDisposable, IEnumerable, IInstancingBuffer where T: IInstancing + { + + private bool disposedValue; + + private CoordinatePlain globalCoordinate; + private List coordList; + private List instanceList; + private List scalingList; + private Mutex mutex; + + public PlainInstancingBuffer() + { + coordList = new List(capacity:100); + instanceList = new List(capacity:100); + scalingList = new List(capacity:100); + coordArray = Array.Empty(); + scaleArray = Array.Empty(); + mutex = new Mutex(); + } + + public List InstanceList + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => instanceList; + } + + public List CoordAndRotationList + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => coordList; + } + + public List ScalingList + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => scalingList; + } + + public Span CoordAndRotationSpan + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => CollectionsMarshal.AsSpan(coordList); + } + + public Span ScalingSpan + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => CollectionsMarshal.AsSpan(scalingList); + } + + public int CreateInstanceID() + { + mutex.WaitOne(); + int ret = instanceList.Count; + coordList.Add(new Vec4()); + scalingList.Add(0); + mutex.ReleaseMutex(); + return ret; + } + + // ~PlainInstancingBuffer() + // { + // Dispose(disposing: false); + // } + + public void Dispose() + { + Dispose(disposing:true); + GC.SuppressFinalize(this); + } + + public IEnumerator GetEnumerator() + { + foreach (IInstancing item in instanceList) { + yield return (T)item; + } + } + + public void Remove(T instance) + { + mutex.WaitOne(); + if (instance.GlobalBuffer != this) { + throw new ArgumentException( + message:"instance does not belong to current Particle Buffer", + paramName:nameof(instance)); + } + int index = instance.BufferId; + IInstancing temp = instanceList[^1]; + instanceList[instance.BufferId] = temp; + temp.BufferId = instance.BufferId; + + coordList[instance.BufferId] = coordList[^1]; + scalingList[instance.BufferId] = scalingList[^1]; + + instanceList.RemoveAt(instanceList.Count - 1); + coordList.RemoveAt(coordList.Count - 1); + scalingList.RemoveAt(scalingList.Count - 1); + mutex.ReleaseMutex(); + } + + public void UpdateAllParticles() + { + foreach (IInstancing particle in instanceList) { + particle.Move(); + } + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) { + mutex.Dispose(); + } + + coordList.Clear(); + instanceList.Clear(); + scalingList.Clear(); + disposedValue = true; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + foreach (IInstancing item in instanceList) { + yield return (T)item; + } + } + + IGeometry IInstancingBuffer.TypicalShape => throw new NotImplementedException(); + + #region field of mem opt + + private Vec4[] coordArray; + private float[] scaleArray; + + #endregion + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Parallelogram.cs b/StgSharp.Common/Geometries/PlainGeometry/Parallelogram.cs new file mode 100644 index 00000000..cacdf6ed --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Parallelogram.cs @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Parallelogram" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; + +namespace StgSharp.Geometries +{ + public class Parallelogram : Polygon4 + { + + internal readonly Func movCenterOperation = GeometryOperation.DefaultMotion; + + internal Point center; + + public Parallelogram(float v0x, float v0y, float v1x, float v1y, float v2x, float v2y, float v3x, float v3y) + : base(v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y) + { + #if DEBUG + if (this[0].Coord + this[2].Coord != this[1].Coord + this[3].Coord) + { + DefaultLog.InternalWriteLog( + "Init of geometry item failed, because four vertices cannot form a rectangle.", + LogType.Warning); + } + #endif + } + + public Parallelogram( + PlainCoordinate coordination, + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y) + : base(coordination, v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y) + { + #if DEBUG + if (this[0].Coord + this[2].Coord != this[1].Coord + this[3].Coord) + { + DefaultLog.InternalWriteLog( + "Init of geometry item failed, because four vertices cannot form a rectangle.", + LogType.Warning); + } + #endif + } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Plain.cs b/StgSharp.Common/Geometries/PlainGeometry/Plain.cs new file mode 100644 index 00000000..ccb02f9a --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Plain.cs @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Plain" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System.Numerics; + +namespace StgSharp.Geometries +{ + public unsafe class Plain + { + + internal readonly float d = -1; + internal Vec3 _origin; + + internal Vec3 plainParameter; + internal Vec3 vec1; + internal Vec3 vec2; + + public Plain(Vec3 o, Vec3 v1, Vec3 v2) + { + this._origin = o; + this.vec1 = v1 - (v2 * (v1.Y / v2.Y)); //xz + this.vec2 = v2 - (vec1 * (v2.X / v1.X)); //yz + + // |_origin|-k1*|vec1|-k2*|vec2| --> plainParameter.Z; + plainParameter.Z = _origin.Z - (vec1.Z * (_origin.X / vec1.X)) - (vec2.Z * (_origin.Y / vec2.Y)); + + // plainParameter.Z -> plainParameter.X, plainParameter.Y + plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z); + plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z); + + plainParameter.X = 1 / plainParameter.X; + plainParameter.Y = 1 / plainParameter.Y; + plainParameter.Z = 1 / plainParameter.Z; + } + + public Plain(Point p1, Point p2, Point p3) + { + Vec3 origin = p1.Coord; + Vec3 v1 = p2.Coord - origin; + Vec3 v2 = p3.Coord - origin; + + + vec1 = v1 - (v2 * (v1.Y / v2.Y)); //xz + vec2 = v2 - (vec1 * (v2.X / v1.X)); //yz + + // |_origin|-k1*|vec1|-k2*|vec2| --> plainParameter.Z; + plainParameter.Z = origin.Z - (vec1.Z * (origin.X / vec1.X)) - (vec2.Z * (origin.Y / vec2.Y)); + + // plainParameter.Z --> plainParameter.X, plainParameter.Y + plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z); + plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z); + + plainParameter.X = 1 / plainParameter.X; + plainParameter.Y = 1 / plainParameter.Y; + plainParameter.Z = 1 / plainParameter.Z; + } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Polygon4.cs b/StgSharp.Common/Geometries/PlainGeometry/Polygon4.cs new file mode 100644 index 00000000..007569c0 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Polygon4.cs @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Polygon4" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Numerics; + +namespace StgSharp.Geometries +{ + public class Polygon4 : PlainGeometry + { + + protected static int[] Indices = [ + 0, + 1, + 2, + 0, + 2, + 3 + ]; + + internal Polygon4() + : base(PlainCoordinate.StandardPlainCoordination) + { + vertexMat = new Vec4[4]; + } + + internal Polygon4(Vec4[] rawCoord) + : base(PlainCoordinate.StandardPlainCoordination) + { + if (rawCoord.Length != 4) { + throw new ArgumentOutOfRangeException(nameof(rawCoord)); + } + vertexMat = rawCoord; + } + + public Polygon4(Point topLeft, Point topRight, Point bottomRight, Point bottomLeft) + : base(PlainCoordinate.StandardPlainCoordination) + { + this[0] = topLeft; + this[1] = topRight; + this[2] = bottomRight; + this[3] = bottomLeft; + } + + public Polygon4( + CoordinationBase coordinate, + PlainCoordinate coordination, + Point topLeft, + Point topRight, + Point bottomRight, + Point bottomLeft) + : base(coordinate) + { + this[0] = topLeft; + this[1] = topRight; + this[2] = bottomRight; + this[3] = bottomLeft; + } + + public Polygon4(float v0x, float v0y, float v1x, float v1y, float v2x, float v2y, float v3x, float v3y) + : base(PlainCoordinate.StandardPlainCoordination) + { + vertexMat = new Vec4[4]; + + this[0] = new Point(v0x, v0y, 0); + this[1] = new Point(v1x, v1y, 0); + this[2] = new Point(v2x, v2y, 0); + this[3] = new Point(v3x, v3y, 0); + } + + public Polygon4( + PlainCoordinate coordination, + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y) + : base(coordination) + { + vertexMat = new Vec4[4]; + + this[0] = new Point(v0x, v0y, 0); + this[1] = new Point(v1x, v1y, 0); + this[2] = new Point(v2x, v2y, 0); + this[3] = new Point(v3x, v3y, 0); + } + + public override ReadOnlySpan VertexIndices => Indices; + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Polygon5.cs b/StgSharp.Common/Geometries/PlainGeometry/Polygon5.cs new file mode 100644 index 00000000..320dddda --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Polygon5.cs @@ -0,0 +1,103 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Polygon5" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Numerics; + +namespace StgSharp.Geometries +{ + public unsafe class Polygon5 : PlainGeometry + { + + internal static int[] Indices = [ + 0, + 1, + 2, + 0, + 2, + 3, + 0, + 3, + 4 + ]; + + public unsafe Polygon5() + : base(PlainCoordinate.StandardPlainCoordination) + { + vertexMat = new Vec4[5]; + } + + public Polygon5( + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y, + float v4x, + float v4y) + : base(PlainCoordinate.StandardPlainCoordination) + { + vertexMat = new Vec4[5]; + this[0] = new Point(v0x, v0y, 0); + this[1] = new Point(v1x, v1y, 0); + this[2] = new Point(v2x, v2y, 0); + this[3] = new Point(v3x, v3y, 0); + this[4] = new Point(v4x, v4y, 0); + } + + public Polygon5( + PlainCoordinate coordination, + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y, + float v4x, + float v4y) + : base(coordination) + { + vertexMat = new Vec4[5]; + this[0] = new Point(v0x, v0y, 0); + this[1] = new Point(v1x, v1y, 0); + this[2] = new Point(v2x, v2y, 0); + this[3] = new Point(v3x, v3y, 0); + this[4] = new Point(v4x, v4y, 0); + } + + public override ReadOnlySpan VertexIndices => Indices; + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Polygon6.cs b/StgSharp.Common/Geometries/PlainGeometry/Polygon6.cs new file mode 100644 index 00000000..3cd6d964 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Polygon6.cs @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Polygon6" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Numerics; + +namespace StgSharp.Geometries +{ + public class Polygon6 : PlainGeometry + { + + internal static int[] Indices = [ + 0, + 1, + 2, + 0, + 2, + 3, + 0, + 3, + 4, + 0, + 4, + 5 + ]; + + public Polygon6() + : base(PlainCoordinate.StandardPlainCoordination) + { + vertexMat = new Vec4[6]; + } + + public Polygon6( + PlainCoordinate coordination, + Vec2 vert0, + Vec2 vert1, + Vec2 vert2, + Vec2 vert3, + Vec2 vert4, + Vec2 vert5, + Vec2 vert6) + : base(coordination) + { + vertexMat = new Vec4[6]; + vertexMat[0].reg = vert0.reg; + vertexMat[1].reg = vert1.reg; + vertexMat[2].reg = vert2.reg; + vertexMat[3].reg = vert3.reg; + vertexMat[4].reg = vert4.reg; + vertexMat[5].reg = vert5.reg; + vertexMat[6].reg = vert6.reg; + } + + public override ReadOnlySpan VertexIndices => Indices; + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Geometries/PlainGeometry/Rectangle.cs b/StgSharp.Common/Geometries/PlainGeometry/Rectangle.cs new file mode 100644 index 00000000..56389b05 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Rectangle.cs @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Rectangle" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Numerics; + +namespace StgSharp.Geometries +{ + public class Rectangle : Parallelogram + { + + public Rectangle(float v0x, float v0y, float v1x, float v1y, float v2x, float v2y, float v3x, float v3y) + : base(v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y) + { + #if DEBUG + Vec2 side0 = (this[0].Coord - this[1].Coord).XY; + Vec2 side1 = (this[2].Coord - this[1].Coord).XY; + if (side0.Cross(side1) == 0) { + throw new ArgumentException(); + } + #endif + } + + public Rectangle( + PlainCoordinate coordination, + float v0x, + float v0y, + float v1x, + float v1y, + float v2x, + float v2y, + float v3x, + float v3y) + : base(coordination, v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y) + { + #if DEBUG + Vec2 side0 = (this[0].Coord - this[1].Coord).XY; + Vec2 side1 = (this[2].Coord - this[1].Coord).XY; + if (side0.Cross(side1) == 0) { + throw new ArgumentException(); + } + #endif + } + + /// + /// Calculate movement to center + /// + /// + /// CurrentPipeline time tick + /// + /// + /// + /// + public virtual Vec3 MovCenter(uint tick) + { + return default(Vec3); + } + + } +} diff --git a/StgSharp.Common/Geometries/PlainGeometry/Square.cs b/StgSharp.Common/Geometries/PlainGeometry/Square.cs new file mode 100644 index 00000000..15f04494 --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Square.cs @@ -0,0 +1,47 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Square" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; + +using System.Numerics; + +namespace StgSharp.Geometries +{ + /// + /// A square + /// + public class Square : Rectangle + { + + public Square(float v0x, float v0y, float v1x, float v1y, float v2x, float v2y, float v3x, float v3y) + : base(v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y) + { + if (true) { } + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Geometries/PlainGeometry/Triangle.cs b/StgSharp.Common/Geometries/PlainGeometry/Triangle.cs new file mode 100644 index 00000000..e35b018c --- /dev/null +++ b/StgSharp.Common/Geometries/PlainGeometry/Triangle.cs @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Triangle" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Numerics; + +namespace StgSharp.Geometries +{ + public unsafe class Triangle : PlainGeometry + { + + internal static int[] Indices = [ + 0, + 1, + 2 + ]; + + public Triangle() + : base(PlainCoordinate.StandardPlainCoordination) + { + vertexMat = new Vec4[3]; + } + + public Triangle(Point vertex01, Point vertex02, Point vertex03) + : base(PlainCoordinate.StandardPlainCoordination) + { + this[0] = vertex01; + this[1] = vertex02; + this[2] = vertex03; + } + + public Triangle(PlainCoordinate coordination, Point vertex01, Point vertex02, Point vertex03) + : base(coordination) + { + this[0] = vertex01; + this[1] = vertex02; + this[2] = vertex03; + } + + public Triangle(float v0x, float v0y, float v1x, float v1y, float v2x, float v2y) + : base(PlainCoordinate.StandardPlainCoordination) + { + this[0] = new Point(v0x, v0y, 0); + this[1] = new Point(v1x, v1y, 0); + this[2] = new Point(v2x, v2y, 0); + } + + public Triangle(PlainCoordinate coordination, float v0x, float v0y, float v1x, float v1y, float v2x, float v2y) + : base(coordination) + { + this[0] = new Point(v0x, v0y, 0); + this[1] = new Point(v1x, v1y, 0); + this[2] = new Point(v2x, v2y, 0); + } + + public override ReadOnlySpan VertexIndices => Indices; + + } +} diff --git a/StgSharp.Common/Geometries/Point.cs b/StgSharp.Common/Geometries/Point.cs new file mode 100644 index 00000000..96a8db7c --- /dev/null +++ b/StgSharp.Common/Geometries/Point.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Point" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Geometries +{ + [StructLayout(LayoutKind.Explicit, Size = 16)] + public struct Point + { + + [FieldOffset(0)] private Vec3 coord; + [FieldOffset(0)] internal Vector4 coordVec; + + internal Point(Vec4 vector) + { + coordVec = vector.vec; + coordVec.W = 1; + } + + public Point(Vec3 coord) + { + Coord = coord; + coordVec.W = 1; + } + + public Point(float x, float y, float z) + { + coordVec = new Vector4(x, y, z, 1); + } + + public Vec3 Coord + { + get => coord; + set { coord = value; } + } + + } +} diff --git a/StgSharp.Common/Geometries/SpaceGeometry/Class1.cs b/StgSharp.Common/Geometries/SpaceGeometry/Class1.cs new file mode 100644 index 00000000..60e2a685 --- /dev/null +++ b/StgSharp.Common/Geometries/SpaceGeometry/Class1.cs @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Class1" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Geometries.SpaceGeometry +{ + internal class Class1 { } +} diff --git a/StgSharp.Common/Geometries/SpaceGeometry/TriangulatedSurface.cs b/StgSharp.Common/Geometries/SpaceGeometry/TriangulatedSurface.cs new file mode 100644 index 00000000..ee9a7611 --- /dev/null +++ b/StgSharp.Common/Geometries/SpaceGeometry/TriangulatedSurface.cs @@ -0,0 +1,146 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TriangulatedSurface" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Text; + +namespace StgSharp.Geometries +{ + public class TriangulatedSurface + { + + private HashSet<(int begin,int end)> _sides; + + private List> _sideIndices; + private List _triangleIndices; + private List _vertices; + + public TriangulatedSurface() + { + _triangleIndices = new List(); + _vertices = new List(); + _sides = new HashSet<(int,int)>(); + _sideIndices = new List>(); + } + + /**/ + public IEnumerable> SideIndicesEnumeratble + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _sideIndices ; + } + + /* + public Triangle GetTriangle( int index ) + { + Vec3HP v1,v2,v3; + int t = index * 3; + v1 = _vertices[ t + 0 ]; + v2 = _vertices[ t + 1 ]; + v3 = _vertices[ t + 2 ]; + return new Triangle( v1, v2, v3 ); + } + /**/ + + public Span VertexSpan + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => CollectionsMarshal.AsSpan(_vertices); + } + + public Span TriangleIndicesSpan + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => CollectionsMarshal.AsSpan(_triangleIndices); + } + + /**/ + public void AddIndicesByOrder(int v1, int v2, int v3) + { + _triangleIndices.Add(v1); + _triangleIndices.Add(v2); + _triangleIndices.Add(v3); + if (!(_sides.Remove((v1,v2)) || _sides.Remove((v2, v1)))) { + _ = _sides.Add((v1, v2)); + } + if (!(_sides.Remove((v2, v3)) || _sides.Remove((v3, v2)))) { + _ = _sides.Add((v2, v3)); + } + if (!(_sides.Remove((v3, v1)) || _sides.Remove((v1, v3)))) { + _ = _sides.Add((v3, v1)); + } + } + + public void AddVertexByOrder(Vec3 vertex) + { + _vertices.Add(vertex); + } + + public int TriangleCount() + { + return _triangleIndices.Count / 3; + } + + public void TrimExcess() + { + _triangleIndices.TrimExcess(); + _vertices.TrimExcess(); + Dictionary side_dictionary = _sides.ToDictionary(x => x.begin, x => x.end); + int begin = side_dictionary.First().Key; + List sideLoop = new(begin); + _sideIndices.Add(sideLoop); + while (side_dictionary.Count > 0) + { + if (side_dictionary.Remove(begin, out begin)) + { + sideLoop.Add(begin); + } else + { + begin = side_dictionary.First().Key; + sideLoop = new List(begin); + _sideIndices.Add(sideLoop); + } + } + _sideIndices.TrimExcess(); + } + + public int VertexCount() + { + return _vertices.Count; + } + + } +} diff --git a/StgSharp.Common/Global.cs b/StgSharp.Common/Global.cs new file mode 100644 index 00000000..b4d9803e --- /dev/null +++ b/StgSharp.Common/Global.cs @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Global" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +global using StgSharp.Internal; +global using StgSharp.Internal.Intrinsic; +global + +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("StgSharp.Mathematics")] + +[assembly: SuppressMessage( + "Design", + "CA1008:枚举应具有零值", + Justification = "<挂起>", + Scope = "type", + Target = "~T:StgSharp.Graphics.OpenGL.ShaderStatus")] +[assembly: SuppressMessage( + "Naming", + "CA1715:标识符应具有正确的前缀", + Justification = "<挂起>", + Scope = "member", + Target = "~M:StgSharp.Graphics.OpenGL.ShaderProgram.GetUniform``2(System.String)~StgSharp.Graphics.OpenGL.Uniform{``0,``1}")] +[assembly: SuppressMessage( + "Naming", + "CA1715:标识符应具有正确的前缀", + Justification = "<挂起>", + Scope = "member", + Target = "~M:StgSharp.Graphics.OpenGL.ShaderProgram.GetUniform``3(System.String)~StgSharp.Graphics.OpenGL.Uniform{``0,``1,``2}")] +[assembly: SuppressMessage( + "Naming", + "CA1715:标识符应具有正确的前缀", + Justification = "<挂起>", + Scope = "member", + Target = "~M:StgSharp.Graphics.OpenGL.ShaderProgram.GetUniform``4(System.String)~StgSharp.Graphics.OpenGL.Uniform{``0,``1,``2,``3}")] +[assembly: SuppressMessage( + "Naming", + "CA1715:标识符应具有正确的前缀", + Justification = "<挂起>", + Scope = "type", + Target = "~T:StgSharp.Graphics.OpenGL.Uniform`4")] +[assembly: SuppressMessage( + "Design", + "CA1043:将整型或字符串参数用于索引器", + Justification = "<挂起>", + Scope = "member", + Target = "~P:StgSharp.MVVM.ViewBase.IViewResponder`1.Item(StgSharp.Controlling.UsrActivity.ITrigger)")] +[assembly: SuppressMessage( + "Design", + "CA1043:将整型或字符串参数用于索引器", + Justification = "<挂起>", + Scope = "member", + Target = "~P:StgSharp.MVVM.ViewBase.ViewResponder`1.Item(StgSharp.Controlling.UsrActivity.ITrigger)")] +[assembly: SuppressMessage( + "Performance", + "CA1864:首选 \"IDictionary.TryAdd(TKey, TValue)\" 方法", + Justification = "<挂起>", + Scope = "member", + Target = "~P:StgSharp.MVVM.ViewBase.ViewRender`1.Item(System.String)")] +[assembly: SuppressMessage( + "Design", + "CA1033:接口方法应可由子类型调用", + Justification = "<挂起>", + Scope = "member", + Target = "~P:StgSharp.Collections.IBidirectionalDictionary`2.System#Collections#Generic#IDictionary#Keys")] +[assembly: SuppressMessage( + "Design", + "CA1033:接口方法应可由子类型调用", + Justification = "<挂起>", + Scope = "member", + Target = "~P:StgSharp.Collections.IBidirectionalDictionary`2.System#Collections#Generic#IDictionary#Values")] diff --git a/StgSharp.Common/Graphics/CPUanimation/IImageProvider.cs b/StgSharp.Common/Graphics/CPUanimation/IImageProvider.cs new file mode 100644 index 00000000..63095bd9 --- /dev/null +++ b/StgSharp.Common/Graphics/CPUanimation/IImageProvider.cs @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IImageProvider" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Graphics +{ + public interface IImageProvider + { + + Image ProvideImage(); + + } +} diff --git a/StgSharp.Common/Graphics/CPUanimation/ImageHelper.cs b/StgSharp.Common/Graphics/CPUanimation/ImageHelper.cs new file mode 100644 index 00000000..559e4f06 --- /dev/null +++ b/StgSharp.Common/Graphics/CPUanimation/ImageHelper.cs @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ImageHelper" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; + +namespace StgSharp.Graphics +{ + public static class ImageHelper + { + + public static void Resize(Image i, int width, int height, ImageMovement move) + { + if (i == null) { + throw new ArgumentNullException(nameof(i)); + } + if (i.Size == (width, height)) { + return; + } + if (!Enum.IsDefined(typeof(ImageMovement), move)) { + throw new InvalidEnumArgumentException(nameof(move)); + } + byte[] oldData = i.Data; + i.Data = new byte[width * height * i.PixelSize]; + i.Height = height; + i.Width = width; + i.PixelUpdateCount++; + switch (move) + { + case ImageMovement.Discard: + break; + case ImageMovement.Top: + break; + default: + throw new NotImplementedException(); + } + } + + } + + [Flags] + public enum ImageMovement + { +#pragma warning disable CA1008 + Discard = 0, + #pragma warning restore CA1008 + Top = 1, + Bottom = 2, + Left = 4, + Right = 8, + TopLeft = Top | Left, + BottomLeft = Bottom | Left, + TopRight = Top | Right, + BottomRight = Bottom | Right, + + } +} diff --git a/StgSharp.Common/Graphics/Define/BufferObjectBase.cs b/StgSharp.Common/Graphics/Define/BufferObjectBase.cs new file mode 100644 index 00000000..7047e002 --- /dev/null +++ b/StgSharp.Common/Graphics/Define/BufferObjectBase.cs @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="BufferObjectBase" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics +{ + /// + /// Interface of all kinds OpenGL BufferHandle objects + /// + public abstract class BufferObjectBase : IDisposable + { + + protected GlHandle[] _bufferHandle; + protected RenderStream binding; + + /// + /// Get the only handle to one of the Object instance + /// + /// + /// + /// + /// + /// + /// + public GlHandle this[int index] => _bufferHandle[index]; + + /// + /// Bind a BufferHandle instance to OpenGL + /// + /// + /// Index of handle of the object in this instance to be bind + /// + public abstract void Bind(int index); + + public void Dispose() + { + Dispose(disposing:true); + GC.SuppressFinalize(this); + } + + /// + public override string ToString() + { + return $"This is a {GetType().FullName}, containing {_bufferHandle.Length} buffer handles: {_bufferHandle.ToString()}."; + } + + protected abstract void Dispose(bool disposing); + + ~BufferObjectBase() + { + Dispose(disposing:false); + } + + } +} diff --git a/StgSharp.Common/Graphics/IGraphicAPIs.cs b/StgSharp.Common/Graphics/IGraphicAPIs.cs new file mode 100644 index 00000000..823c60f1 --- /dev/null +++ b/StgSharp.Common/Graphics/IGraphicAPIs.cs @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IGraphicAPIs" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Graphics +{ + public interface IGraphicAPIs + { + + public IntPtr GraphicApiPackageHandle { get; } + + } +} diff --git a/StgSharp.Common/Graphics/Image.cs b/StgSharp.Common/Graphics/Image.cs new file mode 100644 index 00000000..102a4350 --- /dev/null +++ b/StgSharp.Common/Graphics/Image.cs @@ -0,0 +1,191 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Image" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.OpenGL; + +using System; +using System.Runtime.CompilerServices; + +namespace StgSharp.Graphics +{ + public class Image : ISSDSerializable, IImageProvider + { + + private byte[] _data; + private ImageInfo _rawInfo; + private int _pixelUpdateCount = 0; + + internal unsafe Image() + { + _rawInfo = new ImageInfo(); + } + + internal Image(ImageInfo information) + { + _rawInfo = information; + _data = []; + + // int length = _rawInfo.width * _rawInfo.height * _rawInfo.channel; + } + + public (int width, int height) Size + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => (_rawInfo.Width, _rawInfo.Height); + } + + public byte[] PixelBuffer + { + get + { + if ((_data.Length == 0) || (_data == null)) + { + GetBytes(); + return _data!; + } + return _data; + } + } + + public ImageChannel Channel => _rawInfo.Channel; + + /// + /// Hash code of time pixels updated last time. + /// + public int PixelUpdateCount + { + get => _pixelUpdateCount; + internal set => _pixelUpdateCount = value; + } + + public int ChannelCount => _rawInfo.ChannelCount; + + public int Height + { + get => _rawInfo.Height; + internal set => _rawInfo.Height = value; + } + + public int Width + { + get => _rawInfo.Width; + internal set => _rawInfo.Width = value; + } + + public int PixelSize => ImageInfo.GetPixelSize(_rawInfo.pixelLayout, _rawInfo.Channel); + + public PixelChannelLayout PixelLayout + { + get => _rawInfo.pixelLayout; + private set => _rawInfo.pixelLayout = value; + } + + public SerializableTypeCode SSDTypeCode => SerializableTypeCode.PixelImage; + + internal ref byte[] Data => ref _data; + + public void FromBytes(byte[] stream) { } + + public static unsafe Image FromFile(string route, ImageLoader loader) + { + Image ret = new Image(); + fixed (ImageInfo* iptr = &ret._rawInfo) { + GraphicFramework.InternalLoadImage(route, iptr, loader); + } + return ret; + } + + public static Image FromMemory((int width, int height) size, ImageChannel channel, byte[] stream) + { + ImageInfo _info = new ImageInfo + { + Height = size.height, + Width = size.width, + Channel = channel, + StreamPtr = IntPtr.Zero + }; + Image ret = new Image(_info); + ret.PixelLayout = PixelChannelLayout.Byte; + ret._data = stream; + return ret; + } + + public static Image FromMemory( + (int width, int height) size, + ImageChannel channel, + PixelChannelLayout layout, + byte[] stream) + { + ImageInfo _info = new ImageInfo + { + Height = size.height, + Width = size.width, + Channel = channel, + StreamPtr = IntPtr.Zero + }; + Image ret = new Image(_info); + ret.PixelLayout = layout; + ret._data = stream; + return ret; + } + + public unsafe byte[] GetBytes() + { + if (_data.Length == 0) + { + int size = Width * Height * ImageInfo.GetPixelSize(PixelLayout, Channel); + _data = new Span((byte*)_rawInfo.StreamPtr, size).ToArray(); + fixed (ImageInfo* pptr = &_rawInfo) { + GraphicFramework.InternalUnloadImage(pptr); + } + _rawInfo.StreamPtr = IntPtr.Zero; + } + return _data; + } + + public Image ProvideImage() + { + return this; + } + + internal static Image FromMemory(ImageInfo info, byte[] data, int operationCount) + { + return new Image + { + _rawInfo = info, + _data = data, + _pixelUpdateCount = operationCount + }; + } + + byte[] ISSDSerializable.GetBytes() + { + throw new NotImplementedException(); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/ImageInfo.cs b/StgSharp.Common/Graphics/ImageInfo.cs new file mode 100644 index 00000000..9bd73916 --- /dev/null +++ b/StgSharp.Common/Graphics/ImageInfo.cs @@ -0,0 +1,162 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ImageInfo" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.OpenGL; +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics +{ + [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public delegate IntPtr ImageLoader( + string name, + ref int width, + ref int height, + ref int definedChannel, + int desiredChannel); + + [StructLayout(LayoutKind.Sequential)] + internal struct ImageInfo + { + + private ImageChannel channel; + private int height; + private int width; + private IntPtr pixelPtr; + internal PixelChannelLayout pixelLayout; + + public ImageChannel Channel + { + get => channel; + set { channel = value; } + } + + public int ChannelCount + { + get => GetChannelCount(channel); + } + + public int Height + { + get => height; + set => height = value; + } + + public int StreamSize + { + get => width * height * GetPixelSize( + pixelLayout, channel); + } + + public int Width + { + get => width; + set => width = value; + } + + public IntPtr StreamPtr + { + get => pixelPtr; + internal set => pixelPtr = value; + } + + public override int GetHashCode() + { + int hash = 17; + hash = (hash * 17) + width; + hash = (hash * 17) + height; + hash = (hash * 17) + (int)channel; + return hash; + } + + public override string ToString() + { + return $"{channel}\t{width}\t{height}\t{(ulong)StreamPtr}"; + } + + internal static int GetChannelCount(ImageChannel channel) + { + return channel switch + { + ImageChannel.SingleColor => 1, + ImageChannel.DoubleColor => 2, + ImageChannel.TripleColor => 3, + ImageChannel.WithAlphaChannel => 4, + _ => throw new InvalidCastException( + "Unknown color channel decoding setting.") + }; + } + + internal static int GetPixelSize(PixelChannelLayout layout, ImageChannel channel) + { + return layout switch + { + PixelChannelLayout.UByte => sizeof(byte) * GetChannelCount( + channel), + PixelChannelLayout.Byte => sizeof(byte) * GetChannelCount( + channel), + PixelChannelLayout.UShort => sizeof(short) * GetChannelCount( + channel), + PixelChannelLayout.Short => sizeof(short) * GetChannelCount( + channel), + PixelChannelLayout.UInt => sizeof(int) * GetChannelCount( + channel), + PixelChannelLayout.Int => sizeof(int) * GetChannelCount( + channel), + PixelChannelLayout.Float => sizeof(float) * GetChannelCount( + channel), + PixelChannelLayout.UByte332 => sizeof(byte), + PixelChannelLayout.UByte233Rev => sizeof(byte), + PixelChannelLayout.UShort565 => sizeof(short), + PixelChannelLayout.UShort565Rev => sizeof(short), + PixelChannelLayout.UShort4444 => sizeof(short), + PixelChannelLayout.UShort4444Rev => sizeof(short), + PixelChannelLayout.UShort5551 => sizeof(short), + PixelChannelLayout.UShort1555Rev => sizeof(short), + PixelChannelLayout.UInt8888 => sizeof(int), + PixelChannelLayout.UInt8888Rev => sizeof(int), + PixelChannelLayout.UInt1010102 => sizeof(int), + PixelChannelLayout.UInt2101010Rev => sizeof(int), + _ => throw new ArgumentException("Unknown layout type"), + }; + } + + } + + public enum ImageChannel : uint + { + + SingleColor = glConst.RED, + DoubleColor = glConst.RG, + TripleColor = glConst.RGB, + WithAlphaChannel = glConst.RGBA, + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/AutoTexture.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/AutoTexture.cs new file mode 100644 index 00000000..3119cb3a --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/AutoTexture.cs @@ -0,0 +1,160 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="AutoTexture" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Collections; +using StgSharp.Graphics; +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; + +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + /// + /// A collection of a sets of OpenGL textures. The collection can automatically select one of + /// the texture with minimum costs to upgrade pixels to BufferHandle. Usually is used for loading, but not for + /// target of . + /// + public sealed class AutoTextureGL + { + + private TextureProperty[] propertyCache; + private BidirectionalDictionary imageIndexMap = new BidirectionalDictionary( + ); + private Dictionary imageUpdateIndex = new Dictionary(); + + private int _size, _currentIndex; + private LinkedList usedTextureIndex; + private Queue unusedTextureUnitIndex; + private TextureGL texturePackage; + + private TextureProperty _textureProperty; + + private AutoTextureGL(TextureGL texture) + { + texturePackage = texture; + _size = texture.Count; + imageIndexMap = new BidirectionalDictionary(); + unusedTextureUnitIndex = new Queue(Enumerable.Range(0, _size)); + usedTextureIndex = new LinkedList(); + propertyCache = new TextureProperty[_size]; + } + + public AutoTextureGL(int textureObjectSize, [NotNull]glRender binding) + { + this._size = textureObjectSize; + imageIndexMap = new BidirectionalDictionary(); + texturePackage = new TextureGL(textureObjectSize, binding); + unusedTextureUnitIndex = new Queue(Enumerable.Range(0, _size)); + usedTextureIndex = new LinkedList(); + propertyCache = new TextureProperty[_size]; + } + + public TextureProperty DefaultTextureProperty + { + get => _textureProperty; + set => _textureProperty = value; + } + + private OpenGLFunction GL + { + get => texturePackage.GL; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SelectTextureAndBind(Image i) + { + TextureProperty property = _textureProperty; + + SelectTextureAndBind(i, property); + } + + public void SelectTextureAndBind([NotNull]Image i, TextureProperty property) + { + // usable texture with image match + if (imageIndexMap.TryGetValue(i, out int index)) + { + // prop setting match + if (propertyCache[index] == property) + { + _currentIndex = index; //GL.Assert(true); + texturePackage.Bind2D(index); //GL.Assert(true); + if (i.PixelUpdateCount != imageUpdateIndex[i]) + { + texturePackage.LoadTexture(index, i); //GL.Assert(true); + } + } else + { + _currentIndex = index; //GL.Assert(true); + texturePackage.Bind2D(index); //GL.Assert(true); + texturePackage.Set2dProperty(index, property); //GL.Assert(true); + if (i.PixelUpdateCount != imageUpdateIndex[i]) + { + texturePackage.LoadTexture(index, i); //GL.Assert(true); + } + } + } else + { + if (unusedTextureUnitIndex.TryDequeue(out int newIndex)) + { + // has extra unused texture object + imageIndexMap.Add(i, index); + texturePackage.Bind2D(index); + texturePackage.Set2dProperty(index, property); + texturePackage.LoadTexture(index, i); + usedTextureIndex.AddLast(newIndex); + propertyCache[newIndex] = property; + imageUpdateIndex[i] = i.PixelUpdateCount; + } else + { + // recycle from current + int reusedIndex = usedTextureIndex.First!.Value; + usedTextureIndex.RemoveFirst(); + usedTextureIndex.AddLast(reusedIndex); + imageIndexMap[i] = reusedIndex; + propertyCache[newIndex] = property; + imageUpdateIndex[i] = i.PixelUpdateCount; + } + } + } + + public static AutoTextureGL ToAuto([NotNull]TextureGL texture) + { + if (texture.IndexOfCurrentTexture != -1) { + throw new InvalidOperationException("Texture to be converted has been editted."); + } + return new AutoTextureGL(texture); + } + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/EBO.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/EBO.cs new file mode 100644 index 00000000..b137ca90 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/EBO.cs @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="EBO" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; + +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + /// + /// A collection of handle to Element BufferHandle Object in OpenglFunc. Each value indexed from instance of this class this is the only handle to + /// one Element BufferHandle Object. + /// + public sealed unsafe class ElementBuffer : GlBufferObjectBase + { + + internal ElementBuffer(int n, glRender binding) + : base(binding) + { + _bufferHandle = GL.GenBuffers(n); + } + + public sealed override void Bind(int index) + { + GL.BindBuffer(BufferType.ElementArrayBuffer, _bufferHandle[index]); + } + + public void SetValue(int index, T[] bufferArray, BufferUsage usage) where T: unmanaged, INumber + { + GL.BindBuffer(BufferType.ElementArrayBuffer, _bufferHandle[index]); + GL.SetBufferData(BufferType.ElementArrayBuffer, bufferArray, usage); + } + + public void SetValue(int index, ReadOnlySpan bufferSpan, BufferUsage usage) where T: unmanaged, INumber + { + GL.BindBuffer(BufferType.ElementArrayBuffer, _bufferHandle[index]); + GL.SetBufferData(BufferType.ElementArrayBuffer, bufferSpan, usage); + } + + protected sealed override void Dispose(bool disposing) + { + if (disposing) { + GL.DeleteBuffers(_bufferHandle); + } + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/FBO.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/FBO.cs new file mode 100644 index 00000000..cbc9383e --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/FBO.cs @@ -0,0 +1,104 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="FBO" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + #pragma warning disable CA1008 + #pragma warning disable CA1028 + public enum FrameBufferTarget : uint + #pragma warning restore CA1028 + #pragma warning restore CA1008 + { + + Read = glConst.READ_FRAMEBUFFER, + All = glConst.FRAMEBUFFER, + Draw = glConst.DRAW_FRAMEBUFFER, + + } + + public sealed class FrameBuffer : GlBufferObjectBase + { + + internal unsafe FrameBuffer(int count, glRender binding) + : base(binding) + { + _bufferHandle = GL.GenFrameBuffers(count); + } + + /// + /// Bind the frame BufferHandle object with _label frame BufferHandle to the frame + /// BufferHandle target specified by target. will + /// be set as default target. + /// + /// + /// Index of object to be binded in handle set + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override unsafe void Bind(int index) + { + GL.BindFrameBuffer(FrameBufferTarget.All, _bufferHandle[index]); + } + + /// + /// Bind the frame BufferHandle object with _label frame BufferHandle to the frame + /// BufferHandle target specified by target. Target of this frame BufferHandle should be + /// set manually. + /// + /// + /// The frame BufferHandle target of the binding operation. + /// + /// + /// Index of object to be binded in handle set + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void Bind(FrameBufferTarget target, int index) + { + GL.BindFrameBuffer(target, _bufferHandle[index]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void BindNull() + { + OpenGLFunction.CurrentGL.BindFrameBuffer(FrameBufferTarget.All, GlHandle.Zero); + } + + protected override void Dispose(bool disposing) + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs new file mode 100644 index 00000000..a3c5c756 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/GLBufferObjectBase.cs @@ -0,0 +1,50 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="GLBufferObjectBase" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.OpenGL; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + public abstract class GlBufferObjectBase : BufferObjectBase + { + + private readonly glRender _contextBinding; + + protected GlBufferObjectBase(glRender contextBinding) + { + binding = contextBinding; + _contextBinding = contextBinding; + } + + protected OpenGLFunction GL => _contextBinding.GL; + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/RBO.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/RBO.cs new file mode 100644 index 00000000..13868597 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/RBO.cs @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="RBO" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using System; +using System.Collections.Generic; +using System.Security.Principal; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + public sealed class RenderBuffer : GlBufferObjectBase + { + + public RenderBuffer(int count, glRender binding) + : base(binding) + { + _bufferHandle = GL.GenRenderBuffer(count); + } + + public override void Bind(int index) + { + GL.BindRenderBuffer(this[index]); + } + + public void Store(RenderBufferInternalFormat format, (int width, int height) size) + { + if ((size.width > binding.Width) || (size.height > binding.Height)) { + World.LogWarning("FrameBuffer is larger than current canvas binding"); + } + } + + protected override void Dispose(bool disposing) + { + foreach (GlHandle item in _bufferHandle) + { + Console.WriteLine("removing a render buffer"); + GL.DeleteRenderBuffer(item); + } + } + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/TextureGL.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/TextureGL.cs new file mode 100644 index 00000000..23058ecb --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/TextureGL.cs @@ -0,0 +1,279 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TextureGL" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.HighPerformance; + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Graphics.OpenGL +{ + public sealed unsafe class TextureGL + { + + private int currentEditingTextureIndex; + + private OpenGLFunction _gl; + internal GlHandle[] _textureHandle; + + internal TextureGL(int count, glRender binding) + { + // sourceList = new Image[count]; + this._gl = binding.GL; + _textureHandle = _gl.GenTextures(count); + } + + public GlHandle this[int index] + { + get => _textureHandle[index]; + } + + public int Count + { + get => _textureHandle.Length; + } + + // internal Image[] sourceList; + + public int IndexOfCurrentTexture + { + get => currentEditingTextureIndex; + } + + internal OpenGLFunction GL => _gl; + + public void ActivateAs(TextureUnit unit) + { + _gl.ActiveTextureUnit((uint)unit); + } + + public void Bind2D(int index) + { + currentEditingTextureIndex = index; + _gl.BindTexture(glConst.TEXTURE_2D, _textureHandle[index]); + } + + /// + /// Load an to certain texture. + /// + /// + /// + /// + /// + /// + /// + public unsafe void LoadTexture(int index, Image i) + { + byte[] handle = i.PixelBuffer; + _gl.TextureImage2d( + Texture2DTarget.Texture2D, 0, i.Channel, (uint)i.Width, (uint)i.Height, i.Channel, i.PixelLayout, + pixels:handle); + _gl.GenerateMipmap(Texture2DTarget.Texture2D); + } + + #region texture setting + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Set2dFilterProperty(int index, TextureFilter onMinify, TextureFilter onMagnify) + { + #if DEBUG + if (index != currentEditingTextureIndex) + { + throw new InvalidOperationException( + "Texture to be editted is not the one being activated."); + } + #endif + _gl.TextureParameter(glConst.TEXTURE_2D, glConst.TEXTURE_MIN_FILTER, (int)onMinify); + _gl.TextureParameter(glConst.TEXTURE_2D, glConst.TEXTURE_MAG_FILTER, + (int)onMagnify); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Set2dWrapProperty(int index, TextureWrap onHorizontial, TextureWrap onVertical) + { + #if DEBUG + if (index != currentEditingTextureIndex) + { + throw new InvalidOperationException( + "Texture to be editted is not the one being activated."); + } + #endif + _gl.TextureParameter(glConst.TEXTURE_2D, glConst.TEXTURE_WRAP_S, + (int)onHorizontial); + _gl.TextureParameter(glConst.TEXTURE_2D, glConst.TEXTURE_WRAP_T, (int)onVertical); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Set2dProperty(int index, TextureProperty property) + { + Set2dFilterProperty(index, property.FilterOnMinify, property.FilterOnMagnify); + Set2dWrapProperty(index, property.WrapOnHorizontial, property.WrapOnVertical); + } + + #endregion texture setting + } + + [StructLayout(LayoutKind.Explicit)] + public struct TextureProperty + { + + [FieldOffset(0)] private M128 mask; + [FieldOffset(0)] private TextureFilter mag; + [FieldOffset(4)] private TextureFilter min; + + [FieldOffset(8)] private TextureWrap hori; + [FieldOffset(12)] private TextureWrap vert; + + public TextureProperty( + TextureFilter onMagnify, + TextureFilter onMinify, + TextureWrap onHorizontial, + TextureWrap onVertical) + { + FilterOnMagnify = onMagnify; + FilterOnMinify = onMinify; + WrapOnHorizontial = onHorizontial; + WrapOnVertical = onVertical; + } + + public TextureFilter FilterOnMagnify + { + get => mag; + set => mag = value; + } + + public TextureFilter FilterOnMinify + { + get => min; + set => min = value; + } + + public TextureWrap WrapOnHorizontial + { + get => hori; + set => hori = value; + } + + public TextureWrap WrapOnVertical + { + get => vert; + set => vert = value; + } + + public override bool Equals([NotNullWhen(true)] object obj) + { + return base.Equals(obj); + } + + public override int GetHashCode() + { + return HashCode.Combine( + FilterOnMagnify, FilterOnMagnify, WrapOnHorizontial, WrapOnVertical); + } + + public override string ToString() + { + return $"FilterOnMagnify:{FilterOnMagnify}, " + $"FilterOnMagnify:{FilterOnMagnify}, " + $"WrapOnHorizontial:{WrapOnHorizontial}, " + $"WrapOnVertical:{WrapOnVertical}"; + } + + public static bool operator !=(TextureProperty left, TextureProperty right) + { + return left.mask != right.mask; + } + + public static bool operator ==(TextureProperty left, TextureProperty right) + { + return left.mask == right.mask; + } + + public static implicit operator TextureProperty( + ( + TextureFilter onMagnify, TextureFilter onMinify, + TextureWrap onHorizontial, TextureWrap onVertical + ) propertyValueTuple) + { + return new TextureProperty( + propertyValueTuple.onMagnify, propertyValueTuple.onMinify, + propertyValueTuple.onHorizontial, propertyValueTuple.onVertical); + } + + } + + #pragma warning disable CA1008 + public enum TextureFilter + #pragma warning restore CA1008 + { + + Nearest = glConst.NEAREST, + Linear = glConst.LINEAR, + NearestLinearMipmap = glConst.NEAREST_MIPMAP_LINEAR, + LinearLinearMipmap = glConst.LINEAR_MIPMAP_LINEAR, + NearestNearestMipmap = glConst.NEAREST_MIPMAP_NEAREST, + LinearNearestMipmap = glConst.LINEAR_MIPMAP_NEAREST, + + } + + #pragma warning disable CA1008 + public enum TextureUnit + #pragma warning restore CA1008 + { + + Unit0 = glConst.TEXTURE0, + Unit1 = glConst.TEXTURE1, + Unit2 = glConst.TEXTURE2, + Unit3 = glConst.TEXTURE3, + Unit4 = glConst.TEXTURE4, + Unit5 = glConst.TEXTURE5, + Unit6 = glConst.TEXTURE6, + Unit7 = glConst.TEXTURE7, + Unit8 = glConst.TEXTURE8, + Unit9 = glConst.TEXTURE9, + Unit10 = glConst.TEXTURE10, + Unit11 = glConst.TEXTURE11, + Unit12 = glConst.TEXTURE12, + Unit13 = glConst.TEXTURE13, + Unit14 = glConst.TEXTURE14, + Unit15 = glConst.TEXTURE15, + + } + + #pragma warning disable CA1008 + public enum TextureWrap + #pragma warning restore CA1008 + { + + Repeat = glConst.REPEAT, + MirroredRepeat = glConst.MIRRORED_REPEAT, + ClampToEdge = glConst.CLAMP_TO_EDGE, + ClampToBorder = glConst.CLAMP_TO_BORDER, + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/VAO.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/VAO.cs new file mode 100644 index 00000000..b9cab902 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/VAO.cs @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="VAO" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + public sealed unsafe class VertexArray : GlBufferObjectBase + { + + internal VertexArray(int n, glRender binding) + : base(binding) + { + _bufferHandle = GL.GenVertexArrays(n); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public sealed override void Bind(int index) + { + GL.BindVertexArray(_bufferHandle[index]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void BindNull() + { + OpenGLFunction.CurrentGL.BindVertexArray(GlHandle.Zero); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetVertexAttribute( + uint attributeIndex, + int vertexLength, + TypeCode dataType, + bool isNomalized, + uint stride, + int pointer) + { + GL.SetVertexAttribute(attributeIndex, vertexLength, dataType, isNomalized, stride, pointer); + } + + protected sealed override void Dispose(bool disposing) + { + if (disposing) { + GL.DeleteVertexArrays(_bufferHandle); + } + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/Buffer/VBO.cs b/StgSharp.Common/Graphics/OpenGL/Buffer/VBO.cs new file mode 100644 index 00000000..1797a163 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/Buffer/VBO.cs @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="VBO" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Numeric; + +using System; +using System.Collections.Generic; +using System.Net.Security; +using System.Numerics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + public sealed unsafe class VertexBuffer : GlBufferObjectBase + { + + internal VertexBuffer(int n, glRender binding) + : base(binding) + { + _bufferHandle = GL.GenBuffers(n); + } + + public sealed override void Bind(int index) + { + GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + } + + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Unbind() + { + GL.BindBuffer(BufferType.ArrayBuffer, GlHandle.Zero); + } + + /// + /// Set _data to current vertex BufferHandle object + /// + /// + /// Type of bufferData + /// + /// + /// Index to find certain VBO in this instance + /// + /// + /// Data to write in + /// + /// + /// How OpenGL use these _data, defined by + /// + public void WriteMatrixData(int index, ref IMatrix bufferData, BufferUsage usage) + where T: unmanaged, INumber + { + GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + GL.SetBufferData(BufferType.ArrayBuffer, bufferData.AsSpan(), usage); + } + + /// + /// Set _data to current vertex BufferHandle object + /// + /// + /// Type of bufferData + /// + /// + /// Index to find certain VBO in this instance + /// + /// + /// Data to write in + /// + /// + /// How OpenGL use these _data, defined by + /// + public void WriteScalerData(int index, T[] bufferArray, BufferUsage usage) where T: unmanaged, INumber + { + GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + GL.SetBufferData(BufferType.ArrayBuffer, bufferArray, usage); + } + + /// + /// Set _data to current vertex BufferHandle object + /// + /// + /// Type of bufferData + /// + /// + /// Index to find certain VBO in this instance + /// + /// + /// A of _data to write in + /// + /// + /// How OpenGL use these _data, defined by + /// + public void WriteScalerData(int index, ReadOnlySpan scalerSpan, BufferUsage usage) + where T: unmanaged,INumber + { + GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + GL.SetBufferData(BufferType.ArrayBuffer, scalerSpan, usage); + } + + /// + /// Set data to current vertex BufferHandle object + /// + /// + /// Type of bufferData + /// + /// + /// Index to find certain VBO in this instance + /// + /// + /// A of data to write in + /// + /// + /// How OpenGL use these data, defined by + /// + public void WriteVectorData(int index, ReadOnlySpan vectorSpan, BufferUsage usage) + where T: unmanaged, IUnmanagedVector + { + GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + GL.SetBufferVectorData(BufferType.ArrayBuffer, vectorSpan, usage); + } + + /// + /// Set _data to current vertex BufferHandle object + /// + /// + /// Type of bufferData + /// + /// + /// Index to find certain VBO in this instance + /// + /// + /// A array of _data to write in + /// + /// + /// How OpenGL use these _data, defined by + /// + public void WriteVectorData(int index, T[] vectorArray, BufferUsage usage) + where T: unmanaged, IUnmanagedVector + { + GL.BindBuffer(BufferType.ArrayBuffer, _bufferHandle[index]); + GL.SetBufferVectorData(BufferType.ArrayBuffer, vectorArray, usage); + } + + protected sealed override void Dispose(bool disposing) + { + if (disposing) { + GL.DeleteBuffers(_bufferHandle); + } + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/ShaderEdit/IglConvertable.cs b/StgSharp.Common/Graphics/OpenGL/ShaderEdit/IglConvertable.cs new file mode 100644 index 00000000..b555891b --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/ShaderEdit/IglConvertable.cs @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IglConvertable" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.OpenGL; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.ShaderEdit +{ + public interface IglConvertable + { + + /// + /// + /// + public void DisplayGLtypeDefinition(); + + /// + /// + /// + public void GainAllUniforms(ShaderProgram source, params string[] uniformName); + + /// + /// + /// + /// + /// + /// + public ShaderStruct GetConvertedGLtype(); + + /// + /// + /// + public void SetAllUniforms(); + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/ShaderEdit/Shader.cs b/StgSharp.Common/Graphics/OpenGL/ShaderEdit/Shader.cs new file mode 100644 index 00000000..fa2b7fd7 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/ShaderEdit/Shader.cs @@ -0,0 +1,283 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Shader" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp; +using StgSharp.Graphics; +using StgSharp.Internal; + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Xml.Linq; + +namespace StgSharp.Graphics.OpenGL +{ + public abstract partial class glRender : RenderStream + { + + /// + /// Create an instance of program + /// + /// + /// New instance of instance. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected sealed override ShaderProgram CreateShaderProgram() + { + return new ShaderProgram(this); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected sealed override Shader CreateShaderSegment(ShaderType type, int count) + { + return new Shader(GL.CreateShaderSet(count, type), type, this); + } + + } + + public class Shader : ISSDSerializable + { + + private readonly OpenGLFunction GL; + internal readonly GlHandle[] handle; + public readonly ShaderType type; + + internal unsafe Shader(GlHandle[] handle, ShaderType usage, glRender stream) + { + this.handle = handle; + GL = stream.GL; + type = usage; + } + + public SerializableTypeCode SSDTypeCode => SerializableTypeCode.Shader; + + /// + /// Attach one shader code to a shader program. + /// + /// + /// Shader program to attach + /// + /// + /// Index of shader code in current shader code set. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AttachTo(int index, [NotNull]ShaderProgram target) + { + GL.AttachShader(target.handle, handle[index]); + } + + public void CheckStatus(int index, ShaderStatus status) + { + string log = GL.GetShaderStatus(this, index, (int)status); + if (!string.IsNullOrEmpty(log)) { + throw new InvalidOperationException($"{$"Shader Error \t{status}\n"}{log}"); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void Compile(int index, ReadOnlySpan codeU8Stream) + { + GL.LoadShaderSource(handle[index], codeU8Stream); + GL.CompileShader(handle[index]); + CheckStatus(index, ShaderStatus.CompileStatus); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void Compile(int index, byte[] codeStream) + { + ArgumentNullException.ThrowIfNull(codeStream); + GL.LoadShaderSource(handle[index], codeStream); + GL.CompileShader(handle[index]); + CheckStatus(index, ShaderStatus.CompileStatus); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void Compile(int index, string codeStream) + { + ArgumentNullException.ThrowIfNull(codeStream); + GL.LoadShaderSource(handle[index], codeStream.AsSpan()); + GL.CompileShader(handle[index]); + CheckStatus(index, ShaderStatus.CompileStatus); + } + + public void FromBytes(byte[] stream) + { + throw new NotImplementedException(); + } + + public static byte[] FromCodeFile(string fileRoute) + { + string str = File.ReadAllText(fileRoute); + if (string.IsNullOrEmpty(str)) { + throw new InvalidOperationException($"Cannot load and GLSL code from {fileRoute}"); + } + return Encoding.UTF8.GetBytes(str); + } + + public byte[] GetBytes() + { + return Array.Empty(); + } + + public byte[] GetBytes(out int length) + { + throw new NotImplementedException(); + } + + public override string ToString() + { + return $"This is a {type} shader, its shader handles are {handle.ToString()}."; + } + + } + + public enum ShaderStatus : int + { + + CompileStatus = glConst.COMPILE_STATUS, + + } + + public class ShaderProgram + { + + private readonly OpenGLFunction GL; + internal readonly GlHandle handle; + + /// + /// CustomizeInit a program with no shader attached. + /// + internal unsafe ShaderProgram(glRender binding) + { + GL = binding.GL; + handle = GL.CreateProgram(); + } + + /// + /// Get a uniform form current shader, the value type of the uniform should be provided. + /// + /// + /// ContextName of the Uniform in shader code + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe Uniform GetUniform(string name) where T: unmanaged + { + return new Uniform(GL.GetUniformLocation(this.handle, name)); + } + + /// + /// Get a uniform form current shader, the value type of the uniform should be provided. + /// + /// + /// ContextName of the Uniform in shader code + /// + /// + /// + /// + public unsafe Uniform GetUniform(string name) where T: unmanaged where U: struct + { + return new Uniform(GL.GetUniformLocation(this.handle, name)); + } + + /// + /// Get a uniform form current shader, the value type of the uniform should be provided. + /// + /// + /// ContextName of the Uniform in shader code + /// + /// + /// + /// + public unsafe Uniform GetUniform(string name) where T: unmanaged where U: struct + where V: struct + { + return new Uniform(GL.GetUniformLocation(this.handle, name)); + } + + /// + /// Get a uniform form current shader, the value type of the uniform should be provided. + /// + /// + /// ContextName of the Uniform in shader code + /// + /// + /// + /// + public unsafe Uniform GetUniform(string name) where T: unmanaged where U: struct + where V: struct + where W: struct + { + return new Uniform(GL.GetUniformLocation(this.handle, name)); + } + + /// + /// Link the shader to current viewPortDisplay. + /// + public unsafe void Link() + { + if (GraphicFramework.InternalLinkShaderProgram( + (OpenglContext*)this.GL.ContextHandle, handle.Value) == 0) + { + IntPtr logPtr = GraphicFramework.InternalReadSSCLog(); + try + { + byte[] logByte = new byte[512]; + Marshal.Copy(logPtr, logByte, 0, 512); + string log = Encoding.UTF8.GetString(logByte); + log = log.Replace("\0", string.Empty); + DefaultLog.InternalWriteLog(log, LogType.Error); + } + catch (Exception ex) + { + DefaultLog.InternalWriteLog(ex.Message, LogType.Error); + } + } + } + + /// + /// Let the current viewPortDisplay use this shader. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void Use() + { + GL.UseProgram(handle); + } + + ~ShaderProgram() + { + // handle.Dispose(); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/ShaderEdit/Uniform.cs b/StgSharp.Common/Graphics/OpenGL/ShaderEdit/Uniform.cs new file mode 100644 index 00000000..209a21de --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/ShaderEdit/Uniform.cs @@ -0,0 +1,184 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Uniform" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Mathematics.Graphic; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +namespace StgSharp.Graphics.OpenGL +{ + public class Uniform + { + + internal GlHandle id; + + public GlHandle Handle => id; + + } + + public sealed class Uniform : Uniform where T: unmanaged + { + + internal Uniform() { } + + internal unsafe Uniform(GlHandle id) + { + this.id = id; + } + + internal static Uniform FromHandle(GlHandle handle) + { + return new Uniform + { + id = handle + }; + } + + } + + public sealed class Uniform : Uniform where T: unmanaged where U: struct + { + + internal Uniform() { } + + internal unsafe Uniform(GlHandle id) + { + this.id = id; + } + + internal static Uniform FromHandle(GlHandle handle) + { + return new Uniform + { + id = handle + }; + } + + } + + public sealed class Uniform : Uniform where T: unmanaged where U: struct where V: struct + { + + internal Uniform() { } + + internal unsafe Uniform(GlHandle id) + { + this.id = id; + } + + internal static Uniform FromHandle(GlHandle handle) + { + return new Uniform + { + id = handle + }; + } + + } + + public sealed class Uniform : Uniform where T: unmanaged where U: struct where V: struct where W: struct + { + + internal Uniform() { } + + internal unsafe Uniform(GlHandle id) + { + this.id = id; + } + + internal static Uniform FromHandle(GlHandle handle) + { + return new Uniform + { + id = handle + }; + } + + } + + public unsafe partial class OpenGLFunction + { + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull] Uniform uniform, Matrix44 mat) + { + Matrix44 temp = mat; + Context.glUniformMatrix4fv(uniform.id.SignedValue, 1, false, (float*)&temp); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull]Uniform uniform, Vec4 vec) + { + Vec4 temp = vec; + Context.glUniform1fv(uniform.id.SignedValue, 4, &temp.reg); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull]Uniform uniform, Vec4 vec) + { + Vec4 temp = vec; + Context.glUniform1fv(uniform.id.SignedValue, 4, &temp.reg); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull]Uniform uniform, float v0) + { + Context.glUniform1f(uniform.id.SignedValue, v0); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull]Uniform uniform, int i0) + { + Context.glUniform1i(uniform.id.SignedValue, i0); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull] Uniform uniform, float v0, float v1) + { + Context.glUniform2f(uniform.id.SignedValue, v0, v1); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue([NotNull] Uniform uniform, float v0, float v1, float v2) + { + Context.glUniform3f(uniform.id.SignedValue, v0, v1, v2); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetUniformValue( + [NotNull] Uniform uniform, + float v0, + float v1, + float v2, + float v3) + { + Context.glUniform4f(uniform.id.SignedValue, v0, v1, v2, v3); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/glApiManager.cs b/StgSharp.Common/Graphics/OpenGL/glApiManager.cs new file mode 100644 index 00000000..c41d44e8 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glApiManager.cs @@ -0,0 +1,3465 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glApiManager" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; +using StgSharp.Mathematics; +using StgSharp.MVVM; +using StgSharp.MVVM; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + public static partial class glManager + { + + private const int glExtension = 0x1f03; + private const int glVersion = 0x1f02; + + private static readonly string[] glBranch = { + "OpenGL ES-CM ", + "OpenGL ES-CL ", + "OpenGL ES ", + "OpenGL SC " + }; + + private static string glExtensionList; + + // -------------------------------------------------------------------------------- + + /// + /// Get the function pointer of given OpenGL api _label + /// + /// + /// ContextName of the OpenGL api + /// + /// + /// The funtion pointer of the api in stream of + /// + public static IntPtr LoadGLfunc(string name) + { + IntPtr ret = GraphicFramework.glfwGetProcAddress(Encoding.UTF8.GetBytes(name)); + if (ret == default) + { + DefaultLog.InternalAppendLog( + $"Cannot load OpenGL api called {name}, this api may not exist or supported."); + return ret; + } + return ret; + } + + /// + /// Load all supported OpenGL APIs and bind them to given . + /// + /// + /// The handle to current OpenGL viewPortDisplay + /// + public static unsafe void LoadOpenGLApiTo(IntPtr contextHandle) + { + OpenglContext* context = (OpenglContext*)contextHandle; + if ((IntPtr)context->glGetString != IntPtr.Zero) { + return; + } + delegate*, IntPtr> loader = &GraphicFramework.glfwGetProcAddress; + IntPtr proc = GraphicFramework.glfwGetProcAddress("glGetString"u8); + if (proc == IntPtr.Zero) + { + #if DEBUG + Console.WriteLine("Cannot load GL."); + #endif + throw new Exception("Cannot load gl"); + } + context->glGetString = (delegate*)proc; + + string coreVersion; + if (context->glGetString(glVersion) == IntPtr.Zero) { + DefaultLog.InternalWriteLog("Failed to call glGetString", LogType.Error); + } + coreVersion = Marshal.PtrToStringAnsi(context->glGetString(glVersion)) ?? string.Empty; + + foreach (string branch in glBranch) + { + if (coreVersion.Contains(branch)) { + coreVersion.Replace(branch, string.Empty); + } + } + string[] versionSep = coreVersion!.Split('.'); + int majorVersion = int.Parse(versionSep[0]); + int minorVersion = int.Parse(versionSep[1]); + CheckCoreVersion(majorVersion, minorVersion); + + + if (LoadGLcore10(context, loader) && + LoadGLcore11(context, loader) && + LoadGLcore12(context, loader) && + LoadGLcore13(context, loader) && + LoadGLcore14(context, loader) && + LoadGLcore15(context, loader) && + LoadGLcore20(context, loader) && + LoadGLcore21(context, loader) && + LoadGLcore30(context, loader) && + LoadGLcore31(context, loader) && + LoadGLcore32(context, loader) && + LoadGLcore33(context, loader) && + LoadGLcore40(context, loader) && + LoadGLcore41(context, loader) && + LoadGLcore42(context, loader) && + LoadGLcore43(context, loader) && + LoadGLcore44(context, loader) && + LoadGLcore45(context, loader) && + LoadGLcore46(context, loader)) { } + + uint code = context->glGetError(); + if (code != 0) + { + Console.WriteLine(code); + throw new GlExecutionException(code); + } + + int extensionCount; + context->glGetIntegerv(glConst.NUM_EXTENSIONS, &extensionCount); + if (extensionCount == 0) + { + DefaultLog.InternalWriteLog( + "No supported OpenGL extensions are found.", LogType.Info); + return; + } + + HashSet extensions = []; + + for (uint i = 0; i < extensionCount; i++) + { + byte* strPtr = context->glGetStringi(glConst.EXTENSIONS, i); + extensions.Add(Marshal.PtrToStringAnsi((IntPtr)strPtr) ?? string.Empty); + } + + DefaultLog.InternalWriteLog( + $"{$"Find OpenGL extensions:"}{Environment.NewLine}{string.Join(';', extensions)}", + LogType.Info); + + #region checkGLextensions + + if (extensions.Contains("gl_4DFX_multisample")) + { + _4DFX_multisample = true; + extensions.Remove("gl_4DFX_multisample"); + } + if (extensions.Contains("gl_3DFX_tbuffer")) + { + _3DFX_tbuffer = true; + extensions.Remove("gl_3DFX_tbuffer"); + } + if (extensions.Contains("gl_3DFX_texture_compression_FXT1")) + { + _3DFX_texture_compression_FXT1 = true; + extensions.Remove("gl_3DFX_texture_compression_FXT1"); + } + if (extensions.Contains("gl_AMD_blend_minmax_factor")) + { + AMD_blend_minmax_factor = true; + extensions.Remove("glAMD_blend_minmax_factor"); + } + if (extensions.Contains("gl_AMD_conservative_depth")) + { + AMD_conservative_depth = true; + extensions.Remove("glAMD_conservative_depth"); + } + if (extensions.Contains("gl_AMD_debug_output")) + { + AMD_debug_output = true; + extensions.Remove("glAMD_debug_output"); + } + if (extensions.Contains("gl_AMD_depth_clamp_separate")) + { + AMD_depth_clamp_separate = true; + extensions.Remove("glAMD_depth_clamp_separate"); + } + if (extensions.Contains("gl_AMD_draw_buffers_blend")) + { + AMD_draw_buffers_blend = true; + extensions.Remove("glAMD_draw_buffers_blend"); + } + if (extensions.Contains("gl_AMD_framebuffer_multisample_advanced")) + { + AMD_framebuffer_multisample_advanced = true; + extensions.Remove("glAMD_framebuffer_multisample_advanced"); + } + if (extensions.Contains("gl_AMD_framebuffer_sample_positions")) + { + AMD_framebuffer_sample_positions = true; + extensions.Remove("glAMD_framebuffer_sample_positions"); + } + if (extensions.Contains("gl_AMD_gcn_shader")) + { + AMD_gcn_shader = true; + extensions.Remove("glAMD_gcn_shader"); + } + if (extensions.Contains("gl_AMD_gpu_shader_half_float")) + { + AMD_gpu_shader_half_float = true; + extensions.Remove("glAMD_gpu_shader_half_float"); + } + if (extensions.Contains("gl_AMD_gpu_shader_int16")) + { + AMD_gpu_shader_int16 = true; + extensions.Remove("glAMD_gpu_shader_int16"); + } + if (extensions.Contains("gl_AMD_gpu_shader_int64")) + { + AMD_gpu_shader_int64 = true; + extensions.Remove("glAMD_gpu_shader_int64"); + } + if (extensions.Contains("gl_AMD_interleaved_elements")) + { + AMD_interleaved_elements = true; + extensions.Remove("glAMD_interleaved_elements"); + } + if (extensions.Contains("gl_AMD_multi_draw_indirect")) + { + AMD_multi_draw_indirect = true; + extensions.Remove("glAMD_multi_draw_indirect"); + } + if (extensions.Contains("gl_AMD_name_gen_delete")) + { + AMD_name_gen_delete = true; + extensions.Remove("glAMD_name_gen_delete"); + } + if (extensions.Contains("gl_AMD_occlusion_query_event")) + { + AMD_occlusion_query_event = true; + extensions.Remove("glAMD_occlusion_query_event"); + } + if (extensions.Contains("gl_AMD_performance_monitor")) + { + AMD_performance_monitor = true; + extensions.Remove("glAMD_performance_monitor"); + } + if (extensions.Contains("gl_AMD_pinned_memory")) + { + AMD_pinned_memory = true; + extensions.Remove("glAMD_pinned_memory"); + } + if (extensions.Contains("gl_AMD_query_buffer_object")) + { + AMD_query_buffer_object = true; + extensions.Remove("glAMD_query_buffer_object"); + } + if (extensions.Contains("gl_AMD_sample_positions")) + { + AMD_sample_positions = true; + extensions.Remove("glAMD_sample_positions"); + } + if (extensions.Contains("gl_AMD_seamless_cubemap_per_texture")) + { + AMD_seamless_cubemap_per_texture = true; + extensions.Remove("glAMD_seamless_cubemap_per_texture"); + } + if (extensions.Contains("gl_AMD_shader_atomic_counter_ops")) + { + AMD_shader_atomic_counter_ops = true; + extensions.Remove("glAMD_shader_atomic_counter_ops"); + } + if (extensions.Contains("gl_AMD_shader_ballot")) + { + AMD_shader_ballot = true; + extensions.Remove("glAMD_shader_ballot"); + } + if (extensions.Contains("gl_AMD_shader_explicit_vertex_parameter")) + { + AMD_shader_explicit_vertex_parameter = true; + extensions.Remove("glAMD_shader_explicit_vertex_parameter"); + } + if (extensions.Contains("gl_AMD_shader_gpu_shader_half_float_fetch")) + { + AMD_shader_gpu_shader_half_float_fetch = true; + extensions.Remove("glAMD_shader_gpu_shader_half_float_fetch"); + } + if (extensions.Contains("gl_AMD_shader_image_load_store_lod")) + { + AMD_shader_image_load_store_lod = true; + extensions.Remove("glAMD_shader_image_load_store_lod"); + } + if (extensions.Contains("gl_AMD_shader_stencil_export")) + { + AMD_shader_stencil_export = true; + extensions.Remove("glAMD_shader_stencil_export"); + } + if (extensions.Contains("gl_AMD_shader_trinary_minmax")) + { + AMD_shader_trinary_minmax = true; + extensions.Remove("glAMD_shader_trinary_minmax"); + } + if (extensions.Contains("gl_AMD_sparse_texture")) + { + AMD_sparse_texture = true; + extensions.Remove("glAMD_sparse_texture"); + } + if (extensions.Contains("gl_AMD_stencil_operation_extended")) + { + AMD_stencil_operation_extended = true; + extensions.Remove("glAMD_stencil_operation_extended"); + } + if (extensions.Contains("gl_AMD_texture_gather_bias_lod")) + { + AMD_texture_gather_bias_lod = true; + extensions.Remove("glAMD_texture_gather_bias_lod"); + } + if (extensions.Contains("gl_AMD_texture_texture4")) + { + AMD_texture_texture4 = true; + extensions.Remove("glAMD_texture_texture4"); + } + if (extensions.Contains("gl_AMD_transform_feedback3_lines_triangles")) + { + AMD_transform_feedback3_lines_triangles = true; + extensions.Remove("glAMD_transform_feedback3_lines_triangles"); + } + if (extensions.Contains("gl_AMD_transform_feedback4")) + { + AMD_transform_feedback4 = true; + extensions.Remove("glAMD_transform_feedback4"); + } + if (extensions.Contains("gl_AMD_vertex_shader_layer")) + { + AMD_vertex_shader_layer = true; + extensions.Remove("glAMD_vertex_shader_layer"); + } + if (extensions.Contains("gl_AMD_vertex_shader_tessellator")) + { + AMD_vertex_shader_tessellator = true; + extensions.Remove("glAMD_vertex_shader_tessellator"); + } + if (extensions.Contains("gl_AMD_vertex_shader_viewport_index")) + { + AMD_vertex_shader_viewport_index = true; + extensions.Remove("glAMD_vertex_shader_viewport_index"); + } + if (extensions.Contains("gl_APPLE_aux_depth_stencil")) + { + APPLE_aux_depth_stencil = true; + extensions.Remove("glAPPLE_aux_depth_stencil"); + } + if (extensions.Contains("gl_APPLE_client_storage")) + { + APPLE_client_storage = true; + extensions.Remove("glAPPLE_client_storage"); + } + if (extensions.Contains("gl_APPLE_element_array")) + { + APPLE_element_array = true; + extensions.Remove("glAPPLE_element_array"); + } + if (extensions.Contains("gl_APPLE_fence")) + { + APPLE_fence = true; + extensions.Remove("glAPPLE_fence"); + } + if (extensions.Contains("gl_APPLE_float_pixels")) + { + APPLE_float_pixels = true; + extensions.Remove("glAPPLE_float_pixels"); + } + if (extensions.Contains("gl_APPLE_flush_buffer_range")) + { + APPLE_flush_buffer_range = true; + extensions.Remove("glAPPLE_flush_buffer_range"); + } + if (extensions.Contains("gl_APPLE_object_purgeable")) + { + APPLE_object_purgeable = true; + extensions.Remove("glAPPLE_object_purgeable"); + } + if (extensions.Contains("gl_APPLE_rgb_422")) + { + APPLE_rgb_422 = true; + extensions.Remove("glAPPLE_rgb_422"); + } + if (extensions.Contains("gl_APPLE_row_bytes")) + { + APPLE_row_bytes = true; + extensions.Remove("glAPPLE_row_bytes"); + } + if (extensions.Contains("gl_APPLE_specular_vector")) + { + APPLE_specular_vector = true; + extensions.Remove("glAPPLE_specular_vector"); + } + if (extensions.Contains("gl_APPLE_texture_range")) + { + APPLE_texture_range = true; + extensions.Remove("glAPPLE_texture_range"); + } + if (extensions.Contains("gl_APPLE_transform_hint")) + { + APPLE_transform_hint = true; + extensions.Remove("glAPPLE_transform_hint"); + } + if (extensions.Contains("gl_APPLE_vertex_array_object")) + { + APPLE_vertex_array_object = true; + extensions.Remove("glAPPLE_vertex_array_object"); + } + if (extensions.Contains("gl_APPLE_vertex_array_range")) + { + APPLE_vertex_array_range = true; + extensions.Remove("glAPPLE_vertex_array_range"); + } + if (extensions.Contains("gl_APPLE_vertex_program_evaluators")) + { + APPLE_vertex_program_evaluators = true; + extensions.Remove("glAPPLE_vertex_program_evaluators"); + } + if (extensions.Contains("gl_APPLE_ycbcr_422")) + { + APPLE_ycbcr_422 = true; + extensions.Remove("glAPPLE_ycbcr_422"); + } + if (extensions.Contains("gl_ARB_ES2_compatibility")) + { + ARB_ES2_compatibility = true; + extensions.Remove("glARB_ES2_compatibility"); + } + if (extensions.Contains("gl_ARB_ES3_1_compatibility")) + { + ARB_ES3_1_compatibility = true; + extensions.Remove("glARB_ES3_1_compatibility"); + } + if (extensions.Contains("gl_ARB_ES3_2_compatibility")) + { + ARB_ES3_2_compatibility = true; + extensions.Remove("glARB_ES3_2_compatibility"); + } + if (extensions.Contains("gl_ARB_ES3_compatibility")) + { + ARB_ES3_compatibility = true; + extensions.Remove("glARB_ES3_compatibility"); + } + if (extensions.Contains("gl_ARB_arrays_of_arrays")) + { + ARB_arrays_of_arrays = true; + extensions.Remove("glARB_arrays_of_arrays"); + } + if (extensions.Contains("gl_ARB_base_instance")) + { + ARB_base_instance = true; + extensions.Remove("glARB_base_instance"); + } + if (extensions.Contains("gl_ARB_bindless_texture")) + { + ARB_bindless_texture = true; + extensions.Remove("glARB_bindless_texture"); + } + if (extensions.Contains("gl_ARB_blend_func_extended")) + { + ARB_blend_func_extended = true; + extensions.Remove("glARB_blend_func_extended"); + } + if (extensions.Contains("gl_ARB_buffer_storage")) + { + ARB_buffer_storage = true; + extensions.Remove("glARB_buffer_storage"); + } + if (extensions.Contains("gl_ARB_cl_event")) + { + ARB_cl_event = true; + extensions.Remove("glARB_cl_event"); + } + if (extensions.Contains("gl_ARB_clear_buffer_object")) + { + ARB_clear_buffer_object = true; + extensions.Remove("glARB_clear_buffer_object"); + } + if (extensions.Contains("gl_ARB_clear_texture")) + { + ARB_clear_texture = true; + extensions.Remove("glARB_clear_texture"); + } + if (extensions.Contains("gl_ARB_clip_control")) + { + ARB_clip_control = true; + extensions.Remove("glARB_clip_control"); + } + if (extensions.Contains("gl_ARB_color_buffer_float")) + { + ARB_color_buffer_float = true; + extensions.Remove("glARB_color_buffer_float"); + } + if (extensions.Contains("gl_ARB_compatibility")) + { + ARB_compatibility = true; + extensions.Remove("glARB_compatibility"); + } + if (extensions.Contains("gl_ARB_compressed_texture_pixel_storage")) + { + ARB_compressed_texture_pixel_storage = true; + extensions.Remove("glARB_compressed_texture_pixel_storage"); + } + if (extensions.Contains("gl_ARB_compute_shader")) + { + ARB_compute_shader = true; + extensions.Remove("glARB_compute_shader"); + } + if (extensions.Contains("gl_ARB_compute_variable_group_size")) + { + ARB_compute_variable_group_size = true; + extensions.Remove("glARB_compute_variable_group_size"); + } + if (extensions.Contains("gl_ARB_conditional_render_inverted")) + { + ARB_conditional_render_inverted = true; + extensions.Remove("glARB_conditional_render_inverted"); + } + if (extensions.Contains("gl_ARB_conservative_depth")) + { + ARB_conservative_depth = true; + extensions.Remove("glARB_conservative_depth"); + } + if (extensions.Contains("gl_ARB_copy_buffer")) + { + ARB_copy_buffer = true; + extensions.Remove("glARB_copy_buffer"); + } + if (extensions.Contains("gl_ARB_copy_image")) + { + ARB_copy_image = true; + extensions.Remove("glARB_copy_image"); + } + if (extensions.Contains("gl_ARB_cull_distance")) + { + ARB_cull_distance = true; + extensions.Remove("glARB_cull_distance"); + } + if (extensions.Contains("gl_ARB_debug_output")) + { + ARB_debug_output = true; + extensions.Remove("glARB_debug_output"); + } + if (extensions.Contains("gl_ARB_depth_buffer_float")) + { + ARB_depth_buffer_float = true; + extensions.Remove("glARB_depth_buffer_float"); + } + if (extensions.Contains("gl_ARB_depth_clamp")) + { + ARB_depth_clamp = true; + extensions.Remove("glARB_depth_clamp"); + } + if (extensions.Contains("gl_ARB_depth_texture")) + { + ARB_depth_texture = true; + extensions.Remove("glARB_depth_texture"); + } + if (extensions.Contains("gl_ARB_derivative_control")) + { + ARB_derivative_control = true; + extensions.Remove("glARB_derivative_control"); + } + if (extensions.Contains("gl_ARB_direct_state_access")) + { + ARB_direct_state_access = true; + extensions.Remove("glARB_direct_state_access"); + } + if (extensions.Contains("gl_ARB_draw_buffers")) + { + ARB_draw_buffers = true; + extensions.Remove("glARB_draw_buffers"); + } + if (extensions.Contains("gl_ARB_draw_buffers_blend")) + { + ARB_draw_buffers_blend = true; + extensions.Remove("glARB_draw_buffers_blend"); + } + if (extensions.Contains("gl_ARB_draw_elements_base_vertex")) + { + ARB_draw_elements_base_vertex = true; + extensions.Remove("glARB_draw_elements_base_vertex"); + } + if (extensions.Contains("gl_ARB_draw_indirect")) + { + ARB_draw_indirect = true; + extensions.Remove("glARB_draw_indirect"); + } + if (extensions.Contains("gl_ARB_draw_instanced")) + { + ARB_draw_instanced = true; + extensions.Remove("glARB_draw_instanced"); + } + if (extensions.Contains("gl_ARB_enhanced_layouts")) + { + ARB_enhanced_layouts = true; + extensions.Remove("glARB_enhanced_layouts"); + } + if (extensions.Contains("gl_ARB_explicit_attrib_location")) + { + ARB_explicit_attrib_location = true; + extensions.Remove("glARB_explicit_attrib_location"); + } + if (extensions.Contains("gl_ARB_explicit_uniform_location")) + { + ARB_explicit_uniform_location = true; + extensions.Remove("glARB_explicit_uniform_location"); + } + if (extensions.Contains("gl_ARB_fragment_coord_conventions")) + { + ARB_fragment_coord_conventions = true; + extensions.Remove("glARB_fragment_coord_conventions"); + } + if (extensions.Contains("gl_ARB_fragment_layer_viewport")) + { + ARB_fragment_layer_viewport = true; + extensions.Remove("glARB_fragment_layer_viewport"); + } + if (extensions.Contains("gl_ARB_fragment_program")) + { + ARB_fragment_program = true; + extensions.Remove("glARB_fragment_program"); + } + if (extensions.Contains("gl_ARB_fragment_program_shadow")) + { + ARB_fragment_program_shadow = true; + extensions.Remove("glARB_fragment_program_shadow"); + } + if (extensions.Contains("gl_ARB_fragment_shader")) + { + ARB_fragment_shader = true; + extensions.Remove("glARB_fragment_shader"); + } + if (extensions.Contains("gl_ARB_fragment_shader_interlock")) + { + ARB_fragment_shader_interlock = true; + extensions.Remove("glARB_fragment_shader_interlock"); + } + if (extensions.Contains("gl_ARB_framebuffer_no_attachments")) + { + ARB_framebuffer_no_attachments = true; + extensions.Remove("glARB_framebuffer_no_attachments"); + } + if (extensions.Contains("gl_ARB_framebuffer_object")) + { + ARB_framebuffer_object = true; + extensions.Remove("glARB_framebuffer_object"); + } + if (extensions.Contains("gl_ARB_framebuffer_sRGB")) + { + ARB_framebuffer_sRGB = true; + extensions.Remove("glARB_framebuffer_sRGB"); + } + if (extensions.Contains("gl_ARB_geometry_shader4")) + { + ARB_geometry_shader4 = true; + extensions.Remove("glARB_geometry_shader4"); + } + if (extensions.Contains("gl_ARB_get_program_binary")) + { + ARB_get_program_binary = true; + extensions.Remove("glARB_get_program_binary"); + } + if (extensions.Contains("gl_ARB_get_texture_sub_image")) + { + ARB_get_texture_sub_image = true; + extensions.Remove("glARB_get_texture_sub_image"); + } + if (extensions.Contains("gl_ARB_gl_spirv")) + { + ARB_gl_spirv = true; + extensions.Remove("glARB_gl_spirv"); + } + if (extensions.Contains("gl_ARB_gpu_shader5")) + { + ARB_gpu_shader5 = true; + extensions.Remove("glARB_gpu_shader5"); + } + if (extensions.Contains("gl_ARB_gpu_shader_fp64")) + { + ARB_gpu_shader_fp64 = true; + extensions.Remove("glARB_gpu_shader_fp64"); + } + if (extensions.Contains("gl_ARB_gpu_shader_int64")) + { + ARB_gpu_shader_int64 = true; + extensions.Remove("glARB_gpu_shader_int64"); + } + if (extensions.Contains("gl_ARB_half_float_pixel")) + { + ARB_half_float_pixel = true; + extensions.Remove("glARB_half_float_pixel"); + } + if (extensions.Contains("gl_ARB_half_float_vertex")) + { + ARB_half_float_vertex = true; + extensions.Remove("glARB_half_float_vertex"); + } + if (extensions.Contains("gl_ARB_imaging")) + { + ARB_imaging = true; + extensions.Remove("glARB_imaging"); + } + if (extensions.Contains("gl_ARB_indirect_parameters")) + { + ARB_indirect_parameters = true; + extensions.Remove("glARB_indirect_parameters"); + } + if (extensions.Contains("gl_ARB_instanced_arrays")) + { + ARB_instanced_arrays = true; + extensions.Remove("glARB_instanced_arrays"); + } + if (extensions.Contains("gl_ARB_internalformat_query")) + { + ARB_internalformat_query = true; + extensions.Remove("glARB_internalformat_query"); + } + if (extensions.Contains("gl_ARB_internalformat_query2")) + { + ARB_internalformat_query2 = true; + extensions.Remove("glARB_internalformat_query2"); + } + if (extensions.Contains("gl_ARB_invalidate_subdata")) + { + ARB_invalidate_subdata = true; + extensions.Remove("glARB_invalidate_subdata"); + } + if (extensions.Contains("gl_ARB_map_buffer_alignment")) + { + ARB_map_buffer_alignment = true; + extensions.Remove("glARB_map_buffer_alignment"); + } + if (extensions.Contains("gl_ARB_map_buffer_range")) + { + ARB_map_buffer_range = true; + extensions.Remove("glARB_map_buffer_range"); + } + if (extensions.Contains("gl_ARB_matrix_palette")) + { + ARB_matrix_palette = true; + extensions.Remove("glARB_matrix_palette"); + } + if (extensions.Contains("gl_ARB_multi_bind")) + { + ARB_multi_bind = true; + extensions.Remove("glARB_multi_bind"); + } + if (extensions.Contains("gl_ARB_multi_draw_indirect")) + { + ARB_multi_draw_indirect = true; + extensions.Remove("glARB_multi_draw_indirect"); + } + if (extensions.Contains("gl_ARB_multisample")) + { + ARB_multisample = true; + extensions.Remove("glARB_multisample"); + } + if (extensions.Contains("gl_ARB_multitexture")) + { + ARB_multitexture = true; + extensions.Remove("glARB_multitexture"); + } + if (extensions.Contains("gl_ARB_occlusion_query")) + { + ARB_occlusion_query = true; + extensions.Remove("glARB_occlusion_query"); + } + if (extensions.Contains("gl_ARB_occlusion_query2")) + { + ARB_occlusion_query2 = true; + extensions.Remove("glARB_occlusion_query2"); + } + if (extensions.Contains("gl_ARB_parallel_shader_compile")) + { + ARB_parallel_shader_compile = true; + extensions.Remove("glARB_parallel_shader_compile"); + } + if (extensions.Contains("gl_ARB_pipeline_statistics_query")) + { + ARB_pipeline_statistics_query = true; + extensions.Remove("glARB_pipeline_statistics_query"); + } + if (extensions.Contains("gl_ARB_pixel_buffer_object")) + { + ARB_pixel_buffer_object = true; + extensions.Remove("glARB_pixel_buffer_object"); + } + if (extensions.Contains("gl_ARB_point_parameters")) + { + ARB_point_parameters = true; + extensions.Remove("glARB_point_parameters"); + } + if (extensions.Contains("gl_ARB_point_sprite")) + { + ARB_point_sprite = true; + extensions.Remove("glARB_point_sprite"); + } + if (extensions.Contains("gl_ARB_polygon_offset_clamp")) + { + ARB_polygon_offset_clamp = true; + extensions.Remove("glARB_polygon_offset_clamp"); + } + if (extensions.Contains("gl_ARB_post_depth_coverage")) + { + ARB_post_depth_coverage = true; + extensions.Remove("glARB_post_depth_coverage"); + } + if (extensions.Contains("gl_ARB_program_interface_query")) + { + ARB_program_interface_query = true; + extensions.Remove("glARB_program_interface_query"); + } + if (extensions.Contains("gl_ARB_provoking_vertex")) + { + ARB_provoking_vertex = true; + extensions.Remove("glARB_provoking_vertex"); + } + if (extensions.Contains("gl_ARB_query_buffer_object")) + { + ARB_query_buffer_object = true; + extensions.Remove("glARB_query_buffer_object"); + } + if (extensions.Contains("gl_ARB_robust_buffer_access_behavior")) + { + ARB_robust_buffer_access_behavior = true; + extensions.Remove("glARB_robust_buffer_access_behavior"); + } + if (extensions.Contains("gl_ARB_robustness")) + { + ARB_robustness = true; + extensions.Remove("glARB_robustness"); + } + if (extensions.Contains("gl_ARB_robustness_isolation")) + { + ARB_robustness_isolation = true; + extensions.Remove("glARB_robustness_isolation"); + } + if (extensions.Contains("gl_ARB_sample_locations")) + { + ARB_sample_locations = true; + extensions.Remove("glARB_sample_locations"); + } + if (extensions.Contains("gl_ARB_sample_shading")) + { + ARB_sample_shading = true; + extensions.Remove("glARB_sample_shading"); + } + if (extensions.Contains("gl_ARB_sampler_objects")) + { + ARB_sampler_objects = true; + extensions.Remove("glARB_sampler_objects"); + } + if (extensions.Contains("gl_ARB_seamless_cube_map")) + { + ARB_seamless_cube_map = true; + extensions.Remove("glARB_seamless_cube_map"); + } + if (extensions.Contains("gl_ARB_seamless_cubemap_per_texture")) + { + ARB_seamless_cubemap_per_texture = true; + extensions.Remove("glARB_seamless_cubemap_per_texture"); + } + if (extensions.Contains("gl_ARB_separate_shader_objects")) + { + ARB_separate_shader_objects = true; + extensions.Remove("glARB_separate_shader_objects"); + } + if (extensions.Contains("gl_ARB_shader_atomic_counter_ops")) + { + ARB_shader_atomic_counter_ops = true; + extensions.Remove("glARB_shader_atomic_counter_ops"); + } + if (extensions.Contains("gl_ARB_shader_atomic_counters")) + { + ARB_shader_atomic_counters = true; + extensions.Remove("glARB_shader_atomic_counters"); + } + if (extensions.Contains("gl_ARB_shader_ballot")) + { + ARB_shader_ballot = true; + extensions.Remove("glARB_shader_ballot"); + } + if (extensions.Contains("gl_ARB_shader_bit_encoding")) + { + ARB_shader_bit_encoding = true; + extensions.Remove("glARB_shader_bit_encoding"); + } + if (extensions.Contains("gl_ARB_shader_clock")) + { + ARB_shader_clock = true; + extensions.Remove("glARB_shader_clock"); + } + if (extensions.Contains("gl_ARB_shader_draw_parameters")) + { + ARB_shader_draw_parameters = true; + extensions.Remove("glARB_shader_draw_parameters"); + } + if (extensions.Contains("gl_ARB_shader_group_vote")) + { + ARB_shader_group_vote = true; + extensions.Remove("glARB_shader_group_vote"); + } + if (extensions.Contains("gl_ARB_shader_image_load_store")) + { + ARB_shader_image_load_store = true; + extensions.Remove("glARB_shader_image_load_store"); + } + if (extensions.Contains("gl_ARB_shader_image_size")) + { + ARB_shader_image_size = true; + extensions.Remove("glARB_shader_image_size"); + } + if (extensions.Contains("gl_ARB_shader_objects")) + { + ARB_shader_objects = true; + extensions.Remove("glARB_shader_objects"); + } + if (extensions.Contains("gl_ARB_shader_precision")) + { + ARB_shader_precision = true; + extensions.Remove("glARB_shader_precision"); + } + if (extensions.Contains("gl_ARB_shader_stencil_export")) + { + ARB_shader_stencil_export = true; + extensions.Remove("glARB_shader_stencil_export"); + } + if (extensions.Contains("gl_ARB_shader_storage_buffer_object")) + { + ARB_shader_storage_buffer_object = true; + extensions.Remove("glARB_shader_storage_buffer_object"); + } + if (extensions.Contains("gl_ARB_shader_subroutine")) + { + ARB_shader_subroutine = true; + extensions.Remove("glARB_shader_subroutine"); + } + if (extensions.Contains("gl_ARB_shader_texture_image_samples")) + { + ARB_shader_texture_image_samples = true; + extensions.Remove("glARB_shader_texture_image_samples"); + } + if (extensions.Contains("gl_ARB_shader_texture_lod")) + { + ARB_shader_texture_lod = true; + extensions.Remove("glARB_shader_texture_lod"); + } + if (extensions.Contains("gl_ARB_shader_viewport_layer_array")) + { + ARB_shader_viewport_layer_array = true; + extensions.Remove("glARB_shader_viewport_layer_array"); + } + if (extensions.Contains("gl_ARB_shading_language_100")) + { + ARB_shading_language_100 = true; + extensions.Remove("glARB_shading_language_100"); + } + if (extensions.Contains("gl_ARB_shading_language_420pack")) + { + ARB_shading_language_420pack = true; + extensions.Remove("glARB_shading_language_420pack"); + } + if (extensions.Contains("gl_ARB_shading_language_include")) + { + ARB_shading_language_include = true; + extensions.Remove("glARB_shading_language_include"); + } + if (extensions.Contains("gl_ARB_shading_language_packing")) + { + ARB_shading_language_packing = true; + extensions.Remove("glARB_shading_language_packing"); + } + if (extensions.Contains("gl_ARB_shadow")) + { + ARB_shadow = true; + extensions.Remove("glARB_shadow"); + } + if (extensions.Contains("gl_ARB_shadow_ambient")) + { + ARB_shadow_ambient = true; + extensions.Remove("glARB_shadow_ambient"); + } + if (extensions.Contains("gl_ARB_sparse_buffer")) + { + ARB_sparse_buffer = true; + extensions.Remove("glARB_sparse_buffer"); + } + if (extensions.Contains("gl_ARB_sparse_texture")) + { + ARB_sparse_texture = true; + extensions.Remove("glARB_sparse_texture"); + } + if (extensions.Contains("gl_ARB_sparse_texture2")) + { + ARB_sparse_texture2 = true; + extensions.Remove("glARB_sparse_texture2"); + } + if (extensions.Contains("gl_ARB_sparse_texture_clamp")) + { + ARB_sparse_texture_clamp = true; + extensions.Remove("glARB_sparse_texture_clamp"); + } + if (extensions.Contains("gl_ARB_spirv_extensions")) + { + ARB_spirv_extensions = true; + extensions.Remove("glARB_spirv_extensions"); + } + if (extensions.Contains("gl_ARB_stencil_texturing")) + { + ARB_stencil_texturing = true; + extensions.Remove("glARB_stencil_texturing"); + } + if (extensions.Contains("gl_ARB_sync")) + { + ARB_sync = true; + extensions.Remove("glARB_sync"); + } + if (extensions.Contains("gl_ARB_tessellation_shader")) + { + ARB_tessellation_shader = true; + extensions.Remove("glARB_tessellation_shader"); + } + if (extensions.Contains("gl_ARB_texture_barrier")) + { + ARB_texture_barrier = true; + extensions.Remove("glARB_texture_barrier"); + } + if (extensions.Contains("gl_ARB_texture_border_clamp")) + { + ARB_texture_border_clamp = true; + extensions.Remove("glARB_texture_border_clamp"); + } + if (extensions.Contains("gl_ARB_texture_buffer_object")) + { + ARB_texture_buffer_object = true; + extensions.Remove("glARB_texture_buffer_object"); + } + if (extensions.Contains("gl_ARB_texture_buffer_object_rgb32")) + { + ARB_texture_buffer_object_rgb32 = true; + extensions.Remove("glARB_texture_buffer_object_rgb32"); + } + if (extensions.Contains("gl_ARB_texture_buffer_range")) + { + ARB_texture_buffer_range = true; + extensions.Remove("glARB_texture_buffer_range"); + } + if (extensions.Contains("gl_ARB_texture_compression")) + { + ARB_texture_compression = true; + extensions.Remove("glARB_texture_compression"); + } + if (extensions.Contains("gl_ARB_texture_compression_bptc")) + { + ARB_texture_compression_bptc = true; + extensions.Remove("glARB_texture_compression_bptc"); + } + if (extensions.Contains("gl_ARB_texture_compression_rgtc")) + { + ARB_texture_compression_rgtc = true; + extensions.Remove("glARB_texture_compression_rgtc"); + } + if (extensions.Contains("gl_ARB_texture_cube_map")) + { + ARB_texture_cube_map = true; + extensions.Remove("glARB_texture_cube_map"); + } + if (extensions.Contains("gl_ARB_texture_cube_map_array")) + { + ARB_texture_cube_map_array = true; + extensions.Remove("glARB_texture_cube_map_array"); + } + if (extensions.Contains("gl_ARB_texture_env_add")) + { + ARB_texture_env_add = true; + extensions.Remove("glARB_texture_env_add"); + } + if (extensions.Contains("gl_ARB_texture_env_combine")) + { + ARB_texture_env_combine = true; + extensions.Remove("glARB_texture_env_combine"); + } + if (extensions.Contains("gl_ARB_texture_env_crossbar")) + { + ARB_texture_env_crossbar = true; + extensions.Remove("glARB_texture_env_crossbar"); + } + if (extensions.Contains("gl_ARB_texture_env_dot3")) + { + ARB_texture_env_dot3 = true; + extensions.Remove("glARB_texture_env_dot3"); + } + if (extensions.Contains("gl_ARB_texture_filter_anisotropic")) + { + ARB_texture_filter_anisotropic = true; + extensions.Remove("glARB_texture_filter_anisotropic"); + } + if (extensions.Contains("gl_ARB_texture_filter_minmax")) + { + ARB_texture_filter_minmax = true; + extensions.Remove("glARB_texture_filter_minmax"); + } + if (extensions.Contains("gl_ARB_texture_float")) + { + ARB_texture_float = true; + extensions.Remove("glARB_texture_float"); + } + if (extensions.Contains("gl_ARB_texture_gather")) + { + ARB_texture_gather = true; + extensions.Remove("glARB_texture_gather"); + } + if (extensions.Contains("gl_ARB_texture_mirror_clamp_to_edge")) + { + ARB_texture_mirror_clamp_to_edge = true; + extensions.Remove("glARB_texture_mirror_clamp_to_edge"); + } + if (extensions.Contains("gl_ARB_texture_mirrored_repeat")) + { + ARB_texture_mirrored_repeat = true; + extensions.Remove("glARB_texture_mirrored_repeat"); + } + if (extensions.Contains("gl_ARB_texture_multisample")) + { + ARB_texture_multisample = true; + extensions.Remove("glARB_texture_multisample"); + } + if (extensions.Contains("gl_ARB_texture_non_power_of_two")) + { + ARB_texture_non_power_of_two = true; + extensions.Remove("glARB_texture_non_power_of_two"); + } + if (extensions.Contains("gl_ARB_texture_query_levels")) + { + ARB_texture_query_levels = true; + extensions.Remove("glARB_texture_query_levels"); + } + if (extensions.Contains("gl_ARB_texture_query_lod")) + { + ARB_texture_query_lod = true; + extensions.Remove("glARB_texture_query_lod"); + } + if (extensions.Contains("gl_ARB_texture_rectangle")) + { + ARB_texture_rectangle = true; + extensions.Remove("glARB_texture_rectangle"); + } + if (extensions.Contains("gl_ARB_texture_rg")) + { + ARB_texture_rg = true; + extensions.Remove("glARB_texture_rg"); + } + if (extensions.Contains("gl_ARB_texture_rgb10_a2ui")) + { + ARB_texture_rgb10_a2ui = true; + extensions.Remove("glARB_texture_rgb10_a2ui"); + } + if (extensions.Contains("gl_ARB_texture_stencil8")) + { + ARB_texture_stencil8 = true; + extensions.Remove("glARB_texture_stencil8"); + } + if (extensions.Contains("gl_ARB_texture_storage")) + { + ARB_texture_storage = true; + extensions.Remove("glARB_texture_storage"); + } + if (extensions.Contains("gl_ARB_texture_storage_multisample")) + { + ARB_texture_storage_multisample = true; + extensions.Remove("glARB_texture_storage_multisample"); + } + if (extensions.Contains("gl_ARB_texture_swizzle")) + { + ARB_texture_swizzle = true; + extensions.Remove("glARB_texture_swizzle"); + } + if (extensions.Contains("gl_ARB_texture_view")) + { + ARB_texture_view = true; + extensions.Remove("glARB_texture_view"); + } + if (extensions.Contains("gl_ARB_timer_query")) + { + ARB_timer_query = true; + extensions.Remove("glARB_timer_query"); + } + if (extensions.Contains("gl_ARB_transform_feedback2")) + { + ARB_transform_feedback2 = true; + extensions.Remove("glARB_transform_feedback2"); + } + if (extensions.Contains("gl_ARB_transform_feedback3")) + { + ARB_transform_feedback3 = true; + extensions.Remove("glARB_transform_feedback3"); + } + if (extensions.Contains("gl_ARB_transform_feedback_instanced")) + { + ARB_transform_feedback_instanced = true; + extensions.Remove("glARB_transform_feedback_instanced"); + } + if (extensions.Contains("gl_ARB_transform_feedback_overflow_query")) + { + ARB_transform_feedback_overflow_query = true; + extensions.Remove("glARB_transform_feedback_overflow_query"); + } + if (extensions.Contains("gl_ARB_transpose_matrix")) + { + ARB_transpose_matrix = true; + extensions.Remove("glARB_transpose_matrix"); + } + if (extensions.Contains("gl_ARB_uniform_buffer_object")) + { + ARB_uniform_buffer_object = true; + extensions.Remove("glARB_uniform_buffer_object"); + } + if (extensions.Contains("gl_ARB_vertex_array_bgra")) + { + ARB_vertex_array_bgra = true; + extensions.Remove("glARB_vertex_array_bgra"); + } + if (extensions.Contains("gl_ARB_vertex_array_object")) + { + ARB_vertex_array_object = true; + extensions.Remove("glARB_vertex_array_object"); + } + if (extensions.Contains("gl_ARB_vertex_attrib_64bit")) + { + ARB_vertex_attrib_64bit = true; + extensions.Remove("glARB_vertex_attrib_64bit"); + } + if (extensions.Contains("gl_ARB_vertex_attrib_binding")) + { + ARB_vertex_attrib_binding = true; + extensions.Remove("glARB_vertex_attrib_binding"); + } + if (extensions.Contains("gl_ARB_vertex_blend")) + { + ARB_vertex_blend = true; + extensions.Remove("glARB_vertex_blend"); + } + if (extensions.Contains("gl_ARB_vertex_buffer_object")) + { + ARB_vertex_buffer_object = true; + extensions.Remove("glARB_vertex_buffer_object"); + } + if (extensions.Contains("gl_ARB_vertex_program")) + { + ARB_vertex_program = true; + extensions.Remove("glARB_vertex_program"); + } + if (extensions.Contains("gl_ARB_vertex_shader")) + { + ARB_vertex_shader = true; + extensions.Remove("glARB_vertex_shader"); + } + if (extensions.Contains("gl_ARB_vertex_type_10f_11f_11f_rev")) + { + ARB_vertex_type_10f_11f_11f_rev = true; + extensions.Remove("glARB_vertex_type_10f_11f_11f_rev"); + } + if (extensions.Contains("gl_ARB_vertex_type_2_10_10_10_rev")) + { + ARB_vertex_type_2_10_10_10_rev = true; + extensions.Remove("glARB_vertex_type_2_10_10_10_rev"); + } + if (extensions.Contains("gl_ARB_viewport_array")) + { + ARB_viewport_array = true; + extensions.Remove("glARB_viewport_array"); + } + if (extensions.Contains("gl_ARB_window_pos")) + { + ARB_window_pos = true; + extensions.Remove("glARB_window_pos"); + } + if (extensions.Contains("gl_ATI_draw_buffers")) + { + ATI_draw_buffers = true; + extensions.Remove("glATI_draw_buffers"); + } + if (extensions.Contains("gl_ATI_element_array")) + { + ATI_element_array = true; + extensions.Remove("glATI_element_array"); + } + if (extensions.Contains("gl_ATI_envmap_bumpmap")) + { + ATI_envmap_bumpmap = true; + extensions.Remove("glATI_envmap_bumpmap"); + } + if (extensions.Contains("gl_ATI_fragment_shader")) + { + ATI_fragment_shader = true; + extensions.Remove("glATI_fragment_shader"); + } + if (extensions.Contains("gl_ATI_map_object_buffer")) + { + ATI_map_object_buffer = true; + extensions.Remove("glATI_map_object_buffer"); + } + if (extensions.Contains("gl_ATI_meminfo")) + { + ATI_meminfo = true; + extensions.Remove("glATI_meminfo"); + } + if (extensions.Contains("gl_ATI_pixel_format_float")) + { + ATI_pixel_format_float = true; + extensions.Remove("glATI_pixel_format_float"); + } + if (extensions.Contains("gl_ATI_pn_triangles")) + { + ATI_pn_triangles = true; + extensions.Remove("glATI_pn_triangles"); + } + if (extensions.Contains("gl_ATI_separate_stencil")) + { + ATI_separate_stencil = true; + extensions.Remove("glATI_separate_stencil"); + } + if (extensions.Contains("gl_ATI_text_fragment_shader")) + { + ATI_text_fragment_shader = true; + extensions.Remove("glATI_text_fragment_shader"); + } + if (extensions.Contains("gl_ATI_texture_env_combine3")) + { + ATI_texture_env_combine3 = true; + extensions.Remove("glATI_texture_env_combine3"); + } + if (extensions.Contains("gl_ATI_texture_float")) + { + ATI_texture_float = true; + extensions.Remove("glATI_texture_float"); + } + if (extensions.Contains("gl_ATI_texture_mirror_once")) + { + ATI_texture_mirror_once = true; + extensions.Remove("glATI_texture_mirror_once"); + } + if (extensions.Contains("gl_ATI_vertex_array_object")) + { + ATI_vertex_array_object = true; + extensions.Remove("glATI_vertex_array_object"); + } + if (extensions.Contains("gl_ATI_vertex_attrib_array_object")) + { + ATI_vertex_attrib_array_object = true; + extensions.Remove("glATI_vertex_attrib_array_object"); + } + if (extensions.Contains("gl_ATI_vertex_streams")) + { + ATI_vertex_streams = true; + extensions.Remove("glATI_vertex_streams"); + } + if (extensions.Contains("gl_EXT_422_pixels")) + { + EXT_422_pixels = true; + extensions.Remove("glEXT_422_pixels"); + } + if (extensions.Contains("gl_EXT_EGL_image_storage")) + { + EXT_EGL_image_storage = true; + extensions.Remove("glEXT_EGL_image_storage"); + } + if (extensions.Contains("gl_EXT_EGL_sync")) + { + EXT_EGL_sync = true; + extensions.Remove("glEXT_EGL_sync"); + } + if (extensions.Contains("gl_EXT_abgr")) + { + EXT_abgr = true; + extensions.Remove("glEXT_abgr"); + } + if (extensions.Contains("gl_EXT_bgra")) + { + EXT_bgra = true; + extensions.Remove("glEXT_bgra"); + } + if (extensions.Contains("gl_EXT_bindable_uniform")) + { + EXT_bindable_uniform = true; + extensions.Remove("glEXT_bindable_uniform"); + } + if (extensions.Contains("gl_EXT_blend_color")) + { + EXT_blend_color = true; + extensions.Remove("glEXT_blend_color"); + } + if (extensions.Contains("gl_EXT_blend_equation_separate")) + { + EXT_blend_equation_separate = true; + extensions.Remove("glEXT_blend_equation_separate"); + } + if (extensions.Contains("gl_EXT_blend_func_separate")) + { + EXT_blend_func_separate = true; + extensions.Remove("glEXT_blend_func_separate"); + } + if (extensions.Contains("gl_EXT_blend_logic_op")) + { + EXT_blend_logic_op = true; + extensions.Remove("glEXT_blend_logic_op"); + } + if (extensions.Contains("gl_EXT_blend_minmax")) + { + EXT_blend_minmax = true; + extensions.Remove("glEXT_blend_minmax"); + } + if (extensions.Contains("gl_EXT_blend_subtract")) + { + EXT_blend_subtract = true; + extensions.Remove("glEXT_blend_subtract"); + } + if (extensions.Contains("gl_EXT_clip_volume_hint")) + { + EXT_clip_volume_hint = true; + extensions.Remove("glEXT_clip_volume_hint"); + } + if (extensions.Contains("gl_EXT_cmyka")) + { + EXT_cmyka = true; + extensions.Remove("glEXT_cmyka"); + } + if (extensions.Contains("gl_EXT_color_subtable")) + { + EXT_color_subtable = true; + extensions.Remove("glEXT_color_subtable"); + } + if (extensions.Contains("gl_EXT_compiled_vertex_array")) + { + EXT_compiled_vertex_array = true; + extensions.Remove("glEXT_compiled_vertex_array"); + } + if (extensions.Contains("gl_EXT_convolution")) + { + EXT_convolution = true; + extensions.Remove("glEXT_convolution"); + } + if (extensions.Contains("gl_EXT_coordinate_frame")) + { + EXT_coordinate_frame = true; + extensions.Remove("glEXT_coordinate_frame"); + } + if (extensions.Contains("gl_EXT_copy_texture")) + { + EXT_copy_texture = true; + extensions.Remove("glEXT_copy_texture"); + } + if (extensions.Contains("gl_EXT_cull_vertex")) + { + EXT_cull_vertex = true; + extensions.Remove("glEXT_cull_vertex"); + } + if (extensions.Contains("gl_EXT_debug_label")) + { + EXT_debug_label = true; + extensions.Remove("glEXT_debug_label"); + } + if (extensions.Contains("gl_EXT_debug_marker")) + { + EXT_debug_marker = true; + extensions.Remove("glEXT_debug_marker"); + } + if (extensions.Contains("gl_EXT_depth_bounds_test")) + { + EXT_depth_bounds_test = true; + extensions.Remove("glEXT_depth_bounds_test"); + } + if (extensions.Contains("gl_EXT_direct_state_access")) + { + EXT_direct_state_access = true; + extensions.Remove("glEXT_direct_state_access"); + } + if (extensions.Contains("gl_EXT_draw_buffers2")) + { + EXT_draw_buffers2 = true; + extensions.Remove("glEXT_draw_buffers2"); + } + if (extensions.Contains("gl_EXT_draw_instanced")) + { + EXT_draw_instanced = true; + extensions.Remove("glEXT_draw_instanced"); + } + if (extensions.Contains("gl_EXT_draw_range_elements")) + { + EXT_draw_range_elements = true; + extensions.Remove("glEXT_draw_range_elements"); + } + if (extensions.Contains("gl_EXT_external_buffer")) + { + EXT_external_buffer = true; + extensions.Remove("glEXT_external_buffer"); + } + if (extensions.Contains("gl_EXT_fog_coord")) + { + EXT_fog_coord = true; + extensions.Remove("glEXT_fog_coord"); + } + if (extensions.Contains("gl_EXT_framebuffer_blit")) + { + EXT_framebuffer_blit = true; + extensions.Remove("glEXT_framebuffer_blit"); + } + if (extensions.Contains("gl_EXT_framebuffer_blit_layers")) + { + EXT_framebuffer_blit_layers = true; + extensions.Remove("glEXT_framebuffer_blit_layers"); + } + if (extensions.Contains("gl_EXT_framebuffer_multisample")) + { + EXT_framebuffer_multisample = true; + extensions.Remove("glEXT_framebuffer_multisample"); + } + if (extensions.Contains("gl_EXT_framebuffer_multisample_blit_scaled")) + { + EXT_framebuffer_multisample_blit_scaled = true; + extensions.Remove("glEXT_framebuffer_multisample_blit_scaled"); + } + if (extensions.Contains("gl_EXT_framebuffer_object")) + { + EXT_framebuffer_object = true; + extensions.Remove("glEXT_framebuffer_object"); + } + if (extensions.Contains("gl_EXT_framebuffer_sRGB")) + { + EXT_framebuffer_sRGB = true; + extensions.Remove("glEXT_framebuffer_sRGB"); + } + if (extensions.Contains("gl_EXT_geometry_shader4")) + { + EXT_geometry_shader4 = true; + extensions.Remove("glEXT_geometry_shader4"); + } + if (extensions.Contains("gl_EXT_gpu_program_parameters")) + { + EXT_gpu_program_parameters = true; + extensions.Remove("glEXT_gpu_program_parameters"); + } + if (extensions.Contains("gl_EXT_gpu_shader4")) + { + EXT_gpu_shader4 = true; + extensions.Remove("glEXT_gpu_shader4"); + } + if (extensions.Contains("gl_EXT_histogram")) + { + EXT_histogram = true; + extensions.Remove("glEXT_histogram"); + } + if (extensions.Contains("gl_EXT_index_array_formats")) + { + EXT_index_array_formats = true; + extensions.Remove("glEXT_index_array_formats"); + } + if (extensions.Contains("gl_EXT_index_func")) + { + EXT_index_func = true; + extensions.Remove("glEXT_index_func"); + } + if (extensions.Contains("gl_EXT_index_material")) + { + EXT_index_material = true; + extensions.Remove("glEXT_index_material"); + } + if (extensions.Contains("gl_EXT_index_texture")) + { + EXT_index_texture = true; + extensions.Remove("glEXT_index_texture"); + } + if (extensions.Contains("gl_EXT_light_texture")) + { + EXT_light_texture = true; + extensions.Remove("glEXT_light_texture"); + } + if (extensions.Contains("gl_EXT_memory_object")) + { + EXT_memory_object = true; + extensions.Remove("glEXT_memory_object"); + } + if (extensions.Contains("gl_EXT_memory_object_fd")) + { + EXT_memory_object_fd = true; + extensions.Remove("glEXT_memory_object_fd"); + } + if (extensions.Contains("gl_EXT_memory_object_win32")) + { + EXT_memory_object_win32 = true; + extensions.Remove("glEXT_memory_object_win32"); + } + if (extensions.Contains("gl_EXT_misc_attribute")) + { + EXT_misc_attribute = true; + extensions.Remove("glEXT_misc_attribute"); + } + if (extensions.Contains("gl_EXT_multi_draw_arrays")) + { + EXT_multi_draw_arrays = true; + extensions.Remove("glEXT_multi_draw_arrays"); + } + if (extensions.Contains("gl_EXT_multisample")) + { + EXT_multisample = true; + extensions.Remove("glEXT_multisample"); + } + if (extensions.Contains("gl_EXT_multiview_tessellation_geometry_shader")) + { + EXT_multiview_tessellation_geometry_shader = true; + extensions.Remove("glEXT_multiview_tessellation_geometry_shader"); + } + if (extensions.Contains("gl_EXT_multiview_texture_multisample")) + { + EXT_multiview_texture_multisample = true; + extensions.Remove("glEXT_multiview_texture_multisample"); + } + if (extensions.Contains("gl_EXT_multiview_timer_query")) + { + EXT_multiview_timer_query = true; + extensions.Remove("glEXT_multiview_timer_query"); + } + if (extensions.Contains("gl_EXT_packed_depth_stencil")) + { + EXT_packed_depth_stencil = true; + extensions.Remove("glEXT_packed_depth_stencil"); + } + if (extensions.Contains("gl_EXT_packed_float")) + { + EXT_packed_float = true; + extensions.Remove("glEXT_packed_float"); + } + if (extensions.Contains("gl_EXT_packed_pixels")) + { + EXT_packed_pixels = true; + extensions.Remove("glEXT_packed_pixels"); + } + if (extensions.Contains("gl_EXT_paletted_texture")) + { + EXT_paletted_texture = true; + extensions.Remove("glEXT_paletted_texture"); + } + if (extensions.Contains("gl_EXT_pixel_buffer_object")) + { + EXT_pixel_buffer_object = true; + extensions.Remove("glEXT_pixel_buffer_object"); + } + if (extensions.Contains("gl_EXT_pixel_transform")) + { + EXT_pixel_transform = true; + extensions.Remove("glEXT_pixel_transform"); + } + if (extensions.Contains("gl_EXT_pixel_transform_color_table")) + { + EXT_pixel_transform_color_table = true; + extensions.Remove("glEXT_pixel_transform_color_table"); + } + if (extensions.Contains("gl_EXT_point_parameters")) + { + EXT_point_parameters = true; + extensions.Remove("glEXT_point_parameters"); + } + if (extensions.Contains("gl_EXT_polygon_offset")) + { + EXT_polygon_offset = true; + extensions.Remove("glEXT_polygon_offset"); + } + if (extensions.Contains("gl_EXT_polygon_offset_clamp")) + { + EXT_polygon_offset_clamp = true; + extensions.Remove("glEXT_polygon_offset_clamp"); + } + if (extensions.Contains("gl_EXT_post_depth_coverage")) + { + EXT_post_depth_coverage = true; + extensions.Remove("glEXT_post_depth_coverage"); + } + if (extensions.Contains("gl_EXT_provoking_vertex")) + { + EXT_provoking_vertex = true; + extensions.Remove("glEXT_provoking_vertex"); + } + if (extensions.Contains("gl_EXT_raster_multisample")) + { + EXT_raster_multisample = true; + extensions.Remove("glEXT_raster_multisample"); + } + if (extensions.Contains("gl_EXT_rescale_normal")) + { + EXT_rescale_normal = true; + extensions.Remove("glEXT_rescale_normal"); + } + if (extensions.Contains("gl_EXT_secondary_color")) + { + EXT_secondary_color = true; + extensions.Remove("glEXT_secondary_color"); + } + if (extensions.Contains("gl_EXT_semaphore")) + { + EXT_semaphore = true; + extensions.Remove("glEXT_semaphore"); + } + if (extensions.Contains("gl_EXT_semaphore_fd")) + { + EXT_semaphore_fd = true; + extensions.Remove("glEXT_semaphore_fd"); + } + if (extensions.Contains("gl_EXT_semaphore_win32")) + { + EXT_semaphore_win32 = true; + extensions.Remove("glEXT_semaphore_win32"); + } + if (extensions.Contains("gl_EXT_separate_shader_objects")) + { + EXT_separate_shader_objects = true; + extensions.Remove("glEXT_separate_shader_objects"); + } + if (extensions.Contains("gl_EXT_separate_specular_color")) + { + EXT_separate_specular_color = true; + extensions.Remove("glEXT_separate_specular_color"); + } + if (extensions.Contains("gl_EXT_shader_framebuffer_fetch")) + { + EXT_shader_framebuffer_fetch = true; + extensions.Remove("glEXT_shader_framebuffer_fetch"); + } + if (extensions.Contains("gl_EXT_shader_framebuffer_fetch_non_coherent")) + { + EXT_shader_framebuffer_fetch_non_coherent = true; + extensions.Remove("glEXT_shader_framebuffer_fetch_non_coherent"); + } + if (extensions.Contains("gl_EXT_shader_image_load_formatted")) + { + EXT_shader_image_load_formatted = true; + extensions.Remove("glEXT_shader_image_load_formatted"); + } + if (extensions.Contains("gl_EXT_shader_image_load_store")) + { + EXT_shader_image_load_store = true; + extensions.Remove("glEXT_shader_image_load_store"); + } + if (extensions.Contains("gl_EXT_shader_integer_mix")) + { + EXT_shader_integer_mix = true; + extensions.Remove("glEXT_shader_integer_mix"); + } + if (extensions.Contains("gl_EXT_shader_samples_identical")) + { + EXT_shader_samples_identical = true; + extensions.Remove("glEXT_shader_samples_identical"); + } + if (extensions.Contains("gl_EXT_shadow_funcs")) + { + EXT_shadow_funcs = true; + extensions.Remove("glEXT_shadow_funcs"); + } + if (extensions.Contains("gl_EXT_shared_texture_palette")) + { + EXT_shared_texture_palette = true; + extensions.Remove("glEXT_shared_texture_palette"); + } + if (extensions.Contains("gl_EXT_sparse_texture2")) + { + EXT_sparse_texture2 = true; + extensions.Remove("glEXT_sparse_texture2"); + } + if (extensions.Contains("gl_EXT_stencil_clear_tag")) + { + EXT_stencil_clear_tag = true; + extensions.Remove("glEXT_stencil_clear_tag"); + } + if (extensions.Contains("gl_EXT_stencil_two_side")) + { + EXT_stencil_two_side = true; + extensions.Remove("glEXT_stencil_two_side"); + } + if (extensions.Contains("gl_EXT_stencil_wrap")) + { + EXT_stencil_wrap = true; + extensions.Remove("glEXT_stencil_wrap"); + } + if (extensions.Contains("gl_EXT_subtexture")) + { + EXT_subtexture = true; + extensions.Remove("glEXT_subtexture"); + } + if (extensions.Contains("gl_EXT_texture")) + { + EXT_texture = true; + extensions.Remove("glEXT_texture"); + } + if (extensions.Contains("gl_EXT_texture3D")) + { + EXT_texture3D = true; + extensions.Remove("glEXT_texture3D"); + } + if (extensions.Contains("gl_EXT_texture_array")) + { + EXT_texture_array = true; + extensions.Remove("glEXT_texture_array"); + } + if (extensions.Contains("gl_EXT_texture_buffer_object")) + { + EXT_texture_buffer_object = true; + extensions.Remove("glEXT_texture_buffer_object"); + } + if (extensions.Contains("gl_EXT_texture_compression_latc")) + { + EXT_texture_compression_latc = true; + extensions.Remove("glEXT_texture_compression_latc"); + } + if (extensions.Contains("gl_EXT_texture_compression_rgtc")) + { + EXT_texture_compression_rgtc = true; + extensions.Remove("glEXT_texture_compression_rgtc"); + } + if (extensions.Contains("gl_EXT_texture_compression_s3tc")) + { + EXT_texture_compression_s3tc = true; + extensions.Remove("glEXT_texture_compression_s3tc"); + } + if (extensions.Contains("gl_EXT_texture_cube_map")) + { + EXT_texture_cube_map = true; + extensions.Remove("glEXT_texture_cube_map"); + } + if (extensions.Contains("gl_EXT_texture_env_add")) + { + EXT_texture_env_add = true; + extensions.Remove("glEXT_texture_env_add"); + } + if (extensions.Contains("gl_EXT_texture_env_combine")) + { + EXT_texture_env_combine = true; + extensions.Remove("glEXT_texture_env_combine"); + } + if (extensions.Contains("gl_EXT_texture_env_dot3")) + { + EXT_texture_env_dot3 = true; + extensions.Remove("glEXT_texture_env_dot3"); + } + if (extensions.Contains("gl_EXT_texture_filter_anisotropic")) + { + EXT_texture_filter_anisotropic = true; + extensions.Remove("glEXT_texture_filter_anisotropic"); + } + if (extensions.Contains("gl_EXT_texture_filter_minmax")) + { + EXT_texture_filter_minmax = true; + extensions.Remove("glEXT_texture_filter_minmax"); + } + if (extensions.Contains("gl_EXT_texture_integer")) + { + EXT_texture_integer = true; + extensions.Remove("glEXT_texture_integer"); + } + if (extensions.Contains("gl_EXT_texture_lod_bias")) + { + EXT_texture_lod_bias = true; + extensions.Remove("glEXT_texture_lod_bias"); + } + if (extensions.Contains("gl_EXT_texture_mirror_clamp")) + { + EXT_texture_mirror_clamp = true; + extensions.Remove("glEXT_texture_mirror_clamp"); + } + if (extensions.Contains("gl_EXT_texture_object")) + { + EXT_texture_object = true; + extensions.Remove("glEXT_texture_object"); + } + if (extensions.Contains("gl_EXT_texture_perturb_normal")) + { + EXT_texture_perturb_normal = true; + extensions.Remove("glEXT_texture_perturb_normal"); + } + if (extensions.Contains("gl_EXT_texture_sRGB")) + { + EXT_texture_sRGB = true; + extensions.Remove("glEXT_texture_sRGB"); + } + if (extensions.Contains("gl_EXT_texture_sRGB_R8")) + { + EXT_texture_sRGB_R8 = true; + extensions.Remove("glEXT_texture_sRGB_R8"); + } + if (extensions.Contains("gl_EXT_texture_sRGB_RG8")) + { + EXT_texture_sRGB_RG8 = true; + extensions.Remove("glEXT_texture_sRGB_RG8"); + } + if (extensions.Contains("gl_EXT_texture_sRGB_decode")) + { + EXT_texture_sRGB_decode = true; + extensions.Remove("glEXT_texture_sRGB_decode"); + } + if (extensions.Contains("gl_EXT_texture_shadow_lod")) + { + EXT_texture_shadow_lod = true; + extensions.Remove("glEXT_texture_shadow_lod"); + } + if (extensions.Contains("gl_EXT_texture_shared_exponent")) + { + EXT_texture_shared_exponent = true; + extensions.Remove("glEXT_texture_shared_exponent"); + } + if (extensions.Contains("gl_EXT_texture_snorm")) + { + EXT_texture_snorm = true; + extensions.Remove("glEXT_texture_snorm"); + } + if (extensions.Contains("gl_EXT_texture_storage")) + { + EXT_texture_storage = true; + extensions.Remove("glEXT_texture_storage"); + } + if (extensions.Contains("gl_EXT_texture_swizzle")) + { + EXT_texture_swizzle = true; + extensions.Remove("glEXT_texture_swizzle"); + } + if (extensions.Contains("gl_EXT_timer_query")) + { + EXT_timer_query = true; + extensions.Remove("glEXT_timer_query"); + } + if (extensions.Contains("gl_EXT_transform_feedback")) + { + EXT_transform_feedback = true; + extensions.Remove("glEXT_transform_feedback"); + } + if (extensions.Contains("gl_EXT_vertex_array")) + { + EXT_vertex_array = true; + extensions.Remove("glEXT_vertex_array"); + } + if (extensions.Contains("gl_EXT_vertex_array_bgra")) + { + EXT_vertex_array_bgra = true; + extensions.Remove("glEXT_vertex_array_bgra"); + } + if (extensions.Contains("gl_EXT_vertex_attrib_64bit")) + { + EXT_vertex_attrib_64bit = true; + extensions.Remove("glEXT_vertex_attrib_64bit"); + } + if (extensions.Contains("gl_EXT_vertex_shader")) + { + EXT_vertex_shader = true; + extensions.Remove("glEXT_vertex_shader"); + } + if (extensions.Contains("gl_EXT_vertex_weighting")) + { + EXT_vertex_weighting = true; + extensions.Remove("glEXT_vertex_weighting"); + } + if (extensions.Contains("gl_EXT_win32_keyed_mutex")) + { + EXT_win32_keyed_mutex = true; + extensions.Remove("glEXT_win32_keyed_mutex"); + } + if (extensions.Contains("gl_EXT_window_rectangles")) + { + EXT_window_rectangles = true; + extensions.Remove("glEXT_window_rectangles"); + } + if (extensions.Contains("gl_EXT_x11_sync_object")) + { + EXT_x11_sync_object = true; + extensions.Remove("glEXT_x11_sync_object"); + } + if (extensions.Contains("gl_GREMEDY_frame_terminator")) + { + GREMEDY_frame_terminator = true; + extensions.Remove("glGREMEDY_frame_terminator"); + } + if (extensions.Contains("gl_GREMEDY_string_marker")) + { + GREMEDY_string_marker = true; + extensions.Remove("glGREMEDY_string_marker"); + } + if (extensions.Contains("gl_HP_convolution_border_modes")) + { + HP_convolution_border_modes = true; + extensions.Remove("glHP_convolution_border_modes"); + } + if (extensions.Contains("gl_HP_image_transform")) + { + HP_image_transform = true; + extensions.Remove("glHP_image_transform"); + } + if (extensions.Contains("gl_HP_occlusion_test")) + { + HP_occlusion_test = true; + extensions.Remove("glHP_occlusion_test"); + } + if (extensions.Contains("gl_HP_texture_lighting")) + { + HP_texture_lighting = true; + extensions.Remove("glHP_texture_lighting"); + } + if (extensions.Contains("gl_IBM_cull_vertex")) + { + IBM_cull_vertex = true; + extensions.Remove("glIBM_cull_vertex"); + } + if (extensions.Contains("gl_IBM_multimode_draw_arrays")) + { + IBM_multimode_draw_arrays = true; + extensions.Remove("glIBM_multimode_draw_arrays"); + } + if (extensions.Contains("gl_IBM_rasterpos_clip")) + { + IBM_rasterpos_clip = true; + extensions.Remove("glIBM_rasterpos_clip"); + } + if (extensions.Contains("gl_IBM_static_data")) + { + IBM_static_data = true; + extensions.Remove("glIBM_static_data"); + } + if (extensions.Contains("gl_IBM_texture_mirrored_repeat")) + { + IBM_texture_mirrored_repeat = true; + extensions.Remove("glIBM_texture_mirrored_repeat"); + } + if (extensions.Contains("gl_IBM_vertex_array_lists")) + { + IBM_vertex_array_lists = true; + extensions.Remove("glIBM_vertex_array_lists"); + } + if (extensions.Contains("gl_INGR_blend_func_separate")) + { + INGR_blend_func_separate = true; + extensions.Remove("glINGR_blend_func_separate"); + } + if (extensions.Contains("gl_INGR_color_clamp")) + { + INGR_color_clamp = true; + extensions.Remove("glINGR_color_clamp"); + } + if (extensions.Contains("gl_INGR_interlace_read")) + { + INGR_interlace_read = true; + extensions.Remove("glINGR_interlace_read"); + } + if (extensions.Contains("gl_INTEL_blackhole_render")) + { + INTEL_blackhole_render = true; + extensions.Remove("glINTEL_blackhole_render"); + } + if (extensions.Contains("gl_INTEL_conservative_rasterization")) + { + INTEL_conservative_rasterization = true; + extensions.Remove("glINTEL_conservative_rasterization"); + } + if (extensions.Contains("gl_INTEL_fragment_shader_ordering")) + { + INTEL_fragment_shader_ordering = true; + extensions.Remove("glINTEL_fragment_shader_ordering"); + } + if (extensions.Contains("gl_INTEL_framebuffer_CMAA")) + { + INTEL_framebuffer_CMAA = true; + extensions.Remove("glINTEL_framebuffer_CMAA"); + } + if (extensions.Contains("gl_INTEL_map_texture")) + { + INTEL_map_texture = true; + extensions.Remove("glINTEL_map_texture"); + } + if (extensions.Contains("gl_INTEL_parallel_arrays")) + { + INTEL_parallel_arrays = true; + extensions.Remove("glINTEL_parallel_arrays"); + } + if (extensions.Contains("gl_INTEL_performance_query")) + { + INTEL_performance_query = true; + extensions.Remove("glINTEL_performance_query"); + } + if (extensions.Contains("gl_KHR_blend_equation_advanced")) + { + KHR_blend_equation_advanced = true; + extensions.Remove("glKHR_blend_equation_advanced"); + } + if (extensions.Contains("gl_KHR_blend_equation_advanced_coherent")) + { + KHR_blend_equation_advanced_coherent = true; + extensions.Remove("glKHR_blend_equation_advanced_coherent"); + } + if (extensions.Contains("gl_KHR_context_flush_control")) + { + KHR_context_flush_control = true; + extensions.Remove("glKHR_context_flush_control"); + } + if (extensions.Contains("gl_KHR_debug")) + { + KHR_debug = true; + extensions.Remove("glKHR_debug"); + } + if (extensions.Contains("gl_KHR_no_error")) + { + KHR_no_error = true; + extensions.Remove("glKHR_no_error"); + } + if (extensions.Contains("gl_KHR_parallel_shader_compile")) + { + KHR_parallel_shader_compile = true; + extensions.Remove("glKHR_parallel_shader_compile"); + } + if (extensions.Contains("gl_KHR_robust_buffer_access_behavior")) + { + KHR_robust_buffer_access_behavior = true; + extensions.Remove("glKHR_robust_buffer_access_behavior"); + } + if (extensions.Contains("gl_KHR_robustness")) + { + KHR_robustness = true; + extensions.Remove("glKHR_robustness"); + } + if (extensions.Contains("gl_KHR_shader_subgroup")) + { + KHR_shader_subgroup = true; + extensions.Remove("glKHR_shader_subgroup"); + } + if (extensions.Contains("gl_KHR_texture_compression_astc_hdr")) + { + KHR_texture_compression_astc_hdr = true; + extensions.Remove("glKHR_texture_compression_astc_hdr"); + } + if (extensions.Contains("gl_KHR_texture_compression_astc_ldr")) + { + KHR_texture_compression_astc_ldr = true; + extensions.Remove("glKHR_texture_compression_astc_ldr"); + } + if (extensions.Contains("gl_KHR_texture_compression_astc_sliced_3d")) + { + KHR_texture_compression_astc_sliced_3d = true; + extensions.Remove("glKHR_texture_compression_astc_sliced_3d"); + } + if (extensions.Contains("gl_MESAX_texture_stack")) + { + MESAX_texture_stack = true; + extensions.Remove("glMESAX_texture_stack"); + } + if (extensions.Contains("gl_MESA_framebuffer_flip_x")) + { + MESA_framebuffer_flip_x = true; + extensions.Remove("glMESA_framebuffer_flip_x"); + } + if (extensions.Contains("gl_MESA_framebuffer_flip_y")) + { + MESA_framebuffer_flip_y = true; + extensions.Remove("glMESA_framebuffer_flip_y"); + } + if (extensions.Contains("gl_MESA_framebuffer_swap_xy")) + { + MESA_framebuffer_swap_xy = true; + extensions.Remove("glMESA_framebuffer_swap_xy"); + } + if (extensions.Contains("gl_MESA_pack_invert")) + { + MESA_pack_invert = true; + extensions.Remove("glMESA_pack_invert"); + } + if (extensions.Contains("gl_MESA_program_binary_formats")) + { + MESA_program_binary_formats = true; + extensions.Remove("glMESA_program_binary_formats"); + } + if (extensions.Contains("gl_MESA_resize_buffers")) + { + MESA_resize_buffers = true; + extensions.Remove("glMESA_resize_buffers"); + } + if (extensions.Contains("gl_MESA_shader_integer_functions")) + { + MESA_shader_integer_functions = true; + extensions.Remove("glMESA_shader_integer_functions"); + } + if (extensions.Contains("gl_MESA_tile_raster_order")) + { + MESA_tile_raster_order = true; + extensions.Remove("glMESA_tile_raster_order"); + } + if (extensions.Contains("gl_MESA_window_pos")) + { + MESA_window_pos = true; + extensions.Remove("glMESA_window_pos"); + } + if (extensions.Contains("gl_MESA_ycbcr_texture")) + { + MESA_ycbcr_texture = true; + extensions.Remove("glMESA_ycbcr_texture"); + } + if (extensions.Contains("gl_NVX_blend_equation_advanced_multi_draw_buffers")) + { + NVX_blend_equation_advanced_multi_draw_buffers = true; + extensions.Remove("glNVX_blend_equation_advanced_multi_draw_buffers"); + } + if (extensions.Contains("gl_NVX_conditional_render")) + { + NVX_conditional_render = true; + extensions.Remove("glNVX_conditional_render"); + } + if (extensions.Contains("gl_NVX_gpu_memory_info")) + { + NVX_gpu_memory_info = true; + extensions.Remove("glNVX_gpu_memory_info"); + } + if (extensions.Contains("gl_NVX_gpu_multicast2")) + { + NVX_gpu_multicast2 = true; + extensions.Remove("glNVX_gpu_multicast2"); + } + if (extensions.Contains("gl_NVX_linked_gpu_multicast")) + { + NVX_linked_gpu_multicast = true; + extensions.Remove("glNVX_linked_gpu_multicast"); + } + if (extensions.Contains("gl_NVX_progress_fence")) + { + NVX_progress_fence = true; + extensions.Remove("glNVX_progress_fence"); + } + if (extensions.Contains("gl_NV_alpha_to_coverage_dither_control")) + { + NV_alpha_to_coverage_dither_control = true; + extensions.Remove("glNV_alpha_to_coverage_dither_control"); + } + if (extensions.Contains("gl_NV_bindless_multi_draw_indirect")) + { + NV_bindless_multi_draw_indirect = true; + extensions.Remove("glNV_bindless_multi_draw_indirect"); + } + if (extensions.Contains("gl_NV_bindless_multi_draw_indirect_count")) + { + NV_bindless_multi_draw_indirect_count = true; + extensions.Remove("glNV_bindless_multi_draw_indirect_count"); + } + if (extensions.Contains("gl_NV_bindless_texture")) + { + NV_bindless_texture = true; + extensions.Remove("glNV_bindless_texture"); + } + if (extensions.Contains("gl_NV_blend_equation_advanced")) + { + NV_blend_equation_advanced = true; + extensions.Remove("glNV_blend_equation_advanced"); + } + if (extensions.Contains("gl_NV_blend_equation_advanced_coherent")) + { + NV_blend_equation_advanced_coherent = true; + extensions.Remove("glNV_blend_equation_advanced_coherent"); + } + if (extensions.Contains("gl_NV_blend_minmax_factor")) + { + NV_blend_minmax_factor = true; + extensions.Remove("glNV_blend_minmax_factor"); + } + if (extensions.Contains("gl_NV_blend_square")) + { + NV_blend_square = true; + extensions.Remove("glNV_blend_square"); + } + if (extensions.Contains("gl_NV_clip_space_w_scaling")) + { + NV_clip_space_w_scaling = true; + extensions.Remove("glNV_clip_space_w_scaling"); + } + if (extensions.Contains("gl_NV_command_list")) + { + NV_command_list = true; + extensions.Remove("glNV_command_list"); + } + if (extensions.Contains("gl_NV_compute_program5")) + { + NV_compute_program5 = true; + extensions.Remove("glNV_compute_program5"); + } + if (extensions.Contains("gl_NV_compute_shader_derivatives")) + { + NV_compute_shader_derivatives = true; + extensions.Remove("glNV_compute_shader_derivatives"); + } + if (extensions.Contains("gl_NV_conditional_render")) + { + NV_conditional_render = true; + extensions.Remove("glNV_conditional_render"); + } + if (extensions.Contains("gl_NV_conservative_raster")) + { + NV_conservative_raster = true; + extensions.Remove("glNV_conservative_raster"); + } + if (extensions.Contains("gl_NV_conservative_raster_dilate")) + { + NV_conservative_raster_dilate = true; + extensions.Remove("glNV_conservative_raster_dilate"); + } + if (extensions.Contains("gl_NV_conservative_raster_pre_snap")) + { + NV_conservative_raster_pre_snap = true; + extensions.Remove("glNV_conservative_raster_pre_snap"); + } + if (extensions.Contains("gl_NV_conservative_raster_pre_snap_triangles")) + { + NV_conservative_raster_pre_snap_triangles = true; + extensions.Remove("glNV_conservative_raster_pre_snap_triangles"); + } + if (extensions.Contains("gl_NV_conservative_raster_underestimation")) + { + NV_conservative_raster_underestimation = true; + extensions.Remove("glNV_conservative_raster_underestimation"); + } + if (extensions.Contains("gl_NV_copy_depth_to_color")) + { + NV_copy_depth_to_color = true; + extensions.Remove("glNV_copy_depth_to_color"); + } + if (extensions.Contains("gl_NV_copy_image")) + { + NV_copy_image = true; + extensions.Remove("glNV_copy_image"); + } + if (extensions.Contains("gl_NV_deep_texture3D")) + { + NV_deep_texture3D = true; + extensions.Remove("glNV_deep_texture3D"); + } + if (extensions.Contains("gl_NV_depth_buffer_float")) + { + NV_depth_buffer_float = true; + extensions.Remove("glNV_depth_buffer_float"); + } + if (extensions.Contains("gl_NV_depth_clamp")) + { + NV_depth_clamp = true; + extensions.Remove("glNV_depth_clamp"); + } + if (extensions.Contains("gl_NV_draw_texture")) + { + NV_draw_texture = true; + extensions.Remove("glNV_draw_texture"); + } + if (extensions.Contains("gl_NV_draw_vulkan_image")) + { + NV_draw_vulkan_image = true; + extensions.Remove("glNV_draw_vulkan_image"); + } + if (extensions.Contains("gl_NV_evaluators")) + { + NV_evaluators = true; + extensions.Remove("glNV_evaluators"); + } + if (extensions.Contains("gl_NV_explicit_multisample")) + { + NV_explicit_multisample = true; + extensions.Remove("glNV_explicit_multisample"); + } + if (extensions.Contains("gl_NV_fence")) + { + NV_fence = true; + extensions.Remove("glNV_fence"); + } + if (extensions.Contains("gl_NV_fill_rectangle")) + { + NV_fill_rectangle = true; + extensions.Remove("glNV_fill_rectangle"); + } + if (extensions.Contains("gl_NV_float_buffer")) + { + NV_float_buffer = true; + extensions.Remove("glNV_float_buffer"); + } + if (extensions.Contains("gl_NV_fog_distance")) + { + NV_fog_distance = true; + extensions.Remove("glNV_fog_distance"); + } + if (extensions.Contains("gl_NV_fragment_coverage_to_color")) + { + NV_fragment_coverage_to_color = true; + extensions.Remove("glNV_fragment_coverage_to_color"); + } + if (extensions.Contains("gl_NV_fragment_program")) + { + NV_fragment_program = true; + extensions.Remove("glNV_fragment_program"); + } + if (extensions.Contains("gl_NV_fragment_program2")) + { + NV_fragment_program2 = true; + extensions.Remove("glNV_fragment_program2"); + } + if (extensions.Contains("gl_NV_fragment_program4")) + { + NV_fragment_program4 = true; + extensions.Remove("glNV_fragment_program4"); + } + if (extensions.Contains("gl_NV_fragment_program_option")) + { + NV_fragment_program_option = true; + extensions.Remove("glNV_fragment_program_option"); + } + if (extensions.Contains("gl_NV_fragment_shader_barycentric")) + { + NV_fragment_shader_barycentric = true; + extensions.Remove("glNV_fragment_shader_barycentric"); + } + if (extensions.Contains("gl_NV_fragment_shader_interlock")) + { + NV_fragment_shader_interlock = true; + extensions.Remove("glNV_fragment_shader_interlock"); + } + if (extensions.Contains("gl_NV_framebuffer_mixed_samples")) + { + NV_framebuffer_mixed_samples = true; + extensions.Remove("glNV_framebuffer_mixed_samples"); + } + if (extensions.Contains("gl_NV_framebuffer_multisample_coverage")) + { + NV_framebuffer_multisample_coverage = true; + extensions.Remove("glNV_framebuffer_multisample_coverage"); + } + if (extensions.Contains("gl_NV_geometry_program4")) + { + NV_geometry_program4 = true; + extensions.Remove("glNV_geometry_program4"); + } + if (extensions.Contains("gl_NV_geometry_shader4")) + { + NV_geometry_shader4 = true; + extensions.Remove("glNV_geometry_shader4"); + } + if (extensions.Contains("gl_NV_geometry_shader_passthrough")) + { + NV_geometry_shader_passthrough = true; + extensions.Remove("glNV_geometry_shader_passthrough"); + } + if (extensions.Contains("gl_NV_gpu_multicast")) + { + NV_gpu_multicast = true; + extensions.Remove("glNV_gpu_multicast"); + } + if (extensions.Contains("gl_NV_gpu_program4")) + { + NV_gpu_program4 = true; + extensions.Remove("glNV_gpu_program4"); + } + if (extensions.Contains("gl_NV_gpu_program5")) + { + NV_gpu_program5 = true; + extensions.Remove("glNV_gpu_program5"); + } + if (extensions.Contains("gl_NV_gpu_program5_mem_extended")) + { + NV_gpu_program5_mem_extended = true; + extensions.Remove("glNV_gpu_program5_mem_extended"); + } + if (extensions.Contains("gl_NV_gpu_shader5")) + { + NV_gpu_shader5 = true; + extensions.Remove("glNV_gpu_shader5"); + } + if (extensions.Contains("gl_NV_half_float")) + { + NV_half_float = true; + extensions.Remove("glNV_half_float"); + } + if (extensions.Contains("gl_NV_internalformat_sample_query")) + { + NV_internalformat_sample_query = true; + extensions.Remove("glNV_internalformat_sample_query"); + } + if (extensions.Contains("gl_NV_light_max_exponent")) + { + NV_light_max_exponent = true; + extensions.Remove("glNV_light_max_exponent"); + } + if (extensions.Contains("gl_NV_memory_attachment")) + { + NV_memory_attachment = true; + extensions.Remove("glNV_memory_attachment"); + } + if (extensions.Contains("gl_NV_memory_object_sparse")) + { + NV_memory_object_sparse = true; + extensions.Remove("glNV_memory_object_sparse"); + } + if (extensions.Contains("gl_NV_mesh_shader")) + { + NV_mesh_shader = true; + extensions.Remove("glNV_mesh_shader"); + } + if (extensions.Contains("gl_NV_multisample_coverage")) + { + NV_multisample_coverage = true; + extensions.Remove("glNV_multisample_coverage"); + } + if (extensions.Contains("gl_NV_multisample_filter_hint")) + { + NV_multisample_filter_hint = true; + extensions.Remove("glNV_multisample_filter_hint"); + } + if (extensions.Contains("gl_NV_occlusion_query")) + { + NV_occlusion_query = true; + extensions.Remove("glNV_occlusion_query"); + } + if (extensions.Contains("gl_NV_packed_depth_stencil")) + { + NV_packed_depth_stencil = true; + extensions.Remove("glNV_packed_depth_stencil"); + } + if (extensions.Contains("gl_NV_parameter_buffer_object")) + { + NV_parameter_buffer_object = true; + extensions.Remove("glNV_parameter_buffer_object"); + } + if (extensions.Contains("gl_NV_parameter_buffer_object2")) + { + NV_parameter_buffer_object2 = true; + extensions.Remove("glNV_parameter_buffer_object2"); + } + if (extensions.Contains("gl_NV_path_rendering")) + { + NV_path_rendering = true; + extensions.Remove("glNV_path_rendering"); + } + if (extensions.Contains("gl_NV_path_rendering_shared_edge")) + { + NV_path_rendering_shared_edge = true; + extensions.Remove("glNV_path_rendering_shared_edge"); + } + if (extensions.Contains("gl_NV_pixel_data_range")) + { + NV_pixel_data_range = true; + extensions.Remove("glNV_pixel_data_range"); + } + if (extensions.Contains("gl_NV_point_sprite")) + { + NV_point_sprite = true; + extensions.Remove("glNV_point_sprite"); + } + if (extensions.Contains("gl_NV_present_video")) + { + NV_present_video = true; + extensions.Remove("glNV_present_video"); + } + if (extensions.Contains("gl_NV_primitive_restart")) + { + NV_primitive_restart = true; + extensions.Remove("glNV_primitive_restart"); + } + if (extensions.Contains("gl_NV_primitive_shading_rate")) + { + NV_primitive_shading_rate = true; + extensions.Remove("glNV_primitive_shading_rate"); + } + if (extensions.Contains("gl_NV_query_resource")) + { + NV_query_resource = true; + extensions.Remove("glNV_query_resource"); + } + if (extensions.Contains("gl_NV_query_resource_tag")) + { + NV_query_resource_tag = true; + extensions.Remove("glNV_query_resource_tag"); + } + if (extensions.Contains("gl_NV_register_combiners")) + { + NV_register_combiners = true; + extensions.Remove("glNV_register_combiners"); + } + if (extensions.Contains("gl_NV_register_combiners2")) + { + NV_register_combiners2 = true; + extensions.Remove("glNV_register_combiners2"); + } + if (extensions.Contains("gl_NV_representative_fragment_test")) + { + NV_representative_fragment_test = true; + extensions.Remove("glNV_representative_fragment_test"); + } + if (extensions.Contains("gl_NV_robustness_video_memory_purge")) + { + NV_robustness_video_memory_purge = true; + extensions.Remove("glNV_robustness_video_memory_purge"); + } + if (extensions.Contains("gl_NV_sample_locations")) + { + NV_sample_locations = true; + extensions.Remove("glNV_sample_locations"); + } + if (extensions.Contains("gl_NV_sample_mask_override_coverage")) + { + NV_sample_mask_override_coverage = true; + extensions.Remove("glNV_sample_mask_override_coverage"); + } + if (extensions.Contains("gl_NV_scissor_exclusive")) + { + NV_scissor_exclusive = true; + extensions.Remove("glNV_scissor_exclusive"); + } + if (extensions.Contains("gl_NV_shader_atomic_counters")) + { + NV_shader_atomic_counters = true; + extensions.Remove("glNV_shader_atomic_counters"); + } + if (extensions.Contains("gl_NV_shader_atomic_float")) + { + NV_shader_atomic_float = true; + extensions.Remove("glNV_shader_atomic_float"); + } + if (extensions.Contains("gl_NV_shader_atomic_float64")) + { + NV_shader_atomic_float64 = true; + extensions.Remove("glNV_shader_atomic_float64"); + } + if (extensions.Contains("gl_NV_shader_atomic_fp16_vector")) + { + NV_shader_atomic_fp16_vector = true; + extensions.Remove("glNV_shader_atomic_fp16_vector"); + } + if (extensions.Contains("gl_NV_shader_atomic_int64")) + { + NV_shader_atomic_int64 = true; + extensions.Remove("glNV_shader_atomic_int64"); + } + if (extensions.Contains("gl_NV_shader_buffer_load")) + { + NV_shader_buffer_load = true; + extensions.Remove("glNV_shader_buffer_load"); + } + if (extensions.Contains("gl_NV_shader_buffer_store")) + { + NV_shader_buffer_store = true; + extensions.Remove("glNV_shader_buffer_store"); + } + if (extensions.Contains("gl_NV_shader_storage_buffer_object")) + { + NV_shader_storage_buffer_object = true; + extensions.Remove("glNV_shader_storage_buffer_object"); + } + if (extensions.Contains("gl_NV_shader_subgroup_partitioned")) + { + NV_shader_subgroup_partitioned = true; + extensions.Remove("glNV_shader_subgroup_partitioned"); + } + if (extensions.Contains("gl_NV_shader_texture_footprint")) + { + NV_shader_texture_footprint = true; + extensions.Remove("glNV_shader_texture_footprint"); + } + if (extensions.Contains("gl_NV_shader_thread_group")) + { + NV_shader_thread_group = true; + extensions.Remove("glNV_shader_thread_group"); + } + if (extensions.Contains("gl_NV_shader_thread_shuffle")) + { + NV_shader_thread_shuffle = true; + extensions.Remove("glNV_shader_thread_shuffle"); + } + if (extensions.Contains("gl_NV_shading_rate_image")) + { + NV_shading_rate_image = true; + extensions.Remove("glNV_shading_rate_image"); + } + if (extensions.Contains("gl_NV_stereo_view_rendering")) + { + NV_stereo_view_rendering = true; + extensions.Remove("glNV_stereo_view_rendering"); + } + if (extensions.Contains("gl_NV_tessellation_program5")) + { + NV_tessellation_program5 = true; + extensions.Remove("glNV_tessellation_program5"); + } + if (extensions.Contains("gl_NV_texgen_emboss")) + { + NV_texgen_emboss = true; + extensions.Remove("glNV_texgen_emboss"); + } + if (extensions.Contains("gl_NV_texgen_reflection")) + { + NV_texgen_reflection = true; + extensions.Remove("glNV_texgen_reflection"); + } + if (extensions.Contains("gl_NV_texture_barrier")) + { + NV_texture_barrier = true; + extensions.Remove("glNV_texture_barrier"); + } + if (extensions.Contains("gl_NV_texture_compression_vtc")) + { + NV_texture_compression_vtc = true; + extensions.Remove("glNV_texture_compression_vtc"); + } + if (extensions.Contains("gl_NV_texture_env_combine4")) + { + NV_texture_env_combine4 = true; + extensions.Remove("glNV_texture_env_combine4"); + } + if (extensions.Contains("gl_NV_texture_expand_normal")) + { + NV_texture_expand_normal = true; + extensions.Remove("glNV_texture_expand_normal"); + } + if (extensions.Contains("gl_NV_texture_multisample")) + { + NV_texture_multisample = true; + extensions.Remove("glNV_texture_multisample"); + } + if (extensions.Contains("gl_NV_texture_rectangle")) + { + NV_texture_rectangle = true; + extensions.Remove("glNV_texture_rectangle"); + } + if (extensions.Contains("gl_NV_texture_rectangle_compressed")) + { + NV_texture_rectangle_compressed = true; + extensions.Remove("glNV_texture_rectangle_compressed"); + } + if (extensions.Contains("gl_NV_texture_shader")) + { + NV_texture_shader = true; + extensions.Remove("glNV_texture_shader"); + } + if (extensions.Contains("gl_NV_texture_shader2")) + { + NV_texture_shader2 = true; + extensions.Remove("glNV_texture_shader2"); + } + if (extensions.Contains("gl_NV_texture_shader3")) + { + NV_texture_shader3 = true; + extensions.Remove("glNV_texture_shader3"); + } + if (extensions.Contains("gl_NV_timeline_semaphore")) + { + NV_timeline_semaphore = true; + extensions.Remove("glNV_timeline_semaphore"); + } + if (extensions.Contains("gl_NV_transform_feedback")) + { + NV_transform_feedback = true; + extensions.Remove("glNV_transform_feedback"); + } + if (extensions.Contains("gl_NV_transform_feedback2")) + { + NV_transform_feedback2 = true; + extensions.Remove("glNV_transform_feedback2"); + } + if (extensions.Contains("gl_NV_uniform_buffer_std430_layout")) + { + NV_uniform_buffer_std430_layout = true; + extensions.Remove("glNV_uniform_buffer_std430_layout"); + } + if (extensions.Contains("gl_NV_uniform_buffer_unified_memory")) + { + NV_uniform_buffer_unified_memory = true; + extensions.Remove("glNV_uniform_buffer_unified_memory"); + } + if (extensions.Contains("gl_NV_vdpau_interop")) + { + NV_vdpau_interop = true; + extensions.Remove("glNV_vdpau_interop"); + } + if (extensions.Contains("gl_NV_vdpau_interop2")) + { + NV_vdpau_interop2 = true; + extensions.Remove("glNV_vdpau_interop2"); + } + if (extensions.Contains("gl_NV_vertex_array_range")) + { + NV_vertex_array_range = true; + extensions.Remove("glNV_vertex_array_range"); + } + if (extensions.Contains("gl_NV_vertex_array_range2")) + { + NV_vertex_array_range2 = true; + extensions.Remove("glNV_vertex_array_range2"); + } + if (extensions.Contains("gl_NV_vertex_attrib_integer_64bit")) + { + NV_vertex_attrib_integer_64bit = true; + extensions.Remove("glNV_vertex_attrib_integer_64bit"); + } + if (extensions.Contains("gl_NV_vertex_buffer_unified_memory")) + { + NV_vertex_buffer_unified_memory = true; + extensions.Remove("glNV_vertex_buffer_unified_memory"); + } + if (extensions.Contains("gl_NV_vertex_program")) + { + NV_vertex_program = true; + extensions.Remove("glNV_vertex_program"); + } + if (extensions.Contains("gl_NV_vertex_program1_1")) + { + NV_vertex_program1_1 = true; + extensions.Remove("glNV_vertex_program1_1"); + } + if (extensions.Contains("gl_NV_vertex_program2")) + { + NV_vertex_program2 = true; + extensions.Remove("glNV_vertex_program2"); + } + if (extensions.Contains("gl_NV_vertex_program2_option")) + { + NV_vertex_program2_option = true; + extensions.Remove("glNV_vertex_program2_option"); + } + if (extensions.Contains("gl_NV_vertex_program3")) + { + NV_vertex_program3 = true; + extensions.Remove("glNV_vertex_program3"); + } + if (extensions.Contains("gl_NV_vertex_program4")) + { + NV_vertex_program4 = true; + extensions.Remove("glNV_vertex_program4"); + } + if (extensions.Contains("gl_NV_video_capture")) + { + NV_video_capture = true; + extensions.Remove("glNV_video_capture"); + } + if (extensions.Contains("gl_NV_viewport_array2")) + { + NV_viewport_array2 = true; + extensions.Remove("glNV_viewport_array2"); + } + if (extensions.Contains("gl_NV_viewport_swizzle")) + { + NV_viewport_swizzle = true; + extensions.Remove("glNV_viewport_swizzle"); + } + if (extensions.Contains("gl_OES_byte_coordinates")) + { + OES_byte_coordinates = true; + extensions.Remove("glOES_byte_coordinates"); + } + if (extensions.Contains("gl_OES_compressed_paletted_texture")) + { + OES_compressed_paletted_texture = true; + extensions.Remove("glOES_compressed_paletted_texture"); + } + if (extensions.Contains("gl_OES_fixed_point")) + { + OES_fixed_point = true; + extensions.Remove("glOES_fixed_point"); + } + if (extensions.Contains("gl_OES_query_matrix")) + { + OES_query_matrix = true; + extensions.Remove("glOES_query_matrix"); + } + if (extensions.Contains("gl_OES_read_format")) + { + OES_read_format = true; + extensions.Remove("glOES_read_format"); + } + if (extensions.Contains("gl_OES_single_precision")) + { + OES_single_precision = true; + extensions.Remove("glOES_single_precision"); + } + if (extensions.Contains("gl_OML_interlace")) + { + OML_interlace = true; + extensions.Remove("glOML_interlace"); + } + if (extensions.Contains("gl_OML_resample")) + { + OML_resample = true; + extensions.Remove("glOML_resample"); + } + if (extensions.Contains("gl_OML_subsample")) + { + OML_subsample = true; + extensions.Remove("glOML_subsample"); + } + if (extensions.Contains("gl_OVR_multiview")) + { + OVR_multiview = true; + extensions.Remove("glOVR_multiview"); + } + if (extensions.Contains("gl_OVR_multiview2")) + { + OVR_multiview2 = true; + extensions.Remove("glOVR_multiview2"); + } + if (extensions.Contains("gl_PGI_misc_hints")) + { + PGI_misc_hints = true; + extensions.Remove("glPGI_misc_hints"); + } + if (extensions.Contains("gl_PGI_vertex_hints")) + { + PGI_vertex_hints = true; + extensions.Remove("glPGI_vertex_hints"); + } + if (extensions.Contains("gl_REND_screen_coordinates")) + { + REND_screen_coordinates = true; + extensions.Remove("glREND_screen_coordinates"); + } + if (extensions.Contains("gl_S3_s3tc")) + { + S3_s3tc = true; + extensions.Remove("glS3_s3tc"); + } + if (extensions.Contains("gl_SGIS_detail_texture")) + { + SGIS_detail_texture = true; + extensions.Remove("glSGIS_detail_texture"); + } + if (extensions.Contains("gl_SGIS_fog_function")) + { + SGIS_fog_function = true; + extensions.Remove("glSGIS_fog_function"); + } + if (extensions.Contains("gl_SGIS_generate_mipmap")) + { + SGIS_generate_mipmap = true; + extensions.Remove("glSGIS_generate_mipmap"); + } + if (extensions.Contains("gl_SGIS_multisample")) + { + SGIS_multisample = true; + extensions.Remove("glSGIS_multisample"); + } + if (extensions.Contains("gl_SGIS_pixel_texture")) + { + SGIS_pixel_texture = true; + extensions.Remove("glSGIS_pixel_texture"); + } + if (extensions.Contains("gl_SGIS_point_line_texgen")) + { + SGIS_point_line_texgen = true; + extensions.Remove("glSGIS_point_line_texgen"); + } + if (extensions.Contains("gl_SGIS_point_parameters")) + { + SGIS_point_parameters = true; + extensions.Remove("glSGIS_point_parameters"); + } + if (extensions.Contains("gl_SGIS_sharpen_texture")) + { + SGIS_sharpen_texture = true; + extensions.Remove("glSGIS_sharpen_texture"); + } + if (extensions.Contains("gl_SGIS_texture4D")) + { + SGIS_texture4D = true; + extensions.Remove("glSGIS_texture4D"); + } + if (extensions.Contains("gl_SGIS_texture_border_clamp")) + { + SGIS_texture_border_clamp = true; + extensions.Remove("glSGIS_texture_border_clamp"); + } + if (extensions.Contains("gl_SGIS_texture_color_mask")) + { + SGIS_texture_color_mask = true; + extensions.Remove("glSGIS_texture_color_mask"); + } + if (extensions.Contains("gl_SGIS_texture_edge_clamp")) + { + SGIS_texture_edge_clamp = true; + extensions.Remove("glSGIS_texture_edge_clamp"); + } + if (extensions.Contains("gl_SGIS_texture_filter4")) + { + SGIS_texture_filter4 = true; + extensions.Remove("glSGIS_texture_filter4"); + } + if (extensions.Contains("gl_SGIS_texture_lod")) + { + SGIS_texture_lod = true; + extensions.Remove("glSGIS_texture_lod"); + } + if (extensions.Contains("gl_SGIS_texture_select")) + { + SGIS_texture_select = true; + extensions.Remove("glSGIS_texture_select"); + } + if (extensions.Contains("gl_SGIX_async")) + { + SGIX_async = true; + extensions.Remove("glSGIX_async"); + } + if (extensions.Contains("gl_SGIX_async_histogram")) + { + SGIX_async_histogram = true; + extensions.Remove("glSGIX_async_histogram"); + } + if (extensions.Contains("gl_SGIX_async_pixel")) + { + SGIX_async_pixel = true; + extensions.Remove("glSGIX_async_pixel"); + } + if (extensions.Contains("gl_SGIX_blend_alpha_minmax")) + { + SGIX_blend_alpha_minmax = true; + extensions.Remove("glSGIX_blend_alpha_minmax"); + } + if (extensions.Contains("gl_SGIX_calligraphic_fragment")) + { + SGIX_calligraphic_fragment = true; + extensions.Remove("glSGIX_calligraphic_fragment"); + } + if (extensions.Contains("gl_SGIX_clipmap")) + { + SGIX_clipmap = true; + extensions.Remove("glSGIX_clipmap"); + } + if (extensions.Contains("gl_SGIX_convolution_accuracy")) + { + SGIX_convolution_accuracy = true; + extensions.Remove("glSGIX_convolution_accuracy"); + } + if (extensions.Contains("gl_SGIX_depth_pass_instrument")) + { + SGIX_depth_pass_instrument = true; + extensions.Remove("glSGIX_depth_pass_instrument"); + } + if (extensions.Contains("gl_SGIX_depth_texture")) + { + SGIX_depth_texture = true; + extensions.Remove("glSGIX_depth_texture"); + } + if (extensions.Contains("gl_SGIX_flush_raster")) + { + SGIX_flush_raster = true; + extensions.Remove("glSGIX_flush_raster"); + } + if (extensions.Contains("gl_SGIX_fog_offset")) + { + SGIX_fog_offset = true; + extensions.Remove("glSGIX_fog_offset"); + } + if (extensions.Contains("gl_SGIX_fragment_lighting")) + { + SGIX_fragment_lighting = true; + extensions.Remove("glSGIX_fragment_lighting"); + } + if (extensions.Contains("gl_SGIX_framezoom")) + { + SGIX_framezoom = true; + extensions.Remove("glSGIX_framezoom"); + } + if (extensions.Contains("gl_SGIX_igloo_interface")) + { + SGIX_igloo_interface = true; + extensions.Remove("glSGIX_igloo_interface"); + } + if (extensions.Contains("gl_SGIX_instruments")) + { + SGIX_instruments = true; + extensions.Remove("glSGIX_instruments"); + } + if (extensions.Contains("gl_SGIX_interlace")) + { + SGIX_interlace = true; + extensions.Remove("glSGIX_interlace"); + } + if (extensions.Contains("gl_SGIX_ir_instrument1")) + { + SGIX_ir_instrument1 = true; + extensions.Remove("glSGIX_ir_instrument1"); + } + if (extensions.Contains("gl_SGIX_list_priority")) + { + SGIX_list_priority = true; + extensions.Remove("glSGIX_list_priority"); + } + if (extensions.Contains("gl_SGIX_pixel_texture")) + { + SGIX_pixel_texture = true; + extensions.Remove("glSGIX_pixel_texture"); + } + if (extensions.Contains("gl_SGIX_pixel_tiles")) + { + SGIX_pixel_tiles = true; + extensions.Remove("glSGIX_pixel_tiles"); + } + if (extensions.Contains("gl_SGIX_polynomial_ffd")) + { + SGIX_polynomial_ffd = true; + extensions.Remove("glSGIX_polynomial_ffd"); + } + if (extensions.Contains("gl_SGIX_reference_plane")) + { + SGIX_reference_plane = true; + extensions.Remove("glSGIX_reference_plane"); + } + if (extensions.Contains("gl_SGIX_resample")) + { + SGIX_resample = true; + extensions.Remove("glSGIX_resample"); + } + if (extensions.Contains("gl_SGIX_scalebias_hint")) + { + SGIX_scalebias_hint = true; + extensions.Remove("glSGIX_scalebias_hint"); + } + if (extensions.Contains("gl_SGIX_shadow")) + { + SGIX_shadow = true; + extensions.Remove("glSGIX_shadow"); + } + if (extensions.Contains("gl_SGIX_shadow_ambient")) + { + SGIX_shadow_ambient = true; + extensions.Remove("glSGIX_shadow_ambient"); + } + if (extensions.Contains("gl_SGIX_sprite")) + { + SGIX_sprite = true; + extensions.Remove("glSGIX_sprite"); + } + if (extensions.Contains("gl_SGIX_subsample")) + { + SGIX_subsample = true; + extensions.Remove("glSGIX_subsample"); + } + if (extensions.Contains("gl_SGIX_tag_sample_buffer")) + { + SGIX_tag_sample_buffer = true; + extensions.Remove("glSGIX_tag_sample_buffer"); + } + if (extensions.Contains("gl_SGIX_texture_add_env")) + { + SGIX_texture_add_env = true; + extensions.Remove("glSGIX_texture_add_env"); + } + if (extensions.Contains("gl_SGIX_texture_coordinate_clamp")) + { + SGIX_texture_coordinate_clamp = true; + extensions.Remove("glSGIX_texture_coordinate_clamp"); + } + if (extensions.Contains("gl_SGIX_texture_lod_bias")) + { + SGIX_texture_lod_bias = true; + extensions.Remove("glSGIX_texture_lod_bias"); + } + if (extensions.Contains("gl_SGIX_texture_multi_buffer")) + { + SGIX_texture_multi_buffer = true; + extensions.Remove("glSGIX_texture_multi_buffer"); + } + if (extensions.Contains("gl_SGIX_texture_scale_bias")) + { + SGIX_texture_scale_bias = true; + extensions.Remove("glSGIX_texture_scale_bias"); + } + if (extensions.Contains("gl_SGIX_vertex_preclip")) + { + SGIX_vertex_preclip = true; + extensions.Remove("glSGIX_vertex_preclip"); + } + if (extensions.Contains("gl_SGIX_ycrcb")) + { + SGIX_ycrcb = true; + extensions.Remove("glSGIX_ycrcb"); + } + if (extensions.Contains("gl_SGIX_ycrcb_subsample")) + { + SGIX_ycrcb_subsample = true; + extensions.Remove("glSGIX_ycrcb_subsample"); + } + if (extensions.Contains("gl_SGIX_ycrcba")) + { + SGIX_ycrcba = true; + extensions.Remove("glSGIX_ycrcba"); + } + if (extensions.Contains("gl_SGI_color_matrix")) + { + SGI_color_matrix = true; + extensions.Remove("glSGI_color_matrix"); + } + if (extensions.Contains("gl_SGI_color_table")) + { + SGI_color_table = true; + extensions.Remove("glSGI_color_table"); + } + if (extensions.Contains("gl_SGI_texture_color_table")) + { + SGI_texture_color_table = true; + extensions.Remove("glSGI_texture_color_table"); + } + if (extensions.Contains("gl_SUNX_constant_data")) + { + SUNX_constant_data = true; + extensions.Remove("glSUNX_constant_data"); + } + if (extensions.Contains("gl_SUN_convolution_border_modes")) + { + SUN_convolution_border_modes = true; + extensions.Remove("glSUN_convolution_border_modes"); + } + if (extensions.Contains("gl_SUN_global_alpha")) + { + SUN_global_alpha = true; + extensions.Remove("glSUN_global_alpha"); + } + if (extensions.Contains("gl_SUN_mesh_array")) + { + SUN_mesh_array = true; + extensions.Remove("glSUN_mesh_array"); + } + if (extensions.Contains("gl_SUN_slice_accum")) + { + SUN_slice_accum = true; + extensions.Remove("glSUN_slice_accum"); + } + if (extensions.Contains("gl_SUN_triangle_list")) + { + SUN_triangle_list = true; + extensions.Remove("glSUN_triangle_list"); + } + if (extensions.Contains("gl_SUN_vertex")) + { + SUN_vertex = true; + extensions.Remove("glSUN_vertex"); + } + if (extensions.Contains("gl_WIN_phong_shading")) + { + WIN_phong_shading = true; + extensions.Remove("glWIN_phong_shading"); + } + if (extensions.Contains("gl_WIN_specular_fog")) + { + WIN_specular_fog = true; + extensions.Remove("glWIN_specular_fog"); + } + + #endregion checkGLextensions + } + + internal static void CheckCoreVersion(int majorVersion, int minorVersion) + { + if (majorVersion < 3) { + throw new InvalidOperationException( + "StgSharp does not support OpenGL immediate mode."); + } + + if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 0))) + { + core10 = true; + } else + { + goto log; + } + + if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 1))) + { + core11 = true; + } else + { + goto log; + } + + if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 2))) + { + core12 = true; + } else + { + goto log; + } + + if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 3))) + { + core13 = true; + } else + { + goto log; + } + + if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 4))) + { + core14 = true; + } else + { + goto log; + } + + if ((majorVersion >= 1) || ((majorVersion == 1) && (minorVersion == 5))) + { + core15 = true; + } else + { + goto log; + } + + if ((majorVersion >= 2) || ((majorVersion == 2) && (minorVersion == 0))) + { + core20 = true; + } else + { + goto log; + } + + if ((majorVersion >= 2) || ((majorVersion == 2) && (minorVersion == 1))) + { + core21 = true; + } else + { + goto log; + } + + if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 0))) + { + core30 = true; + } else + { + goto log; + } + + if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 1))) + { + core31 = true; + } else + { + goto log; + } + + if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 2))) + { + core32 = true; + } else + { + goto log; + } + + if ((majorVersion >= 3) || ((majorVersion == 3) && (minorVersion == 3))) + { + core33 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 0))) + { + core40 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 1))) + { + core41 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 2))) + { + core42 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 3))) + { + core43 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 4))) + { + core44 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 5))) + { + core45 = true; + } else + { + goto log; + } + + if ((majorVersion >= 4) || ((majorVersion == 4) && (minorVersion == 6))) + { + core46 = true; + } else + { + goto log; + } + + log: + { + DefaultLog.InternalWriteLog("Find core OpenGL version.", LogType.Info); + return; + } + } + + internal static unsafe string GetExtensions(this OpenglContext context) + { + if (context.glGetString == null) { + return string.Empty; + } + return Marshal.PtrToStringAnsi(context.glGetString(glExtension))!; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static T internalLoadAPI(IntPtr ptr) where T: Delegate + { + try + { + if (ptr == IntPtr.Zero) { + return null; + } + T func = Marshal.GetDelegateForFunctionPointer(ptr); + return func; + } + catch (Exception ex) + { + DefaultLog.InternalWriteLog( + $"{$"Failed to convert the api {typeof(T).Name}.\n"}{ex.Message}", + LogType.Warning); + return default; + } + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/glConst.cs b/StgSharp.Common/Graphics/OpenGL/glConst.cs new file mode 100644 index 00000000..d2719020 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glConst.cs @@ -0,0 +1,4563 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glConst" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Drawing; + +namespace StgSharp.Graphics.OpenGL +{ + // rename types in style of glConst + + public static unsafe class glConst + { + + #region glad + + public const int _1PASS_EXT = 0x80A1; + public const int _1PASS_SGIS = 0x80A1; + public const int _2PASS_0_EXT = 0x80A2; + public const int _2PASS_0_SGIS = 0x80A2; + public const int _2PASS_1_EXT = 0x80A3; + public const int _2PASS_1_SGIS = 0x80A3; + public const int _2X_BIT_ATI = 0x00000001; + public const int _422_AVERAGE_EXT = 0x80CE; + public const int _422_EXT = 0x80CC; + public const int _422_REV_AVERAGE_EXT = 0x80CF; + public const int _422_REV_EXT = 0x80CD; + public const int _4PASS_0_EXT = 0x80A4; + public const int _4PASS_0_SGIS = 0x80A4; + public const int _4PASS_1_EXT = 0x80A5; + public const int _4PASS_1_SGIS = 0x80A5; + public const int _4PASS_2_EXT = 0x80A6; + public const int _4PASS_2_SGIS = 0x80A6; + public const int _4PASS_3_EXT = 0x80A7; + public const int _4PASS_3_SGIS = 0x80A7; + public const int _4X_BIT_ATI = 0x00000002; + public const int _8X_BIT_ATI = 0x00000004; + public const int ABGR_EXT = 0x8000; + public const int ACCUM_ADJACENT_PAIRS_NV = 0x90AD; + public const int ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9; + public const int ACTIVE_ATTRIBUTES = 0x8B89; + public const int ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A; + public const int ACTIVE_PROGRAM = 0x8259; + public const int ACTIVE_PROGRAM_EXT = 0x8B8D; + public const int ACTIVE_RESOURCES = 0x92F5; + public const int ACTIVE_STENCIL_FACE_EXT = 0x8911; + public const int ACTIVE_SUBROUTINES = 0x8DE5; + public const int ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48; + public const int ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6; + public const int ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47; + public const int ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49; + public const int ACTIVE_TEXTURE = 0x84E0; + public const int ACTIVE_TEXTURE_ARB = 0x84E0; + public const int ACTIVE_UNIFORMS = 0x8B86; + public const int ACTIVE_UNIFORM_BLOCKS = 0x8A36; + public const int ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35; + public const int ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87; + public const int ACTIVE_VARIABLES = 0x9305; + public const int ACTIVE_VARYINGS_NV = 0x8C81; + public const int ACTIVE_VARYING_MAX_LENGTH_NV = 0x8C82; + public const int ACTIVE_VERTEX_UNITS_ARB = 0x86A5; + public const int ADD_ATI = 0x8963; + public const int ADD_SIGNED_ARB = 0x8574; + public const int ADD_SIGNED_EXT = 0x8574; + public const int ADJACENT_PAIRS_NV = 0x90AE; + public const int AFFINE_2D_NV = 0x9092; + public const int AFFINE_3D_NV = 0x9094; + public const int ALIASED_LINE_WIDTH_RANGE = 0x846E; + public const int ALLOW_DRAW_FRG_HINT_PGI = 0x1A210; + public const int ALLOW_DRAW_MEM_HINT_PGI = 0x1A211; + public const int ALLOW_DRAW_OBJ_HINT_PGI = 0x1A20E; + public const int ALLOW_DRAW_WIN_HINT_PGI = 0x1A20F; + public const uint ALL_BARRIER_BITS = 0xFFFFFFFF; + public const uint ALL_BARRIER_BITS_EXT = 0xFFFFFFFF; + public const int ALL_COMPLETED_NV = 0x84F2; + public const uint ALL_PIXELS_AMD = 0xFFFFFFFF; + public const uint ALL_SHADER_BITS = 0xFFFFFFFF; + public const int ALL_STATIC_DATA_IBM = 103060; + public const int ALPHA = 0x1906; + public const int ALPHA12_EXT = 0x803D; + public const int ALPHA16F_ARB = 0x881C; + public const int ALPHA16F_EXT = 0x881C; + public const int ALPHA16I_EXT = 0x8D8A; + public const int ALPHA16UI_EXT = 0x8D78; + public const int ALPHA16_EXT = 0x803E; + public const int ALPHA16_SNORM = 0x9018; + public const int ALPHA32F_ARB = 0x8816; + public const int ALPHA32F_EXT = 0x8816; + public const int ALPHA32I_EXT = 0x8D84; + public const int ALPHA32UI_EXT = 0x8D72; + public const int ALPHA4_EXT = 0x803B; + public const int ALPHA8I_EXT = 0x8D90; + public const int ALPHA8UI_EXT = 0x8D7E; + public const int ALPHA8_EXT = 0x803C; + public const int ALPHA8_SNORM = 0x9014; + public const int ALPHA_FLOAT16_APPLE = 0x881C; + public const int ALPHA_FLOAT16_ATI = 0x881C; + public const int ALPHA_FLOAT32_APPLE = 0x8816; + public const int ALPHA_FLOAT32_ATI = 0x8816; + public const int ALPHA_INTEGER_EXT = 0x8D97; + public const int ALPHA_MAX_CLAMP_INGR = 0x8567; + public const int ALPHA_MAX_SGIX = 0x8321; + public const int ALPHA_MIN_CLAMP_INGR = 0x8563; + public const int ALPHA_MIN_SGIX = 0x8320; + public const int ALPHA_REF_COMMAND_NV = 0x000F; + public const int ALPHA_SNORM = 0x9010; + public const int ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV = 0x934D; + public const int ALPHA_TO_COVERAGE_DITHER_DISABLE_NV = 0x934F; + public const int ALPHA_TO_COVERAGE_DITHER_ENABLE_NV = 0x934E; + public const int ALPHA_TO_COVERAGE_DITHER_MODE_NV = 0x92BF; + public const int ALREADY_SIGNALED = 0x911A; + public const int ALWAYS = 0x0207; + public const int ALWAYS_FAST_HINT_PGI = 0x1A20C; + public const int ALWAYS_SOFT_HINT_PGI = 0x1A20D; + public const int AND = 0x1501; + public const int AND_INVERTED = 0x1504; + public const int AND_REVERSE = 0x1502; + public const int ANY_SAMPLES_PASSED = 0x8C2F; + public const int ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A; + public const int ARC_TO_NV = 0xFE; + public const int ARRAY_BUFFER = 0x8892; + public const int ARRAY_BUFFER_ARB = 0x8892; + public const int ARRAY_BUFFER_BINDING = 0x8894; + public const int ARRAY_BUFFER_BINDING_ARB = 0x8894; + public const int ARRAY_ELEMENT_LOCK_COUNT_EXT = 0x81A9; + public const int ARRAY_ELEMENT_LOCK_FIRST_EXT = 0x81A8; + public const int ARRAY_OBJECT_BUFFER_ATI = 0x8766; + public const int ARRAY_OBJECT_OFFSET_ATI = 0x8767; + public const int ARRAY_SIZE = 0x92FB; + public const int ARRAY_STRIDE = 0x92FE; + public const int ASYNC_DRAW_PIXELS_SGIX = 0x835D; + public const int ASYNC_HISTOGRAM_SGIX = 0x832C; + public const int ASYNC_MARKER_SGIX = 0x8329; + public const int ASYNC_READ_PIXELS_SGIX = 0x835E; + public const int ASYNC_TEX_IMAGE_SGIX = 0x835C; + public const int ATOMIC_COUNTER_BARRIER_BIT = 0x00001000; + public const int ATOMIC_COUNTER_BARRIER_BIT_EXT = 0x00001000; + public const int ATOMIC_COUNTER_BUFFER = 0x92C0; + public const int ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5; + public const int ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6; + public const int ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1; + public const int ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4; + public const int ATOMIC_COUNTER_BUFFER_INDEX = 0x9301; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x90ED; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV = 0x959E; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV = 0x959F; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9; + public const int ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7; + public const int ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3; + public const int ATOMIC_COUNTER_BUFFER_START = 0x92C2; + public const int ATTACHED_MEMORY_OBJECT_NV = 0x95A4; + public const int ATTACHED_MEMORY_OFFSET_NV = 0x95A5; + public const int ATTACHED_SHADERS = 0x8B85; + public const int ATTENUATION_EXT = 0x834D; + public const int ATTRIBUTE_ADDRESS_COMMAND_NV = 0x0009; + public const int ATTRIB_ARRAY_POINTER_NV = 0x8645; + public const int ATTRIB_ARRAY_SIZE_NV = 0x8623; + public const int ATTRIB_ARRAY_STRIDE_NV = 0x8624; + public const int ATTRIB_ARRAY_TYPE_NV = 0x8625; + public const int AUTO_GENERATE_MIPMAP = 0x8295; + public const int AUX_DEPTH_STENCIL_APPLE = 0x8A14; + public const int AVERAGE_EXT = 0x8335; + public const int AVERAGE_HP = 0x8160; + public const int BACK = 0x0405; + public const int BACK_LEFT = 0x0402; + public const int BACK_NORMALS_HINT_PGI = 0x1A223; + public const int BACK_PRIMARY_COLOR_NV = 0x8C77; + public const int BACK_RIGHT = 0x0403; + public const int BACK_SECONDARY_COLOR_NV = 0x8C78; + public const int BEVEL_NV = 0x90A6; + public const int BGR = 0x80E0; + public const int BGRA = 0x80E1; + public const int BGRA8_EXT = 0x93A1; + public const int BGRA_EXT = 0x80E1; + public const int BGRA_INTEGER = 0x8D9B; + public const int BGRA_INTEGER_EXT = 0x8D9B; + public const int BGR_EXT = 0x80E0; + public const int BGR_INTEGER = 0x8D9A; + public const int BGR_INTEGER_EXT = 0x8D9A; + public const int BIAS_BIT_ATI = 0x00000008; + public const int BIAS_BY_NEGATIVE_ONE_HALF_NV = 0x8541; + public const int BINORMAL_ARRAY_EXT = 0x843A; + public const int BINORMAL_ARRAY_POINTER_EXT = 0x8443; + public const int BINORMAL_ARRAY_STRIDE_EXT = 0x8441; + public const int BINORMAL_ARRAY_TYPE_EXT = 0x8440; + public const int BLACKHOLE_RENDER_INTEL = 0x83FC; + public const int BLEND = 0x0BE2; + public const int BLEND_ADVANCED_COHERENT_KHR = 0x9285; + public const int BLEND_ADVANCED_COHERENT_NV = 0x9285; + public const int BLEND_COLOR = 0x8005; + public const int BLEND_COLOR_COMMAND_NV = 0x000B; + public const int BLEND_COLOR_EXT = 0x8005; + public const int BLEND_DST = 0x0BE0; + public const int BLEND_DST_ALPHA = 0x80CA; + public const int BLEND_DST_ALPHA_EXT = 0x80CA; + public const int BLEND_DST_RGB = 0x80C8; + public const int BLEND_DST_RGB_EXT = 0x80C8; + public const int BLEND_EQUATION = 0x8009; + public const int BLEND_EQUATION_ALPHA = 0x883D; + public const int BLEND_EQUATION_ALPHA_EXT = 0x883D; + public const int BLEND_EQUATION_EXT = 0x8009; + public const int BLEND_EQUATION_RGB = 0x8009; + public const int BLEND_EQUATION_RGB_EXT = 0x8009; + public const int BLEND_OVERLAP_NV = 0x9281; + public const int BLEND_PREMULTIPLIED_SRC_NV = 0x9280; + public const int BLEND_SRC = 0x0BE1; + public const int BLEND_SRC_ALPHA = 0x80CB; + public const int BLEND_SRC_ALPHA_EXT = 0x80CB; + public const int BLEND_SRC_RGB = 0x80C9; + public const int BLEND_SRC_RGB_EXT = 0x80C9; + public const int BLOCK_INDEX = 0x92FD; + public const int BLUE = 0x1905; + public const int BLUE_BIT_ATI = 0x00000004; + public const int BLUE_INTEGER = 0x8D96; + public const int BLUE_INTEGER_EXT = 0x8D96; + public const int BLUE_MAX_CLAMP_INGR = 0x8566; + public const int BLUE_MIN_CLAMP_INGR = 0x8562; + public const int BLUE_NV = 0x1905; + public const int BOLD_BIT_NV = 0x01; + public const int BOOL = 0x8B56; + public const int BOOL_ARB = 0x8B56; + public const int BOOL_VEC2 = 0x8B57; + public const int BOOL_VEC2_ARB = 0x8B57; + public const int BOOL_VEC3 = 0x8B58; + public const int BOOL_VEC3_ARB = 0x8B58; + public const int BOOL_VEC4 = 0x8B59; + public const int BOOL_VEC4_ARB = 0x8B59; + public const int BOUNDING_BOX_NV = 0x908D; + public const int BOUNDING_BOX_OF_BOUNDING_BOXES_NV = 0x909C; + public const int BUFFER = 0x82E0; + public const int BUFFER_ACCESS = 0x88BB; + public const int BUFFER_ACCESS_ARB = 0x88BB; + public const int BUFFER_ACCESS_FLAGS = 0x911F; + public const int BUFFER_BINDING = 0x9302; + public const int BUFFER_DATA_SIZE = 0x9303; + public const int BUFFER_FLUSHING_UNMAP_APPLE = 0x8A13; + public const int BUFFER_GPU_ADDRESS_NV = 0x8F1D; + public const int BUFFER_IMMUTABLE_STORAGE = 0x821F; + public const int BUFFER_MAPPED = 0x88BC; + public const int BUFFER_MAPPED_ARB = 0x88BC; + public const int BUFFER_MAP_LENGTH = 0x9120; + public const int BUFFER_MAP_OFFSET = 0x9121; + public const int BUFFER_MAP_POINTER = 0x88BD; + public const int BUFFER_MAP_POINTER_ARB = 0x88BD; + public const int BUFFER_OBJECT_APPLE = 0x85B3; + public const int BUFFER_OBJECT_EXT = 0x9151; + public const int BUFFER_SERIALIZED_MODIFY_APPLE = 0x8A12; + public const int BUFFER_SIZE = 0x8764; + public const int BUFFER_SIZE_ARB = 0x8764; + public const int BUFFER_STORAGE_FLAGS = 0x8220; + public const int BUFFER_UPDATE_BARRIER_BIT = 0x00000200; + public const int BUFFER_UPDATE_BARRIER_BIT_EXT = 0x00000200; + public const int BUFFER_USAGE = 0x8765; + public const int BUFFER_USAGE_ARB = 0x8765; + public const int BUFFER_VARIABLE = 0x92E5; + public const int BUMP_ENVMAP_ATI = 0x877B; + public const int BUMP_NUM_TEX_UNITS_ATI = 0x8777; + public const int BUMP_ROT_MATRIX_ATI = 0x8775; + public const int BUMP_ROT_MATRIX_SIZE_ATI = 0x8776; + public const int BUMP_TARGET_ATI = 0x877C; + public const int BUMP_TEX_UNITS_ATI = 0x8778; + public const int BYTE = 0x1400; + public const int CALLIGRAPHIC_FRAGMENT_SGIX = 0x8183; + public const int CAVEAT_SUPPORT = 0x82B8; + public const int CCW = 0x0901; + public const int CIRCULAR_CCW_ARC_TO_NV = 0xF8; + public const int CIRCULAR_CW_ARC_TO_NV = 0xFA; + public const int CIRCULAR_TANGENT_ARC_TO_NV = 0xFC; + public const int CLAMP_FRAGMENT_COLOR_ARB = 0x891B; + public const int CLAMP_READ_COLOR = 0x891C; + public const int CLAMP_READ_COLOR_ARB = 0x891C; + public const int CLAMP_TO_BORDER = 0x812D; + public const int CLAMP_TO_BORDER_ARB = 0x812D; + public const int CLAMP_TO_BORDER_SGIS = 0x812D; + public const int CLAMP_TO_EDGE = 0x812F; + public const int CLAMP_TO_EDGE_SGIS = 0x812F; + public const int CLAMP_VERTEX_COLOR_ARB = 0x891A; + public const int CLEAR = 0x1500; + public const int CLEAR_BUFFER = 0x82B4; + public const int CLEAR_TEXTURE = 0x9365; + public const int CLIENT_ACTIVE_TEXTURE_ARB = 0x84E1; + public const int CLIENT_MAPPED_BUFFER_BARRIER_BIT = 0x00004000; + public const int CLIENT_STORAGE_BIT = 0x0200; + public const int CLIPPING_INPUT_PRIMITIVES = 0x82F6; + public const int CLIPPING_INPUT_PRIMITIVES_ARB = 0x82F6; + public const int CLIPPING_OUTPUT_PRIMITIVES = 0x82F7; + public const int CLIPPING_OUTPUT_PRIMITIVES_ARB = 0x82F7; + public const int CLIP_DEPTH_MODE = 0x935D; + public const int CLIP_DISTANCE0 = 0x3000; + public const int CLIP_DISTANCE1 = 0x3001; + public const int CLIP_DISTANCE2 = 0x3002; + public const int CLIP_DISTANCE3 = 0x3003; + public const int CLIP_DISTANCE4 = 0x3004; + public const int CLIP_DISTANCE5 = 0x3005; + public const int CLIP_DISTANCE6 = 0x3006; + public const int CLIP_DISTANCE7 = 0x3007; + public const int CLIP_DISTANCE_NV = 0x8C7A; + public const int CLIP_FAR_HINT_PGI = 0x1A221; + public const int CLIP_NEAR_HINT_PGI = 0x1A220; + public const int CLIP_ORIGIN = 0x935C; + public const int CLIP_VOLUME_CLIPPING_HINT_EXT = 0x80F0; + public const int CLOSE_PATH_NV = 0x00; + public const int CMYKA_EXT = 0x800D; + public const int CMYK_EXT = 0x800C; + public const int CND0_ATI = 0x896B; + public const int CND_ATI = 0x896A; + public const int COLOR = 0x1800; + public const int COLOR3_BIT_PGI = 0x00010000; + public const int COLOR4_BIT_PGI = 0x00020000; + public const int COLORBURN_KHR = 0x929A; + public const int COLORBURN_NV = 0x929A; + public const int COLORDODGE_KHR = 0x9299; + public const int COLORDODGE_NV = 0x9299; + public const int COLOR_ALPHA_PAIRING_ATI = 0x8975; + public const int COLOR_ARRAY_ADDRESS_NV = 0x8F23; + public const int COLOR_ARRAY_BUFFER_BINDING_ARB = 0x8898; + public const int COLOR_ARRAY_COUNT_EXT = 0x8084; + public const int COLOR_ARRAY_EXT = 0x8076; + public const int COLOR_ARRAY_LENGTH_NV = 0x8F2D; + public const int COLOR_ARRAY_LIST_IBM = 103072; + public const int COLOR_ARRAY_LIST_STRIDE_IBM = 103082; + public const int COLOR_ARRAY_PARALLEL_POINTERS_INTEL = 0x83F7; + public const int COLOR_ARRAY_POINTER_EXT = 0x8090; + public const int COLOR_ARRAY_SIZE_EXT = 0x8081; + public const int COLOR_ARRAY_STRIDE_EXT = 0x8083; + public const int COLOR_ARRAY_TYPE_EXT = 0x8082; + public const int COLOR_ATTACHMENT0 = 0x8CE0; + public const int COLOR_ATTACHMENT0_EXT = 0x8CE0; + public const int COLOR_ATTACHMENT1 = 0x8CE1; + public const int COLOR_ATTACHMENT10 = 0x8CEA; + public const int COLOR_ATTACHMENT10_EXT = 0x8CEA; + public const int COLOR_ATTACHMENT11 = 0x8CEB; + public const int COLOR_ATTACHMENT11_EXT = 0x8CEB; + public const int COLOR_ATTACHMENT12 = 0x8CEC; + public const int COLOR_ATTACHMENT12_EXT = 0x8CEC; + public const int COLOR_ATTACHMENT13 = 0x8CED; + public const int COLOR_ATTACHMENT13_EXT = 0x8CED; + public const int COLOR_ATTACHMENT14 = 0x8CEE; + public const int COLOR_ATTACHMENT14_EXT = 0x8CEE; + public const int COLOR_ATTACHMENT15 = 0x8CEF; + public const int COLOR_ATTACHMENT15_EXT = 0x8CEF; + public const int COLOR_ATTACHMENT16 = 0x8CF0; + public const int COLOR_ATTACHMENT17 = 0x8CF1; + public const int COLOR_ATTACHMENT18 = 0x8CF2; + public const int COLOR_ATTACHMENT19 = 0x8CF3; + public const int COLOR_ATTACHMENT1_EXT = 0x8CE1; + public const int COLOR_ATTACHMENT2 = 0x8CE2; + public const int COLOR_ATTACHMENT20 = 0x8CF4; + public const int COLOR_ATTACHMENT21 = 0x8CF5; + public const int COLOR_ATTACHMENT22 = 0x8CF6; + public const int COLOR_ATTACHMENT23 = 0x8CF7; + public const int COLOR_ATTACHMENT24 = 0x8CF8; + public const int COLOR_ATTACHMENT25 = 0x8CF9; + public const int COLOR_ATTACHMENT26 = 0x8CFA; + public const int COLOR_ATTACHMENT27 = 0x8CFB; + public const int COLOR_ATTACHMENT28 = 0x8CFC; + public const int COLOR_ATTACHMENT29 = 0x8CFD; + public const int COLOR_ATTACHMENT2_EXT = 0x8CE2; + public const int COLOR_ATTACHMENT3 = 0x8CE3; + public const int COLOR_ATTACHMENT30 = 0x8CFE; + public const int COLOR_ATTACHMENT31 = 0x8CFF; + public const int COLOR_ATTACHMENT3_EXT = 0x8CE3; + public const int COLOR_ATTACHMENT4 = 0x8CE4; + public const int COLOR_ATTACHMENT4_EXT = 0x8CE4; + public const int COLOR_ATTACHMENT5 = 0x8CE5; + public const int COLOR_ATTACHMENT5_EXT = 0x8CE5; + public const int COLOR_ATTACHMENT6 = 0x8CE6; + public const int COLOR_ATTACHMENT6_EXT = 0x8CE6; + public const int COLOR_ATTACHMENT7 = 0x8CE7; + public const int COLOR_ATTACHMENT7_EXT = 0x8CE7; + public const int COLOR_ATTACHMENT8 = 0x8CE8; + public const int COLOR_ATTACHMENT8_EXT = 0x8CE8; + public const int COLOR_ATTACHMENT9 = 0x8CE9; + public const int COLOR_ATTACHMENT9_EXT = 0x8CE9; + public const int COLOR_BUFFER_BIT = 0x00004000; + public const int COLOR_CLEAR_UNCLAMPED_VALUE_ATI = 0x8835; + public const int COLOR_CLEAR_VALUE = 0x0C22; + public const int COLOR_COMPONENTS = 0x8283; + public const int COLOR_ENCODING = 0x8296; + public const int COLOR_FLOAT_APPLE = 0x8A0F; + public const int COLOR_INDEX12_EXT = 0x80E6; + public const int COLOR_INDEX16_EXT = 0x80E7; + public const int COLOR_INDEX1_EXT = 0x80E2; + public const int COLOR_INDEX2_EXT = 0x80E3; + public const int COLOR_INDEX4_EXT = 0x80E4; + public const int COLOR_INDEX8_EXT = 0x80E5; + public const int COLOR_LOGIC_OP = 0x0BF2; + public const int COLOR_MATRIX_SGI = 0x80B1; + public const int COLOR_MATRIX_STACK_DEPTH_SGI = 0x80B2; + public const int COLOR_RENDERABLE = 0x8286; + public const int COLOR_SAMPLES_NV = 0x8E20; + public const int COLOR_SUM_ARB = 0x8458; + public const int COLOR_SUM_CLAMP_NV = 0x854F; + public const int COLOR_SUM_EXT = 0x8458; + public const int COLOR_TABLE_ALPHA_SIZE_SGI = 0x80DD; + public const int COLOR_TABLE_BIAS_SGI = 0x80D7; + public const int COLOR_TABLE_BLUE_SIZE_SGI = 0x80DC; + public const int COLOR_TABLE_FORMAT_SGI = 0x80D8; + public const int COLOR_TABLE_GREEN_SIZE_SGI = 0x80DB; + public const int COLOR_TABLE_INTENSITY_SIZE_SGI = 0x80DF; + public const int COLOR_TABLE_LUMINANCE_SIZE_SGI = 0x80DE; + public const int COLOR_TABLE_RED_SIZE_SGI = 0x80DA; + public const int COLOR_TABLE_SCALE_SGI = 0x80D6; + public const int COLOR_TABLE_SGI = 0x80D0; + public const int COLOR_TABLE_WIDTH_SGI = 0x80D9; + public const int COLOR_WRITEMASK = 0x0C23; + public const int COMBINE4_NV = 0x8503; + public const int COMBINER0_NV = 0x8550; + public const int COMBINER1_NV = 0x8551; + public const int COMBINER2_NV = 0x8552; + public const int COMBINER3_NV = 0x8553; + public const int COMBINER4_NV = 0x8554; + public const int COMBINER5_NV = 0x8555; + public const int COMBINER6_NV = 0x8556; + public const int COMBINER7_NV = 0x8557; + public const int COMBINER_AB_DOT_PRODUCT_NV = 0x8545; + public const int COMBINER_AB_OUTPUT_NV = 0x854A; + public const int COMBINER_BIAS_NV = 0x8549; + public const int COMBINER_CD_DOT_PRODUCT_NV = 0x8546; + public const int COMBINER_CD_OUTPUT_NV = 0x854B; + public const int COMBINER_COMPONENT_USAGE_NV = 0x8544; + public const int COMBINER_INPUT_NV = 0x8542; + public const int COMBINER_MAPPING_NV = 0x8543; + public const int COMBINER_MUX_SUM_NV = 0x8547; + public const int COMBINER_SCALE_NV = 0x8548; + public const int COMBINER_SUM_OUTPUT_NV = 0x854C; + public const int COMBINE_ALPHA_ARB = 0x8572; + public const int COMBINE_ALPHA_EXT = 0x8572; + public const int COMBINE_ARB = 0x8570; + public const int COMBINE_EXT = 0x8570; + public const int COMBINE_RGB_ARB = 0x8571; + public const int COMBINE_RGB_EXT = 0x8571; + public const int COMMAND_BARRIER_BIT = 0x00000040; + public const int COMMAND_BARRIER_BIT_EXT = 0x00000040; + public const int COMPARE_REF_DEPTH_TO_TEXTURE_EXT = 0x884E; + public const int COMPARE_REF_TO_TEXTURE = 0x884E; + public const int COMPARE_R_TO_TEXTURE_ARB = 0x884E; + public const int COMPATIBLE_SUBROUTINES = 0x8E4B; + public const int COMPILE_STATUS = 0x8B81; + public const int COMPLETION_STATUS_ARB = 0x91B1; + public const int COMPLETION_STATUS_KHR = 0x91B1; + public const int COMPRESSED_ALPHA_ARB = 0x84E9; + public const int COMPRESSED_INTENSITY_ARB = 0x84EC; + public const int COMPRESSED_LUMINANCE_ALPHA_ARB = 0x84EB; + public const int COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT = 0x8C72; + public const int COMPRESSED_LUMINANCE_ARB = 0x84EA; + public const int COMPRESSED_LUMINANCE_LATC1_EXT = 0x8C70; + public const int COMPRESSED_R11_EAC = 0x9270; + public const int COMPRESSED_RED = 0x8225; + public const int COMPRESSED_RED_GREEN_RGTC2_EXT = 0x8DBD; + public const int COMPRESSED_RED_RGTC1 = 0x8DBB; + public const int COMPRESSED_RED_RGTC1_EXT = 0x8DBB; + public const int COMPRESSED_RG = 0x8226; + public const int COMPRESSED_RG11_EAC = 0x9272; + public const int COMPRESSED_RGB = 0x84ED; + public const int COMPRESSED_RGB8_ETC2 = 0x9274; + public const int COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276; + public const int COMPRESSED_RGBA = 0x84EE; + public const int COMPRESSED_RGBA8_ETC2_EAC = 0x9278; + public const int COMPRESSED_RGBA_ARB = 0x84EE; + public const int COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93BB; + public const int COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93B8; + public const int COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93B9; + public const int COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93BA; + public const int COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93BC; + public const int COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93BD; + public const int COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0; + public const int COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1; + public const int COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2; + public const int COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93B3; + public const int COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93B4; + public const int COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93B5; + public const int COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93B6; + public const int COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93B7; + public const int COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C; + public const int COMPRESSED_RGBA_BPTC_UNORM_ARB = 0x8E8C; + public const int COMPRESSED_RGBA_FXT1_3DFX = 0x86B1; + public const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1; + public const int COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2; + public const int COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3; + public const int COMPRESSED_RGB_ARB = 0x84ED; + public const int COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E; + public const int COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB = 0x8E8E; + public const int COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F; + public const int COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB = 0x8E8F; + public const int COMPRESSED_RGB_FXT1_3DFX = 0x86B0; + public const int COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0; + public const int COMPRESSED_RG_RGTC2 = 0x8DBD; + public const int COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT = 0x8C73; + public const int COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT = 0x8C71; + public const int COMPRESSED_SIGNED_R11_EAC = 0x9271; + public const int COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT = 0x8DBE; + public const int COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC; + public const int COMPRESSED_SIGNED_RED_RGTC1_EXT = 0x8DBC; + public const int COMPRESSED_SIGNED_RG11_EAC = 0x9273; + public const int COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE; + public const int COMPRESSED_SLUMINANCE_ALPHA_EXT = 0x8C4B; + public const int COMPRESSED_SLUMINANCE_EXT = 0x8C4A; + public const int COMPRESSED_SRGB = 0x8C48; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93DB; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93D8; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93D9; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93DA; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93DC; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93DD; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93D1; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93D2; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93D3; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93D4; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93D5; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93D6; + public const int COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93D7; + public const int COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279; + public const int COMPRESSED_SRGB8_ETC2 = 0x9275; + public const int COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277; + public const int COMPRESSED_SRGB_ALPHA = 0x8C49; + public const int COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D; + public const int COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB = 0x8E8D; + public const int COMPRESSED_SRGB_ALPHA_EXT = 0x8C49; + public const int COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8C4D; + public const int COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E; + public const int COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F; + public const int COMPRESSED_SRGB_EXT = 0x8C48; + public const int COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C; + public const int COMPRESSED_TEXTURE_FORMATS = 0x86A3; + public const int COMPRESSED_TEXTURE_FORMATS_ARB = 0x86A3; + public const int COMPUTE_PROGRAM_NV = 0x90FB; + public const int COMPUTE_PROGRAM_PARAMETER_BUFFER_NV = 0x90FC; + public const int COMPUTE_SHADER = 0x91B9; + public const int COMPUTE_SHADER_BIT = 0x00000020; + public const int COMPUTE_SHADER_INVOCATIONS = 0x82F5; + public const int COMPUTE_SHADER_INVOCATIONS_ARB = 0x82F5; + public const int COMPUTE_SUBROUTINE = 0x92ED; + public const int COMPUTE_SUBROUTINE_UNIFORM = 0x92F3; + public const int COMPUTE_TEXTURE = 0x82A0; + public const int COMPUTE_WORK_GROUP_SIZE = 0x8267; + public const int COMP_BIT_ATI = 0x00000002; + public const int CONDITION_SATISFIED = 0x911C; + public const int CONFORMANT_NV = 0x9374; + public const int CONIC_CURVE_TO_NV = 0x1A; + public const int CONJOINT_NV = 0x9284; + public const int CONSERVATIVE_RASTERIZATION_INTEL = 0x83FE; + public const int CONSERVATIVE_RASTERIZATION_NV = 0x9346; + public const int CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV = 0x937B; + public const int CONSERVATIVE_RASTER_DILATE_NV = 0x9379; + public const int CONSERVATIVE_RASTER_DILATE_RANGE_NV = 0x937A; + public const int CONSERVATIVE_RASTER_MODE_NV = 0x954D; + public const int CONSERVATIVE_RASTER_MODE_POST_SNAP_NV = 0x954E; + public const int CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV = 0x9550; + public const int CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV = 0x954F; + public const int CONSERVE_MEMORY_HINT_PGI = 0x1A1FD; + public const int CONSTANT_ALPHA = 0x8003; + public const int CONSTANT_ALPHA_EXT = 0x8003; + public const int CONSTANT_ARB = 0x8576; + public const int CONSTANT_BORDER_HP = 0x8151; + public const int CONSTANT_COLOR = 0x8001; + public const int CONSTANT_COLOR0_NV = 0x852A; + public const int CONSTANT_COLOR1_NV = 0x852B; + public const int CONSTANT_COLOR_EXT = 0x8001; + public const int CONSTANT_EXT = 0x8576; + public const int CONST_EYE_NV = 0x86E5; + public const int CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002; + public const int CONTEXT_CORE_PROFILE_BIT = 0x00000001; + public const int CONTEXT_FLAGS = 0x821E; + public const int CONTEXT_FLAG_DEBUG_BIT = 0x00000002; + public const int CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001; + public const int CONTEXT_FLAG_NO_ERROR_BIT = 0x00000008; + public const int CONTEXT_FLAG_NO_ERROR_BIT_KHR = 0x00000008; + public const int CONTEXT_FLAG_ROBUST_ACCESS_BIT = 0x00000004; + public const int CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB = 0x00000004; + public const int CONTEXT_LOST = 0x0507; + public const int CONTEXT_PROFILE_MASK = 0x9126; + public const int CONTEXT_RELEASE_BEHAVIOR = 0x82FB; + public const int CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x82FC; + public const int CONTEXT_ROBUST_ACCESS = 0x90F3; + public const int CONTINUOUS_AMD = 0x9007; + public const int CONTRAST_NV = 0x92A1; + public const int CONVEX_HULL_NV = 0x908B; + public const int CONVOLUTION_1D_EXT = 0x8010; + public const int CONVOLUTION_2D_EXT = 0x8011; + public const int CONVOLUTION_BORDER_COLOR_HP = 0x8154; + public const int CONVOLUTION_BORDER_MODE_EXT = 0x8013; + public const int CONVOLUTION_FILTER_BIAS_EXT = 0x8015; + public const int CONVOLUTION_FILTER_SCALE_EXT = 0x8014; + public const int CONVOLUTION_FORMAT_EXT = 0x8017; + public const int CONVOLUTION_HEIGHT_EXT = 0x8019; + public const int CONVOLUTION_HINT_SGIX = 0x8316; + public const int CONVOLUTION_WIDTH_EXT = 0x8018; + public const int CON_0_ATI = 0x8941; + public const int CON_10_ATI = 0x894B; + public const int CON_11_ATI = 0x894C; + public const int CON_12_ATI = 0x894D; + public const int CON_13_ATI = 0x894E; + public const int CON_14_ATI = 0x894F; + public const int CON_15_ATI = 0x8950; + public const int CON_16_ATI = 0x8951; + public const int CON_17_ATI = 0x8952; + public const int CON_18_ATI = 0x8953; + public const int CON_19_ATI = 0x8954; + public const int CON_1_ATI = 0x8942; + public const int CON_20_ATI = 0x8955; + public const int CON_21_ATI = 0x8956; + public const int CON_22_ATI = 0x8957; + public const int CON_23_ATI = 0x8958; + public const int CON_24_ATI = 0x8959; + public const int CON_25_ATI = 0x895A; + public const int CON_26_ATI = 0x895B; + public const int CON_27_ATI = 0x895C; + public const int CON_28_ATI = 0x895D; + public const int CON_29_ATI = 0x895E; + public const int CON_2_ATI = 0x8943; + public const int CON_30_ATI = 0x895F; + public const int CON_31_ATI = 0x8960; + public const int CON_3_ATI = 0x8944; + public const int CON_4_ATI = 0x8945; + public const int CON_5_ATI = 0x8946; + public const int CON_6_ATI = 0x8947; + public const int CON_7_ATI = 0x8948; + public const int CON_8_ATI = 0x8949; + public const int CON_9_ATI = 0x894A; + public const int COORD_REPLACE_ARB = 0x8862; + public const int COORD_REPLACE_NV = 0x8862; + public const int COPY = 0x1503; + public const int COPY_INVERTED = 0x150C; + public const int COPY_READ_BUFFER = 0x8F36; + public const int COPY_READ_BUFFER_BINDING = 0x8F36; + public const int COPY_WRITE_BUFFER = 0x8F37; + public const int COPY_WRITE_BUFFER_BINDING = 0x8F37; + public const int COUNTER_RANGE_AMD = 0x8BC1; + public const int COUNTER_TYPE_AMD = 0x8BC0; + public const int COUNT_DOWN_NV = 0x9089; + public const int COUNT_UP_NV = 0x9088; + public const int COVERAGE_MODULATION_NV = 0x9332; + public const int COVERAGE_MODULATION_TABLE_NV = 0x9331; + public const int COVERAGE_MODULATION_TABLE_SIZE_NV = 0x9333; + public const int CUBIC_CURVE_TO_NV = 0x0C; + public const int CUBIC_EXT = 0x8334; + public const int CUBIC_HP = 0x815F; + public const int CULL_FACE = 0x0B44; + public const int CULL_FACE_MODE = 0x0B45; + public const int CULL_FRAGMENT_NV = 0x86E7; + public const int CULL_MODES_NV = 0x86E0; + public const int CULL_VERTEX_EXT = 0x81AA; + public const int CULL_VERTEX_EYE_POSITION_EXT = 0x81AB; + public const int CULL_VERTEX_IBM = 103050; + public const int CULL_VERTEX_OBJECT_POSITION_EXT = 0x81AC; + public const int CURRENT_ATTRIB_NV = 0x8626; + public const int CURRENT_BINORMAL_EXT = 0x843C; + public const int CURRENT_FOG_COORDINATE_EXT = 0x8453; + public const int CURRENT_MATRIX_ARB = 0x8641; + public const int CURRENT_MATRIX_INDEX_ARB = 0x8845; + public const int CURRENT_MATRIX_NV = 0x8641; + public const int CURRENT_MATRIX_STACK_DEPTH_ARB = 0x8640; + public const int CURRENT_MATRIX_STACK_DEPTH_NV = 0x8640; + public const int CURRENT_OCCLUSION_QUERY_ID_NV = 0x8865; + public const int CURRENT_PALETTE_MATRIX_ARB = 0x8843; + public const int CURRENT_PROGRAM = 0x8B8D; + public const int CURRENT_QUERY = 0x8865; + public const int CURRENT_QUERY_ARB = 0x8865; + public const int CURRENT_RASTER_NORMAL_SGIX = 0x8406; + public const int CURRENT_SECONDARY_COLOR_EXT = 0x8459; + public const int CURRENT_TANGENT_EXT = 0x843B; + public const int CURRENT_TIME_NV = 0x8E28; + public const int CURRENT_VERTEX_ATTRIB = 0x8626; + public const int CURRENT_VERTEX_ATTRIB_ARB = 0x8626; + public const int CURRENT_VERTEX_EXT = 0x87E2; + public const int CURRENT_VERTEX_WEIGHT_EXT = 0x850B; + public const int CURRENT_WEIGHT_ARB = 0x86A8; + public const int CW = 0x0900; + public const int D3D12_FENCE_VALUE_EXT = 0x9595; + public const int DARKEN_KHR = 0x9297; + public const int DARKEN_NV = 0x9297; + public const int DATA_BUFFER_AMD = 0x9151; + public const int DEBUG_CALLBACK_FUNCTION = 0x8244; + public const int DEBUG_CALLBACK_FUNCTION_ARB = 0x8244; + public const int DEBUG_CALLBACK_USER_PARAM = 0x8245; + public const int DEBUG_CALLBACK_USER_PARAM_ARB = 0x8245; + public const int DEBUG_CATEGORY_API_ERROR_AMD = 0x9149; + public const int DEBUG_CATEGORY_APPLICATION_AMD = 0x914F; + public const int DEBUG_CATEGORY_DEPRECATION_AMD = 0x914B; + public const int DEBUG_CATEGORY_OTHER_AMD = 0x9150; + public const int DEBUG_CATEGORY_PERFORMANCE_AMD = 0x914D; + public const int DEBUG_CATEGORY_SHADER_COMPILER_AMD = 0x914E; + public const int DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD = 0x914C; + public const int DEBUG_CATEGORY_WINDOW_SYSTEM_AMD = 0x914A; + public const int DEBUG_GROUP_STACK_DEPTH = 0x826D; + public const int DEBUG_LOGGED_MESSAGES = 0x9145; + public const int DEBUG_LOGGED_MESSAGES_AMD = 0x9145; + public const int DEBUG_LOGGED_MESSAGES_ARB = 0x9145; + public const int DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243; + public const int DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = 0x8243; + public const int DEBUG_OUTPUT = 0x92E0; + public const int DEBUG_OUTPUT_SYNCHRONOUS = 0x8242; + public const int DEBUG_OUTPUT_SYNCHRONOUS_ARB = 0x8242; + public const int DEBUG_SEVERITY_HIGH = 0x9146; + public const int DEBUG_SEVERITY_HIGH_AMD = 0x9146; + public const int DEBUG_SEVERITY_HIGH_ARB = 0x9146; + public const int DEBUG_SEVERITY_LOW = 0x9148; + public const int DEBUG_SEVERITY_LOW_AMD = 0x9148; + public const int DEBUG_SEVERITY_LOW_ARB = 0x9148; + public const int DEBUG_SEVERITY_MEDIUM = 0x9147; + public const int DEBUG_SEVERITY_MEDIUM_AMD = 0x9147; + public const int DEBUG_SEVERITY_MEDIUM_ARB = 0x9147; + public const int DEBUG_SEVERITY_NOTIFICATION = 0x826B; + public const int DEBUG_SOURCE_API = 0x8246; + public const int DEBUG_SOURCE_API_ARB = 0x8246; + public const int DEBUG_SOURCE_APPLICATION = 0x824A; + public const int DEBUG_SOURCE_APPLICATION_ARB = 0x824A; + public const int DEBUG_SOURCE_OTHER = 0x824B; + public const int DEBUG_SOURCE_OTHER_ARB = 0x824B; + public const int DEBUG_SOURCE_SHADER_COMPILER = 0x8248; + public const int DEBUG_SOURCE_SHADER_COMPILER_ARB = 0x8248; + public const int DEBUG_SOURCE_THIRD_PARTY = 0x8249; + public const int DEBUG_SOURCE_THIRD_PARTY_ARB = 0x8249; + public const int DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247; + public const int DEBUG_SOURCE_WINDOW_SYSTEM_ARB = 0x8247; + public const int DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D; + public const int DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = 0x824D; + public const int DEBUG_TYPE_ERROR = 0x824C; + public const int DEBUG_TYPE_ERROR_ARB = 0x824C; + public const int DEBUG_TYPE_MARKER = 0x8268; + public const int DEBUG_TYPE_OTHER = 0x8251; + public const int DEBUG_TYPE_OTHER_ARB = 0x8251; + public const int DEBUG_TYPE_PERFORMANCE = 0x8250; + public const int DEBUG_TYPE_PERFORMANCE_ARB = 0x8250; + public const int DEBUG_TYPE_POP_GROUP = 0x826A; + public const int DEBUG_TYPE_PORTABILITY = 0x824F; + public const int DEBUG_TYPE_PORTABILITY_ARB = 0x824F; + public const int DEBUG_TYPE_PUSH_GROUP = 0x8269; + public const int DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E; + public const int DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = 0x824E; + public const int DECODE_EXT = 0x8A49; + public const int DECR = 0x1E03; + public const int DECR_WRAP = 0x8508; + public const int DECR_WRAP_EXT = 0x8508; + public const int DEDICATED_MEMORY_OBJECT_EXT = 0x9581; + public const int DEFORMATIONS_MASK_SGIX = 0x8196; + public const int DELETE_STATUS = 0x8B80; + public const int DEPENDENT_AR_TEXTURE_2D_NV = 0x86E9; + public const int DEPENDENT_GB_TEXTURE_2D_NV = 0x86EA; + public const int DEPENDENT_HILO_TEXTURE_2D_NV = 0x8858; + public const int DEPENDENT_RGB_TEXTURE_3D_NV = 0x8859; + public const int DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV = 0x885A; + public const int DEPTH = 0x1801; + public const int DEPTH24_STENCIL8 = 0x88F0; + public const int DEPTH24_STENCIL8_EXT = 0x88F0; + public const int DEPTH32F_STENCIL8 = 0x8CAD; + public const int DEPTH32F_STENCIL8_NV = 0x8DAC; + public const int DEPTH_ATTACHMENT = 0x8D00; + public const int DEPTH_ATTACHMENT_EXT = 0x8D00; + public const int DEPTH_BOUNDS_EXT = 0x8891; + public const int DEPTH_BOUNDS_TEST_EXT = 0x8890; + public const int DEPTH_BUFFER_BIT = 0x00000100; + public const int DEPTH_BUFFER_FLOAT_MODE_NV = 0x8DAF; + public const int DEPTH_CLAMP = 0x864F; + public const int DEPTH_CLAMP_FAR_AMD = 0x901F; + public const int DEPTH_CLAMP_NEAR_AMD = 0x901E; + public const int DEPTH_CLAMP_NV = 0x864F; + public const int DEPTH_CLEAR_VALUE = 0x0B73; + public const int DEPTH_COMPONENT = 0x1902; + public const int DEPTH_COMPONENT16 = 0x81A5; + public const int DEPTH_COMPONENT16_ARB = 0x81A5; + public const int DEPTH_COMPONENT16_SGIX = 0x81A5; + public const int DEPTH_COMPONENT24 = 0x81A6; + public const int DEPTH_COMPONENT24_ARB = 0x81A6; + public const int DEPTH_COMPONENT24_SGIX = 0x81A6; + public const int DEPTH_COMPONENT32 = 0x81A7; + public const int DEPTH_COMPONENT32F = 0x8CAC; + public const int DEPTH_COMPONENT32F_NV = 0x8DAB; + public const int DEPTH_COMPONENT32_ARB = 0x81A7; + public const int DEPTH_COMPONENT32_SGIX = 0x81A7; + public const int DEPTH_COMPONENTS = 0x8284; + public const int DEPTH_FUNC = 0x0B74; + public const int DEPTH_RANGE = 0x0B70; + public const int DEPTH_RENDERABLE = 0x8287; + public const int DEPTH_SAMPLES_NV = 0x932D; + public const int DEPTH_STENCIL = 0x84F9; + public const int DEPTH_STENCIL_ATTACHMENT = 0x821A; + public const int DEPTH_STENCIL_EXT = 0x84F9; + public const int DEPTH_STENCIL_NV = 0x84F9; + public const int DEPTH_STENCIL_TEXTURE_MODE = 0x90EA; + public const int DEPTH_STENCIL_TO_BGRA_NV = 0x886F; + public const int DEPTH_STENCIL_TO_RGBA_NV = 0x886E; + public const int DEPTH_TEST = 0x0B71; + public const int DEPTH_TEXTURE_MODE_ARB = 0x884B; + public const int DEPTH_WRITEMASK = 0x0B72; + public const int DETACHED_BUFFERS_NV = 0x95AB; + public const int DETACHED_MEMORY_INCARNATION_NV = 0x95A9; + public const int DETACHED_TEXTURES_NV = 0x95AA; + public const int DETAIL_TEXTURE_2D_BINDING_SGIS = 0x8096; + public const int DETAIL_TEXTURE_2D_SGIS = 0x8095; + public const int DETAIL_TEXTURE_FUNC_POINTS_SGIS = 0x809C; + public const int DETAIL_TEXTURE_LEVEL_SGIS = 0x809A; + public const int DETAIL_TEXTURE_MODE_SGIS = 0x809B; + public const int DEVICE_LUID_EXT = 0x9599; + public const int DEVICE_NODE_MASK_EXT = 0x959A; + public const int DEVICE_UUID_EXT = 0x9597; + public const int DIFFERENCE_KHR = 0x929E; + public const int DIFFERENCE_NV = 0x929E; + public const int DISCARD_ATI = 0x8763; + public const int DISCARD_NV = 0x8530; + public const int DISCRETE_AMD = 0x9006; + public const int DISJOINT_NV = 0x9283; + public const int DISPATCH_INDIRECT_BUFFER = 0x90EE; + public const int DISPATCH_INDIRECT_BUFFER_BINDING = 0x90EF; + public const int DISTANCE_ATTENUATION_EXT = 0x8129; + public const int DISTANCE_ATTENUATION_SGIS = 0x8129; + public const int DITHER = 0x0BD0; + public const int DONT_CARE = 0x1100; + public const int DOT2_ADD_ATI = 0x896C; + public const int DOT3_ATI = 0x8966; + public const int DOT3_RGBA_ARB = 0x86AF; + public const int DOT3_RGBA_EXT = 0x8741; + public const int DOT3_RGB_ARB = 0x86AE; + public const int DOT3_RGB_EXT = 0x8740; + public const int DOT4_ATI = 0x8967; + public const int DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV = 0x885D; + public const int DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV = 0x86F3; + public const int DOT_PRODUCT_DEPTH_REPLACE_NV = 0x86ED; + public const int DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV = 0x86F1; + public const int DOT_PRODUCT_NV = 0x86EC; + public const int DOT_PRODUCT_PASS_THROUGH_NV = 0x885B; + public const int DOT_PRODUCT_REFLECT_CUBE_MAP_NV = 0x86F2; + public const int DOT_PRODUCT_TEXTURE_1D_NV = 0x885C; + public const int DOT_PRODUCT_TEXTURE_2D_NV = 0x86EE; + public const int DOT_PRODUCT_TEXTURE_3D_NV = 0x86EF; + public const int DOT_PRODUCT_TEXTURE_CUBE_MAP_NV = 0x86F0; + public const int DOT_PRODUCT_TEXTURE_RECTANGLE_NV = 0x864E; + public const int DOUBLE = 0x140A; + public const int DOUBLEBUFFER = 0x0C32; + public const int DOUBLE_MAT2 = 0x8F46; + public const int DOUBLE_MAT2_EXT = 0x8F46; + public const int DOUBLE_MAT2x3 = 0x8F49; + public const int DOUBLE_MAT2x3_EXT = 0x8F49; + public const int DOUBLE_MAT2x4 = 0x8F4A; + public const int DOUBLE_MAT2x4_EXT = 0x8F4A; + public const int DOUBLE_MAT3 = 0x8F47; + public const int DOUBLE_MAT3_EXT = 0x8F47; + public const int DOUBLE_MAT3x2 = 0x8F4B; + public const int DOUBLE_MAT3x2_EXT = 0x8F4B; + public const int DOUBLE_MAT3x4 = 0x8F4C; + public const int DOUBLE_MAT3x4_EXT = 0x8F4C; + public const int DOUBLE_MAT4 = 0x8F48; + public const int DOUBLE_MAT4_EXT = 0x8F48; + public const int DOUBLE_MAT4x2 = 0x8F4D; + public const int DOUBLE_MAT4x2_EXT = 0x8F4D; + public const int DOUBLE_MAT4x3 = 0x8F4E; + public const int DOUBLE_MAT4x3_EXT = 0x8F4E; + public const int DOUBLE_VEC2 = 0x8FFC; + public const int DOUBLE_VEC2_EXT = 0x8FFC; + public const int DOUBLE_VEC3 = 0x8FFD; + public const int DOUBLE_VEC3_EXT = 0x8FFD; + public const int DOUBLE_VEC4 = 0x8FFE; + public const int DOUBLE_VEC4_EXT = 0x8FFE; + public const int DRAW_ARRAYS_COMMAND_NV = 0x0003; + public const int DRAW_ARRAYS_INSTANCED_COMMAND_NV = 0x0007; + public const int DRAW_ARRAYS_STRIP_COMMAND_NV = 0x0005; + public const int DRAW_BUFFER = 0x0C01; + public const int DRAW_BUFFER0 = 0x8825; + public const int DRAW_BUFFER0_ARB = 0x8825; + public const int DRAW_BUFFER0_ATI = 0x8825; + public const int DRAW_BUFFER1 = 0x8826; + public const int DRAW_BUFFER10 = 0x882F; + public const int DRAW_BUFFER10_ARB = 0x882F; + public const int DRAW_BUFFER10_ATI = 0x882F; + public const int DRAW_BUFFER11 = 0x8830; + public const int DRAW_BUFFER11_ARB = 0x8830; + public const int DRAW_BUFFER11_ATI = 0x8830; + public const int DRAW_BUFFER12 = 0x8831; + public const int DRAW_BUFFER12_ARB = 0x8831; + public const int DRAW_BUFFER12_ATI = 0x8831; + public const int DRAW_BUFFER13 = 0x8832; + public const int DRAW_BUFFER13_ARB = 0x8832; + public const int DRAW_BUFFER13_ATI = 0x8832; + public const int DRAW_BUFFER14 = 0x8833; + public const int DRAW_BUFFER14_ARB = 0x8833; + public const int DRAW_BUFFER14_ATI = 0x8833; + public const int DRAW_BUFFER15 = 0x8834; + public const int DRAW_BUFFER15_ARB = 0x8834; + public const int DRAW_BUFFER15_ATI = 0x8834; + public const int DRAW_BUFFER1_ARB = 0x8826; + public const int DRAW_BUFFER1_ATI = 0x8826; + public const int DRAW_BUFFER2 = 0x8827; + public const int DRAW_BUFFER2_ARB = 0x8827; + public const int DRAW_BUFFER2_ATI = 0x8827; + public const int DRAW_BUFFER3 = 0x8828; + public const int DRAW_BUFFER3_ARB = 0x8828; + public const int DRAW_BUFFER3_ATI = 0x8828; + public const int DRAW_BUFFER4 = 0x8829; + public const int DRAW_BUFFER4_ARB = 0x8829; + public const int DRAW_BUFFER4_ATI = 0x8829; + public const int DRAW_BUFFER5 = 0x882A; + public const int DRAW_BUFFER5_ARB = 0x882A; + public const int DRAW_BUFFER5_ATI = 0x882A; + public const int DRAW_BUFFER6 = 0x882B; + public const int DRAW_BUFFER6_ARB = 0x882B; + public const int DRAW_BUFFER6_ATI = 0x882B; + public const int DRAW_BUFFER7 = 0x882C; + public const int DRAW_BUFFER7_ARB = 0x882C; + public const int DRAW_BUFFER7_ATI = 0x882C; + public const int DRAW_BUFFER8 = 0x882D; + public const int DRAW_BUFFER8_ARB = 0x882D; + public const int DRAW_BUFFER8_ATI = 0x882D; + public const int DRAW_BUFFER9 = 0x882E; + public const int DRAW_BUFFER9_ARB = 0x882E; + public const int DRAW_BUFFER9_ATI = 0x882E; + public const int DRAW_ELEMENTS_COMMAND_NV = 0x0002; + public const int DRAW_ELEMENTS_INSTANCED_COMMAND_NV = 0x0006; + public const int DRAW_ELEMENTS_STRIP_COMMAND_NV = 0x0004; + public const int DRAW_FRAMEBUFFER = 0x8CA9; + public const int DRAW_FRAMEBUFFER_BINDING = 0x8CA6; + public const int DRAW_FRAMEBUFFER_BINDING_EXT = 0x8CA6; + public const int DRAW_FRAMEBUFFER_EXT = 0x8CA9; + public const int DRAW_INDIRECT_ADDRESS_NV = 0x8F41; + public const int DRAW_INDIRECT_BUFFER = 0x8F3F; + public const int DRAW_INDIRECT_BUFFER_BINDING = 0x8F43; + public const int DRAW_INDIRECT_LENGTH_NV = 0x8F42; + public const int DRAW_INDIRECT_UNIFIED_NV = 0x8F40; + public const int DRAW_PIXELS_APPLE = 0x8A0A; + public const int DRIVER_UUID_EXT = 0x9598; + public const int DSDT8_MAG8_INTENSITY8_NV = 0x870B; + public const int DSDT8_MAG8_NV = 0x870A; + public const int DSDT8_NV = 0x8709; + public const int DSDT_MAG_INTENSITY_NV = 0x86DC; + public const int DSDT_MAG_NV = 0x86F6; + public const int DSDT_MAG_VIB_NV = 0x86F7; + public const int DSDT_NV = 0x86F5; + public const int DST_ALPHA = 0x0304; + public const int DST_ATOP_NV = 0x928F; + public const int DST_COLOR = 0x0306; + public const int DST_IN_NV = 0x928B; + public const int DST_NV = 0x9287; + public const int DST_OUT_NV = 0x928D; + public const int DST_OVER_NV = 0x9289; + public const int DS_BIAS_NV = 0x8716; + public const int DS_SCALE_NV = 0x8710; + public const int DT_BIAS_NV = 0x8717; + public const int DT_SCALE_NV = 0x8711; + public const int DU8DV8_ATI = 0x877A; + public const int DUAL_ALPHA12_SGIS = 0x8112; + public const int DUAL_ALPHA16_SGIS = 0x8113; + public const int DUAL_ALPHA4_SGIS = 0x8110; + public const int DUAL_ALPHA8_SGIS = 0x8111; + public const int DUAL_INTENSITY12_SGIS = 0x811A; + public const int DUAL_INTENSITY16_SGIS = 0x811B; + public const int DUAL_INTENSITY4_SGIS = 0x8118; + public const int DUAL_INTENSITY8_SGIS = 0x8119; + public const int DUAL_LUMINANCE12_SGIS = 0x8116; + public const int DUAL_LUMINANCE16_SGIS = 0x8117; + public const int DUAL_LUMINANCE4_SGIS = 0x8114; + public const int DUAL_LUMINANCE8_SGIS = 0x8115; + public const int DUAL_LUMINANCE_ALPHA4_SGIS = 0x811C; + public const int DUAL_LUMINANCE_ALPHA8_SGIS = 0x811D; + public const int DUAL_TEXTURE_SELECT_SGIS = 0x8124; + public const int DUDV_ATI = 0x8779; + public const int DUP_FIRST_CUBIC_CURVE_TO_NV = 0xF2; + public const int DUP_LAST_CUBIC_CURVE_TO_NV = 0xF4; + public const int DYNAMIC_ATI = 0x8761; + public const int DYNAMIC_COPY = 0x88EA; + public const int DYNAMIC_COPY_ARB = 0x88EA; + public const int DYNAMIC_DRAW = 0x88E8; + public const int DYNAMIC_DRAW_ARB = 0x88E8; + public const int DYNAMIC_READ = 0x88E9; + public const int DYNAMIC_READ_ARB = 0x88E9; + public const int DYNAMIC_STORAGE_BIT = 0x0100; + public const int EDGEFLAG_BIT_PGI = 0x00040000; + public const int EDGE_FLAG_ARRAY_ADDRESS_NV = 0x8F26; + public const int EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = 0x889B; + public const int EDGE_FLAG_ARRAY_COUNT_EXT = 0x808D; + public const int EDGE_FLAG_ARRAY_EXT = 0x8079; + public const int EDGE_FLAG_ARRAY_LENGTH_NV = 0x8F30; + public const int EDGE_FLAG_ARRAY_LIST_IBM = 103075; + public const int EDGE_FLAG_ARRAY_LIST_STRIDE_IBM = 103085; + public const int EDGE_FLAG_ARRAY_POINTER_EXT = 0x8093; + public const int EDGE_FLAG_ARRAY_STRIDE_EXT = 0x808C; + public const int EFFECTIVE_RASTER_SAMPLES_EXT = 0x932C; + public const int EIGHTH_BIT_ATI = 0x00000020; + public const int ELEMENT_ADDRESS_COMMAND_NV = 0x0008; + public const int ELEMENT_ARRAY_ADDRESS_NV = 0x8F29; + public const int ELEMENT_ARRAY_APPLE = 0x8A0C; + public const int ELEMENT_ARRAY_ATI = 0x8768; + public const int ELEMENT_ARRAY_BARRIER_BIT = 0x00000002; + public const int ELEMENT_ARRAY_BARRIER_BIT_EXT = 0x00000002; + public const int ELEMENT_ARRAY_BUFFER = 0x8893; + public const int ELEMENT_ARRAY_BUFFER_ARB = 0x8893; + public const int ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; + public const int ELEMENT_ARRAY_BUFFER_BINDING_ARB = 0x8895; + public const int ELEMENT_ARRAY_LENGTH_NV = 0x8F33; + public const int ELEMENT_ARRAY_POINTER_APPLE = 0x8A0E; + public const int ELEMENT_ARRAY_POINTER_ATI = 0x876A; + public const int ELEMENT_ARRAY_TYPE_APPLE = 0x8A0D; + public const int ELEMENT_ARRAY_TYPE_ATI = 0x8769; + public const int ELEMENT_ARRAY_UNIFIED_NV = 0x8F1F; + public const int EMBOSS_CONSTANT_NV = 0x855E; + public const int EMBOSS_LIGHT_NV = 0x855D; + public const int EMBOSS_MAP_NV = 0x855F; + public const int EQUAL = 0x0202; + public const int EQUIV = 0x1509; + public const int EVAL_2D_NV = 0x86C0; + public const int EVAL_FRACTIONAL_TESSELLATION_NV = 0x86C5; + public const int EVAL_TRIANGULAR_2D_NV = 0x86C1; + public const int EVAL_VERTEX_ATTRIB0_NV = 0x86C6; + public const int EVAL_VERTEX_ATTRIB10_NV = 0x86D0; + public const int EVAL_VERTEX_ATTRIB11_NV = 0x86D1; + public const int EVAL_VERTEX_ATTRIB12_NV = 0x86D2; + public const int EVAL_VERTEX_ATTRIB13_NV = 0x86D3; + public const int EVAL_VERTEX_ATTRIB14_NV = 0x86D4; + public const int EVAL_VERTEX_ATTRIB15_NV = 0x86D5; + public const int EVAL_VERTEX_ATTRIB1_NV = 0x86C7; + public const int EVAL_VERTEX_ATTRIB2_NV = 0x86C8; + public const int EVAL_VERTEX_ATTRIB3_NV = 0x86C9; + public const int EVAL_VERTEX_ATTRIB4_NV = 0x86CA; + public const int EVAL_VERTEX_ATTRIB5_NV = 0x86CB; + public const int EVAL_VERTEX_ATTRIB6_NV = 0x86CC; + public const int EVAL_VERTEX_ATTRIB7_NV = 0x86CD; + public const int EVAL_VERTEX_ATTRIB8_NV = 0x86CE; + public const int EVAL_VERTEX_ATTRIB9_NV = 0x86CF; + public const int EXCLUSION_KHR = 0x92A0; + public const int EXCLUSION_NV = 0x92A0; + public const int EXCLUSIVE_EXT = 0x8F11; + public const int EXPAND_NEGATE_NV = 0x8539; + public const int EXPAND_NORMAL_NV = 0x8538; + public const int EXTENSIONS = 0x1F03; + public const int EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD = 0x9160; + public const int EYE_DISTANCE_TO_LINE_SGIS = 0x81F2; + public const int EYE_DISTANCE_TO_POINT_SGIS = 0x81F0; + public const int EYE_LINE_SGIS = 0x81F6; + public const int EYE_PLANE = 0x2502; + public const int EYE_PLANE_ABSOLUTE_NV = 0x855C; + public const int EYE_POINT_SGIS = 0x81F4; + public const int EYE_RADIAL_NV = 0x855B; + public const int E_TIMES_F_NV = 0x8531; + public const int FACTOR_MAX_AMD = 0x901D; + public const int FACTOR_MIN_AMD = 0x901C; + public const int FAILURE_NV = 0x9030; + public const int FALSE = 0; + public const int FASTEST = 0x1101; + public const int FENCE_APPLE = 0x8A0B; + public const int FENCE_CONDITION_NV = 0x84F4; + public const int FENCE_STATUS_NV = 0x84F3; + public const int FIELDS_NV = 0x8E27; + public const int FIELD_LOWER_NV = 0x9023; + public const int FIELD_UPPER_NV = 0x9022; + public const int FILE_NAME_NV = 0x9074; + public const int FILL = 0x1B02; + public const int FILL_RECTANGLE_NV = 0x933C; + public const int FILTER = 0x829A; + public const int FILTER4_SGIS = 0x8146; + public const int FIRST_TO_REST_NV = 0x90AF; + public const int FIRST_VERTEX_CONVENTION = 0x8E4D; + public const int FIRST_VERTEX_CONVENTION_EXT = 0x8E4D; + public const int FIXED = 0x140C; + public const int FIXED_OES = 0x140C; + public const int FIXED_ONLY = 0x891D; + public const int FIXED_ONLY_ARB = 0x891D; + public const int FLOAT = 0x1406; + public const int FLOAT16_MAT2_AMD = 0x91C5; + public const int FLOAT16_MAT2x3_AMD = 0x91C8; + public const int FLOAT16_MAT2x4_AMD = 0x91C9; + public const int FLOAT16_MAT3_AMD = 0x91C6; + public const int FLOAT16_MAT3x2_AMD = 0x91CA; + public const int FLOAT16_MAT3x4_AMD = 0x91CB; + public const int FLOAT16_MAT4_AMD = 0x91C7; + public const int FLOAT16_MAT4x2_AMD = 0x91CC; + public const int FLOAT16_MAT4x3_AMD = 0x91CD; + public const int FLOAT16_NV = 0x8FF8; + public const int FLOAT16_VEC2_NV = 0x8FF9; + public const int FLOAT16_VEC3_NV = 0x8FFA; + public const int FLOAT16_VEC4_NV = 0x8FFB; + public const int FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD; + public const int FLOAT_32_UNSIGNED_INT_24_8_REV_NV = 0x8DAD; + public const int FLOAT_CLEAR_COLOR_VALUE_NV = 0x888D; + public const int FLOAT_MAT2 = 0x8B5A; + public const int FLOAT_MAT2_ARB = 0x8B5A; + public const int FLOAT_MAT2x3 = 0x8B65; + public const int FLOAT_MAT2x4 = 0x8B66; + public const int FLOAT_MAT3 = 0x8B5B; + public const int FLOAT_MAT3_ARB = 0x8B5B; + public const int FLOAT_MAT3x2 = 0x8B67; + public const int FLOAT_MAT3x4 = 0x8B68; + public const int FLOAT_MAT4 = 0x8B5C; + public const int FLOAT_MAT4_ARB = 0x8B5C; + public const int FLOAT_MAT4x2 = 0x8B69; + public const int FLOAT_MAT4x3 = 0x8B6A; + public const int FLOAT_R16_NV = 0x8884; + public const int FLOAT_R32_NV = 0x8885; + public const int FLOAT_RG16_NV = 0x8886; + public const int FLOAT_RG32_NV = 0x8887; + public const int FLOAT_RGB16_NV = 0x8888; + public const int FLOAT_RGB32_NV = 0x8889; + public const int FLOAT_RGBA16_NV = 0x888A; + public const int FLOAT_RGBA32_NV = 0x888B; + public const int FLOAT_RGBA_MODE_NV = 0x888E; + public const int FLOAT_RGBA_NV = 0x8883; + public const int FLOAT_RGB_NV = 0x8882; + public const int FLOAT_RG_NV = 0x8881; + public const int FLOAT_R_NV = 0x8880; + public const int FLOAT_VEC2 = 0x8B50; + public const int FLOAT_VEC2_ARB = 0x8B50; + public const int FLOAT_VEC3 = 0x8B51; + public const int FLOAT_VEC3_ARB = 0x8B51; + public const int FLOAT_VEC4 = 0x8B52; + public const int FLOAT_VEC4_ARB = 0x8B52; + public const int FOG = 0x0B60; + public const int FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = 0x889D; + public const int FOG_COORDINATE_ARRAY_EXT = 0x8457; + public const int FOG_COORDINATE_ARRAY_LIST_IBM = 103076; + public const int FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM = 103086; + public const int FOG_COORDINATE_ARRAY_POINTER_EXT = 0x8456; + public const int FOG_COORDINATE_ARRAY_STRIDE_EXT = 0x8455; + public const int FOG_COORDINATE_ARRAY_TYPE_EXT = 0x8454; + public const int FOG_COORDINATE_EXT = 0x8451; + public const int FOG_COORDINATE_SOURCE_EXT = 0x8450; + public const int FOG_COORD_ARRAY_ADDRESS_NV = 0x8F28; + public const int FOG_COORD_ARRAY_LENGTH_NV = 0x8F32; + public const int FOG_DISTANCE_MODE_NV = 0x855A; + public const int FOG_FUNC_POINTS_SGIS = 0x812B; + public const int FOG_FUNC_SGIS = 0x812A; + public const int FOG_OFFSET_SGIX = 0x8198; + public const int FOG_OFFSET_VALUE_SGIX = 0x8199; + public const int FOG_SPECULAR_TEXTURE_WIN = 0x80EC; + public const int FONT_ASCENDER_BIT_NV = 0x00200000; + public const int FONT_DESCENDER_BIT_NV = 0x00400000; + public const int FONT_GLYPHS_AVAILABLE_NV = 0x9368; + public const int FONT_HAS_KERNING_BIT_NV = 0x10000000; + public const int FONT_HEIGHT_BIT_NV = 0x00800000; + public const int FONT_MAX_ADVANCE_HEIGHT_BIT_NV = 0x02000000; + public const int FONT_MAX_ADVANCE_WIDTH_BIT_NV = 0x01000000; + public const int FONT_NUM_GLYPH_INDICES_BIT_NV = 0x20000000; + public const int FONT_TARGET_UNAVAILABLE_NV = 0x9369; + public const int FONT_UNAVAILABLE_NV = 0x936A; + public const int FONT_UNDERLINE_POSITION_BIT_NV = 0x04000000; + public const int FONT_UNDERLINE_THICKNESS_BIT_NV = 0x08000000; + public const int FONT_UNINTELLIGIBLE_NV = 0x936B; + public const int FONT_UNITS_PER_EM_BIT_NV = 0x00100000; + public const int FONT_X_MAX_BOUNDS_BIT_NV = 0x00040000; + public const int FONT_X_MIN_BOUNDS_BIT_NV = 0x00010000; + public const int FONT_Y_MAX_BOUNDS_BIT_NV = 0x00080000; + public const int FONT_Y_MIN_BOUNDS_BIT_NV = 0x00020000; + public const int FORCE_BLUE_TO_ONE_NV = 0x8860; + public const int FORMAT_SUBSAMPLE_244_244_OML = 0x8983; + public const int FORMAT_SUBSAMPLE_24_24_OML = 0x8982; + public const int FRACTIONAL_EVEN = 0x8E7C; + public const int FRACTIONAL_ODD = 0x8E7B; + public const int FRAGMENT_COLOR_EXT = 0x834C; + public const int FRAGMENT_COLOR_MATERIAL_FACE_SGIX = 0x8402; + public const int FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX = 0x8403; + public const int FRAGMENT_COLOR_MATERIAL_SGIX = 0x8401; + public const int FRAGMENT_COVERAGE_COLOR_NV = 0x92DE; + public const int FRAGMENT_COVERAGE_TO_COLOR_NV = 0x92DD; + public const int FRAGMENT_DEPTH_EXT = 0x8452; + public const int FRAGMENT_INPUT_NV = 0x936D; + public const int FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D; + public const int FRAGMENT_LIGHT0_SGIX = 0x840C; + public const int FRAGMENT_LIGHT1_SGIX = 0x840D; + public const int FRAGMENT_LIGHT2_SGIX = 0x840E; + public const int FRAGMENT_LIGHT3_SGIX = 0x840F; + public const int FRAGMENT_LIGHT4_SGIX = 0x8410; + public const int FRAGMENT_LIGHT5_SGIX = 0x8411; + public const int FRAGMENT_LIGHT6_SGIX = 0x8412; + public const int FRAGMENT_LIGHT7_SGIX = 0x8413; + public const int FRAGMENT_LIGHTING_SGIX = 0x8400; + public const int FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX = 0x840A; + public const int FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX = 0x8408; + public const int FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX = 0x840B; + public const int FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX = 0x8409; + public const int FRAGMENT_MATERIAL_EXT = 0x8349; + public const int FRAGMENT_NORMAL_EXT = 0x834A; + public const int FRAGMENT_PROGRAM_ARB = 0x8804; + public const int FRAGMENT_PROGRAM_BINDING_NV = 0x8873; + public const int FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV = 0x8E5D; + public const int FRAGMENT_PROGRAM_NV = 0x8870; + public const int FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV = 0x8DA4; + public const int FRAGMENT_SHADER = 0x8B30; + public const int FRAGMENT_SHADER_ARB = 0x8B30; + public const int FRAGMENT_SHADER_ATI = 0x8920; + public const int FRAGMENT_SHADER_BIT = 0x00000002; + public const int FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B; + public const int FRAGMENT_SHADER_DERIVATIVE_HINT_ARB = 0x8B8B; + public const int FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT = 0x8A52; + public const int FRAGMENT_SHADER_INVOCATIONS = 0x82F4; + public const int FRAGMENT_SHADER_INVOCATIONS_ARB = 0x82F4; + public const int FRAGMENT_SUBROUTINE = 0x92EC; + public const int FRAGMENT_SUBROUTINE_UNIFORM = 0x92F2; + public const int FRAGMENT_TEXTURE = 0x829F; + public const int FRAMEBUFFER = 0x8D40; + public const int FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215; + public const int FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214; + public const int FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210; + public const int FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211; + public const int FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216; + public const int FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213; + public const int FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7; + public const int FRAMEBUFFER_ATTACHMENT_LAYERED_ARB = 0x8DA7; + public const int FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = 0x8DA7; + public const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; + public const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT = 0x8CD1; + public const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; + public const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT = 0x8CD0; + public const int FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212; + public const int FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT = 0x8CD4; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR = 0x9632; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT = 0x8CD3; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT = 0x8CD4; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT = 0x8CD2; + public const int FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR = 0x9630; + public const int FRAMEBUFFER_BARRIER_BIT = 0x00000400; + public const int FRAMEBUFFER_BARRIER_BIT_EXT = 0x00000400; + public const int FRAMEBUFFER_BINDING = 0x8CA6; + public const int FRAMEBUFFER_BINDING_EXT = 0x8CA6; + public const int FRAMEBUFFER_BLEND = 0x828B; + public const int FRAMEBUFFER_COMPLETE = 0x8CD5; + public const int FRAMEBUFFER_COMPLETE_EXT = 0x8CD5; + public const int FRAMEBUFFER_DEFAULT = 0x8218; + public const int FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x9314; + public const int FRAMEBUFFER_DEFAULT_HEIGHT = 0x9311; + public const int FRAMEBUFFER_DEFAULT_LAYERS = 0x9312; + public const int FRAMEBUFFER_DEFAULT_SAMPLES = 0x9313; + public const int FRAMEBUFFER_DEFAULT_WIDTH = 0x9310; + public const int FRAMEBUFFER_EXT = 0x8D40; + public const int FRAMEBUFFER_FLIP_X_MESA = 0x8BBC; + public const int FRAMEBUFFER_FLIP_Y_MESA = 0x8BBB; + public const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; + public const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = 0x8CD6; + public const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = 0x8CD9; + public const int FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB; + public const int FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT = 0x8CDB; + public const int FRAMEBUFFER_INCOMPLETE_FORMATS_EXT = 0x8CDA; + public const int FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB = 0x8DA9; + public const int FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT = 0x8DA9; + public const int FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8; + public const int FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB = 0x8DA8; + public const int FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = 0x8DA8; + public const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; + public const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = 0x8CD7; + public const int FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56; + public const int FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT = 0x8D56; + public const int FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC; + public const int FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT = 0x8CDC; + public const int FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR = 0x9633; + public const int FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB = 0x9342; + public const int FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV = 0x9342; + public const int FRAMEBUFFER_RENDERABLE = 0x8289; + public const int FRAMEBUFFER_RENDERABLE_LAYERED = 0x828A; + public const int FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB = 0x9343; + public const int FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV = 0x9343; + public const int FRAMEBUFFER_SRGB = 0x8DB9; + public const int FRAMEBUFFER_SRGB_CAPABLE_EXT = 0x8DBA; + public const int FRAMEBUFFER_SRGB_EXT = 0x8DB9; + public const int FRAMEBUFFER_SWAP_XY_MESA = 0x8BBD; + public const int FRAMEBUFFER_UNDEFINED = 0x8219; + public const int FRAMEBUFFER_UNSUPPORTED = 0x8CDD; + public const int FRAMEBUFFER_UNSUPPORTED_EXT = 0x8CDD; + public const int FRAMEZOOM_FACTOR_SGIX = 0x818C; + public const int FRAMEZOOM_SGIX = 0x818B; + public const int FRAME_NV = 0x8E26; + public const int FRONT = 0x0404; + public const int FRONT_AND_BACK = 0x0408; + public const int FRONT_FACE = 0x0B46; + public const int FRONT_FACE_COMMAND_NV = 0x0012; + public const int FRONT_LEFT = 0x0400; + public const int FRONT_RIGHT = 0x0401; + public const int FULL_RANGE_EXT = 0x87E1; + public const int FULL_STIPPLE_HINT_PGI = 0x1A219; + public const int FULL_SUPPORT = 0x82B7; + public const int FUNC_ADD = 0x8006; + public const int FUNC_ADD_EXT = 0x8006; + public const int FUNC_REVERSE_SUBTRACT = 0x800B; + public const int FUNC_REVERSE_SUBTRACT_EXT = 0x800B; + public const int FUNC_SUBTRACT = 0x800A; + public const int FUNC_SUBTRACT_EXT = 0x800A; + public const int GENERATE_MIPMAP_HINT_SGIS = 0x8192; + public const int GENERATE_MIPMAP_SGIS = 0x8191; + public const int GENERIC_ATTRIB_NV = 0x8C7D; + public const int GEOMETRY_DEFORMATION_BIT_SGIX = 0x00000002; + public const int GEOMETRY_DEFORMATION_SGIX = 0x8194; + public const int GEOMETRY_INPUT_TYPE = 0x8917; + public const int GEOMETRY_INPUT_TYPE_ARB = 0x8DDB; + public const int GEOMETRY_INPUT_TYPE_EXT = 0x8DDB; + public const int GEOMETRY_OUTPUT_TYPE = 0x8918; + public const int GEOMETRY_OUTPUT_TYPE_ARB = 0x8DDC; + public const int GEOMETRY_OUTPUT_TYPE_EXT = 0x8DDC; + public const int GEOMETRY_PROGRAM_NV = 0x8C26; + public const int GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV = 0x8DA3; + public const int GEOMETRY_SHADER = 0x8DD9; + public const int GEOMETRY_SHADER_ARB = 0x8DD9; + public const int GEOMETRY_SHADER_BIT = 0x00000004; + public const int GEOMETRY_SHADER_EXT = 0x8DD9; + public const int GEOMETRY_SHADER_INVOCATIONS = 0x887F; + public const int GEOMETRY_SHADER_PRIMITIVES_EMITTED = 0x82F3; + public const int GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB = 0x82F3; + public const int GEOMETRY_SUBROUTINE = 0x92EB; + public const int GEOMETRY_SUBROUTINE_UNIFORM = 0x92F1; + public const int GEOMETRY_TEXTURE = 0x829E; + public const int GEOMETRY_VERTICES_OUT = 0x8916; + public const int GEOMETRY_VERTICES_OUT_ARB = 0x8DDA; + public const int GEOMETRY_VERTICES_OUT_EXT = 0x8DDA; + public const int GEQUAL = 0x0206; + public const int GET_TEXTURE_IMAGE_FORMAT = 0x8291; + public const int GET_TEXTURE_IMAGE_TYPE = 0x8292; + public const int GLOBAL_ALPHA_FACTOR_SUN = 0x81DA; + public const int GLOBAL_ALPHA_SUN = 0x81D9; + public const int GLYPH_HAS_KERNING_BIT_NV = 0x100; + public const int GLYPH_HEIGHT_BIT_NV = 0x02; + public const int GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV = 0x10; + public const int GLYPH_HORIZONTAL_BEARING_X_BIT_NV = 0x04; + public const int GLYPH_HORIZONTAL_BEARING_Y_BIT_NV = 0x08; + public const int GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV = 0x80; + public const int GLYPH_VERTICAL_BEARING_X_BIT_NV = 0x20; + public const int GLYPH_VERTICAL_BEARING_Y_BIT_NV = 0x40; + public const int GLYPH_WIDTH_BIT_NV = 0x01; + public const int GPU_ADDRESS_NV = 0x8F34; + public const int GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX = 0x9049; + public const int GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX = 0x9047; + public const int GPU_MEMORY_INFO_EVICTED_MEMORY_NVX = 0x904B; + public const int GPU_MEMORY_INFO_EVICTION_COUNT_NVX = 0x904A; + public const int GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX = 0x9048; + public const int GREATER = 0x0204; + public const int GREEN = 0x1904; + public const int GREEN_BIT_ATI = 0x00000002; + public const int GREEN_INTEGER = 0x8D95; + public const int GREEN_INTEGER_EXT = 0x8D95; + public const int GREEN_MAX_CLAMP_INGR = 0x8565; + public const int GREEN_MIN_CLAMP_INGR = 0x8561; + public const int GREEN_NV = 0x1904; + public const int GUILTY_CONTEXT_RESET = 0x8253; + public const int GUILTY_CONTEXT_RESET_ARB = 0x8253; + public const int HALF_APPLE = 0x140B; + public const int HALF_BIAS_NEGATE_NV = 0x853B; + public const int HALF_BIAS_NORMAL_NV = 0x853A; + public const int HALF_BIT_ATI = 0x00000008; + public const int HALF_FLOAT = 0x140B; + public const int HALF_FLOAT_ARB = 0x140B; + public const int HALF_FLOAT_NV = 0x140B; + public const int HANDLE_TYPE_D3D11_IMAGE_EXT = 0x958B; + public const int HANDLE_TYPE_D3D11_IMAGE_KMT_EXT = 0x958C; + public const int HANDLE_TYPE_D3D12_FENCE_EXT = 0x9594; + public const int HANDLE_TYPE_D3D12_RESOURCE_EXT = 0x958A; + public const int HANDLE_TYPE_D3D12_TILEPOOL_EXT = 0x9589; + public const int HANDLE_TYPE_OPAQUE_FD_EXT = 0x9586; + public const int HANDLE_TYPE_OPAQUE_WIN32_EXT = 0x9587; + public const int HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT = 0x9588; + public const int HARDLIGHT_KHR = 0x929B; + public const int HARDLIGHT_NV = 0x929B; + public const int HARDMIX_NV = 0x92A9; + public const int HIGH_FLOAT = 0x8DF2; + public const int HIGH_INT = 0x8DF5; + public const int HILO16_NV = 0x86F8; + public const int HILO8_NV = 0x885E; + public const int HILO_NV = 0x86F4; + public const int HISTOGRAM_ALPHA_SIZE_EXT = 0x802B; + public const int HISTOGRAM_BLUE_SIZE_EXT = 0x802A; + public const int HISTOGRAM_EXT = 0x8024; + public const int HISTOGRAM_FORMAT_EXT = 0x8027; + public const int HISTOGRAM_GREEN_SIZE_EXT = 0x8029; + public const int HISTOGRAM_LUMINANCE_SIZE_EXT = 0x802C; + public const int HISTOGRAM_RED_SIZE_EXT = 0x8028; + public const int HISTOGRAM_SINK_EXT = 0x802D; + public const int HISTOGRAM_WIDTH_EXT = 0x8026; + public const int HI_BIAS_NV = 0x8714; + public const int HI_SCALE_NV = 0x870E; + public const int HORIZONTAL_LINE_TO_NV = 0x06; + public const int HSL_COLOR_KHR = 0x92AF; + public const int HSL_COLOR_NV = 0x92AF; + public const int HSL_HUE_KHR = 0x92AD; + public const int HSL_HUE_NV = 0x92AD; + public const int HSL_LUMINOSITY_KHR = 0x92B0; + public const int HSL_LUMINOSITY_NV = 0x92B0; + public const int HSL_SATURATION_KHR = 0x92AE; + public const int HSL_SATURATION_NV = 0x92AE; + public const int IDENTITY_NV = 0x862A; + public const int IGNORE_BORDER_HP = 0x8150; + public const int IMAGE_1D = 0x904C; + public const int IMAGE_1D_ARRAY = 0x9052; + public const int IMAGE_1D_ARRAY_EXT = 0x9052; + public const int IMAGE_1D_EXT = 0x904C; + public const int IMAGE_2D = 0x904D; + public const int IMAGE_2D_ARRAY = 0x9053; + public const int IMAGE_2D_ARRAY_EXT = 0x9053; + public const int IMAGE_2D_EXT = 0x904D; + public const int IMAGE_2D_MULTISAMPLE = 0x9055; + public const int IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056; + public const int IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x9056; + public const int IMAGE_2D_MULTISAMPLE_EXT = 0x9055; + public const int IMAGE_2D_RECT = 0x904F; + public const int IMAGE_2D_RECT_EXT = 0x904F; + public const int IMAGE_3D = 0x904E; + public const int IMAGE_3D_EXT = 0x904E; + public const int IMAGE_BINDING_ACCESS = 0x8F3E; + public const int IMAGE_BINDING_ACCESS_EXT = 0x8F3E; + public const int IMAGE_BINDING_FORMAT = 0x906E; + public const int IMAGE_BINDING_FORMAT_EXT = 0x906E; + public const int IMAGE_BINDING_LAYER = 0x8F3D; + public const int IMAGE_BINDING_LAYERED = 0x8F3C; + public const int IMAGE_BINDING_LAYERED_EXT = 0x8F3C; + public const int IMAGE_BINDING_LAYER_EXT = 0x8F3D; + public const int IMAGE_BINDING_LEVEL = 0x8F3B; + public const int IMAGE_BINDING_LEVEL_EXT = 0x8F3B; + public const int IMAGE_BINDING_NAME = 0x8F3A; + public const int IMAGE_BINDING_NAME_EXT = 0x8F3A; + public const int IMAGE_BUFFER = 0x9051; + public const int IMAGE_BUFFER_EXT = 0x9051; + public const int IMAGE_CLASS_10_10_10_2 = 0x82C3; + public const int IMAGE_CLASS_11_11_10 = 0x82C2; + public const int IMAGE_CLASS_1_X_16 = 0x82BE; + public const int IMAGE_CLASS_1_X_32 = 0x82BB; + public const int IMAGE_CLASS_1_X_8 = 0x82C1; + public const int IMAGE_CLASS_2_X_16 = 0x82BD; + public const int IMAGE_CLASS_2_X_32 = 0x82BA; + public const int IMAGE_CLASS_2_X_8 = 0x82C0; + public const int IMAGE_CLASS_4_X_16 = 0x82BC; + public const int IMAGE_CLASS_4_X_32 = 0x82B9; + public const int IMAGE_CLASS_4_X_8 = 0x82BF; + public const int IMAGE_COMPATIBILITY_CLASS = 0x82A8; + public const int IMAGE_CUBE = 0x9050; + public const int IMAGE_CUBE_EXT = 0x9050; + public const int IMAGE_CUBE_MAP_ARRAY = 0x9054; + public const int IMAGE_CUBE_MAP_ARRAY_EXT = 0x9054; + public const int IMAGE_CUBIC_WEIGHT_HP = 0x815E; + public const int IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9; + public const int IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8; + public const int IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7; + public const int IMAGE_MAG_FILTER_HP = 0x815C; + public const int IMAGE_MIN_FILTER_HP = 0x815D; + public const int IMAGE_PIXEL_FORMAT = 0x82A9; + public const int IMAGE_PIXEL_TYPE = 0x82AA; + public const int IMAGE_ROTATE_ANGLE_HP = 0x8159; + public const int IMAGE_ROTATE_ORIGIN_X_HP = 0x815A; + public const int IMAGE_ROTATE_ORIGIN_Y_HP = 0x815B; + public const int IMAGE_SCALE_X_HP = 0x8155; + public const int IMAGE_SCALE_Y_HP = 0x8156; + public const int IMAGE_TEXEL_SIZE = 0x82A7; + public const int IMAGE_TRANSFORM_2D_HP = 0x8161; + public const int IMAGE_TRANSLATE_X_HP = 0x8157; + public const int IMAGE_TRANSLATE_Y_HP = 0x8158; + public const int IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; + public const int IMPLEMENTATION_COLOR_READ_FORMAT_OES = 0x8B9B; + public const int IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; + public const int IMPLEMENTATION_COLOR_READ_TYPE_OES = 0x8B9A; + public const int INCLUSIVE_EXT = 0x8F10; + public const int INCR = 0x1E02; + public const int INCR_WRAP = 0x8507; + public const int INCR_WRAP_EXT = 0x8507; + public const int INDEX_ARRAY_ADDRESS_NV = 0x8F24; + public const int INDEX_ARRAY_BUFFER_BINDING_ARB = 0x8899; + public const int INDEX_ARRAY_COUNT_EXT = 0x8087; + public const int INDEX_ARRAY_EXT = 0x8077; + public const int INDEX_ARRAY_LENGTH_NV = 0x8F2E; + public const int INDEX_ARRAY_LIST_IBM = 103073; + public const int INDEX_ARRAY_LIST_STRIDE_IBM = 103083; + public const int INDEX_ARRAY_POINTER_EXT = 0x8091; + public const int INDEX_ARRAY_STRIDE_EXT = 0x8086; + public const int INDEX_ARRAY_TYPE_EXT = 0x8085; + public const int INDEX_BIT_PGI = 0x00080000; + public const int INDEX_MATERIAL_EXT = 0x81B8; + public const int INDEX_MATERIAL_FACE_EXT = 0x81BA; + public const int INDEX_MATERIAL_PARAMETER_EXT = 0x81B9; + public const int INDEX_TEST_EXT = 0x81B5; + public const int INDEX_TEST_FUNC_EXT = 0x81B6; + public const int INDEX_TEST_REF_EXT = 0x81B7; + public const int INFO_LOG_LENGTH = 0x8B84; + public const int INNOCENT_CONTEXT_RESET = 0x8254; + public const int INNOCENT_CONTEXT_RESET_ARB = 0x8254; + public const int INSTRUMENT_BUFFER_POINTER_SGIX = 0x8180; + public const int INSTRUMENT_MEASUREMENTS_SGIX = 0x8181; + public const int INT = 0x1404; + public const int INT16_NV = 0x8FE4; + public const int INT16_VEC2_NV = 0x8FE5; + public const int INT16_VEC3_NV = 0x8FE6; + public const int INT16_VEC4_NV = 0x8FE7; + public const int INT64_ARB = 0x140E; + public const int INT64_NV = 0x140E; + public const int INT64_VEC2_ARB = 0x8FE9; + public const int INT64_VEC2_NV = 0x8FE9; + public const int INT64_VEC3_ARB = 0x8FEA; + public const int INT64_VEC3_NV = 0x8FEA; + public const int INT64_VEC4_ARB = 0x8FEB; + public const int INT64_VEC4_NV = 0x8FEB; + public const int INT8_NV = 0x8FE0; + public const int INT8_VEC2_NV = 0x8FE1; + public const int INT8_VEC3_NV = 0x8FE2; + public const int INT8_VEC4_NV = 0x8FE3; + public const int INTENSITY12_EXT = 0x804C; + public const int INTENSITY16F_ARB = 0x881D; + public const int INTENSITY16I_EXT = 0x8D8B; + public const int INTENSITY16UI_EXT = 0x8D79; + public const int INTENSITY16_EXT = 0x804D; + public const int INTENSITY16_SNORM = 0x901B; + public const int INTENSITY32F_ARB = 0x8817; + public const int INTENSITY32I_EXT = 0x8D85; + public const int INTENSITY32UI_EXT = 0x8D73; + public const int INTENSITY4_EXT = 0x804A; + public const int INTENSITY8I_EXT = 0x8D91; + public const int INTENSITY8UI_EXT = 0x8D7F; + public const int INTENSITY8_EXT = 0x804B; + public const int INTENSITY8_SNORM = 0x9017; + public const int INTENSITY_EXT = 0x8049; + public const int INTENSITY_FLOAT16_APPLE = 0x881D; + public const int INTENSITY_FLOAT16_ATI = 0x881D; + public const int INTENSITY_FLOAT32_APPLE = 0x8817; + public const int INTENSITY_FLOAT32_ATI = 0x8817; + public const int INTENSITY_SNORM = 0x9013; + public const int INTERLACE_OML = 0x8980; + public const int INTERLACE_READ_INGR = 0x8568; + public const int INTERLACE_READ_OML = 0x8981; + public const int INTERLACE_SGIX = 0x8094; + public const int INTERLEAVED_ATTRIBS = 0x8C8C; + public const int INTERLEAVED_ATTRIBS_EXT = 0x8C8C; + public const int INTERLEAVED_ATTRIBS_NV = 0x8C8C; + public const int INTERNALFORMAT_ALPHA_SIZE = 0x8274; + public const int INTERNALFORMAT_ALPHA_TYPE = 0x827B; + public const int INTERNALFORMAT_BLUE_SIZE = 0x8273; + public const int INTERNALFORMAT_BLUE_TYPE = 0x827A; + public const int INTERNALFORMAT_DEPTH_SIZE = 0x8275; + public const int INTERNALFORMAT_DEPTH_TYPE = 0x827C; + public const int INTERNALFORMAT_GREEN_SIZE = 0x8272; + public const int INTERNALFORMAT_GREEN_TYPE = 0x8279; + public const int INTERNALFORMAT_PREFERRED = 0x8270; + public const int INTERNALFORMAT_RED_SIZE = 0x8271; + public const int INTERNALFORMAT_RED_TYPE = 0x8278; + public const int INTERNALFORMAT_SHARED_SIZE = 0x8277; + public const int INTERNALFORMAT_STENCIL_SIZE = 0x8276; + public const int INTERNALFORMAT_STENCIL_TYPE = 0x827D; + public const int INTERNALFORMAT_SUPPORTED = 0x826F; + public const int INTERPOLATE_ARB = 0x8575; + public const int INTERPOLATE_EXT = 0x8575; + public const int INT_2_10_10_10_REV = 0x8D9F; + public const int INT_IMAGE_1D = 0x9057; + public const int INT_IMAGE_1D_ARRAY = 0x905D; + public const int INT_IMAGE_1D_ARRAY_EXT = 0x905D; + public const int INT_IMAGE_1D_EXT = 0x9057; + public const int INT_IMAGE_2D = 0x9058; + public const int INT_IMAGE_2D_ARRAY = 0x905E; + public const int INT_IMAGE_2D_ARRAY_EXT = 0x905E; + public const int INT_IMAGE_2D_EXT = 0x9058; + public const int INT_IMAGE_2D_MULTISAMPLE = 0x9060; + public const int INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061; + public const int INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x9061; + public const int INT_IMAGE_2D_MULTISAMPLE_EXT = 0x9060; + public const int INT_IMAGE_2D_RECT = 0x905A; + public const int INT_IMAGE_2D_RECT_EXT = 0x905A; + public const int INT_IMAGE_3D = 0x9059; + public const int INT_IMAGE_3D_EXT = 0x9059; + public const int INT_IMAGE_BUFFER = 0x905C; + public const int INT_IMAGE_BUFFER_EXT = 0x905C; + public const int INT_IMAGE_CUBE = 0x905B; + public const int INT_IMAGE_CUBE_EXT = 0x905B; + public const int INT_IMAGE_CUBE_MAP_ARRAY = 0x905F; + public const int INT_IMAGE_CUBE_MAP_ARRAY_EXT = 0x905F; + public const int INT_SAMPLER_1D = 0x8DC9; + public const int INT_SAMPLER_1D_ARRAY = 0x8DCE; + public const int INT_SAMPLER_1D_ARRAY_EXT = 0x8DCE; + public const int INT_SAMPLER_1D_EXT = 0x8DC9; + public const int INT_SAMPLER_2D = 0x8DCA; + public const int INT_SAMPLER_2D_ARRAY = 0x8DCF; + public const int INT_SAMPLER_2D_ARRAY_EXT = 0x8DCF; + public const int INT_SAMPLER_2D_EXT = 0x8DCA; + public const int INT_SAMPLER_2D_MULTISAMPLE = 0x9109; + public const int INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C; + public const int INT_SAMPLER_2D_RECT = 0x8DCD; + public const int INT_SAMPLER_2D_RECT_EXT = 0x8DCD; + public const int INT_SAMPLER_3D = 0x8DCB; + public const int INT_SAMPLER_3D_EXT = 0x8DCB; + public const int INT_SAMPLER_BUFFER = 0x8DD0; + public const int INT_SAMPLER_BUFFER_AMD = 0x9002; + public const int INT_SAMPLER_BUFFER_EXT = 0x8DD0; + public const int INT_SAMPLER_CUBE = 0x8DCC; + public const int INT_SAMPLER_CUBE_EXT = 0x8DCC; + public const int INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E; + public const int INT_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x900E; + public const int INT_SAMPLER_RENDERBUFFER_NV = 0x8E57; + public const int INT_VEC2 = 0x8B53; + public const int INT_VEC2_ARB = 0x8B53; + public const int INT_VEC3 = 0x8B54; + public const int INT_VEC3_ARB = 0x8B54; + public const int INT_VEC4 = 0x8B55; + public const int INT_VEC4_ARB = 0x8B55; + public const int INVALID_ENUM = 0x0500; + public const int INVALID_FRAMEBUFFER_OPERATION = 0x0506; + public const int INVALID_FRAMEBUFFER_OPERATION_EXT = 0x0506; + public const uint INVALID_INDEX = 0xFFFFFFFF; + public const int INVALID_OPERATION = 0x0502; + public const int INVALID_VALUE = 0x0501; + public const int INVARIANT_DATATYPE_EXT = 0x87EB; + public const int INVARIANT_EXT = 0x87C2; + public const int INVARIANT_VALUE_EXT = 0x87EA; + public const int INVERSE_NV = 0x862B; + public const int INVERSE_TRANSPOSE_NV = 0x862D; + public const int INVERT = 0x150A; + public const int INVERTED_SCREEN_W_REND = 0x8491; + public const int INVERT_OVG_NV = 0x92B4; + public const int INVERT_RGB_NV = 0x92A3; + public const int IR_INSTRUMENT1_SGIX = 0x817F; + public const int ISOLINES = 0x8E7A; + public const int IS_PER_PATCH = 0x92E7; + public const int IS_ROW_MAJOR = 0x9300; + public const int ITALIC_BIT_NV = 0x02; + public const int IUI_N3F_V2F_EXT = 0x81AF; + public const int IUI_N3F_V3F_EXT = 0x81B0; + public const int IUI_V2F_EXT = 0x81AD; + public const int IUI_V3F_EXT = 0x81AE; + public const int KEEP = 0x1E00; + public const int LARGE_CCW_ARC_TO_NV = 0x16; + public const int LARGE_CW_ARC_TO_NV = 0x18; + public const int LAST_VERTEX_CONVENTION = 0x8E4E; + public const int LAST_VERTEX_CONVENTION_EXT = 0x8E4E; + public const int LAST_VIDEO_CAPTURE_STATUS_NV = 0x9027; + public const int LAYER_NV = 0x8DAA; + public const int LAYER_PROVOKING_VERTEX = 0x825E; + public const int LAYOUT_COLOR_ATTACHMENT_EXT = 0x958E; + public const int LAYOUT_DEFAULT_INTEL = 0; + public const int LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT = 0x9531; + public const int LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT = 0x9530; + public const int LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT = 0x958F; + public const int LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT = 0x9590; + public const int LAYOUT_GENERAL_EXT = 0x958D; + public const int LAYOUT_LINEAR_CPU_CACHED_INTEL = 2; + public const int LAYOUT_LINEAR_INTEL = 1; + public const int LAYOUT_SHADER_READ_ONLY_EXT = 0x9591; + public const int LAYOUT_TRANSFER_DST_EXT = 0x9593; + public const int LAYOUT_TRANSFER_SRC_EXT = 0x9592; + public const int LEFT = 0x0406; + public const int LEQUAL = 0x0203; + public const int LERP_ATI = 0x8969; + public const int LESS = 0x0201; + public const int LGPU_SEPARATE_STORAGE_BIT_NVX = 0x0800; + public const int LIGHTEN_KHR = 0x9298; + public const int LIGHTEN_NV = 0x9298; + public const int LIGHT_ENV_MODE_SGIX = 0x8407; + public const int LIGHT_MODEL_COLOR_CONTROL_EXT = 0x81F8; + public const int LIGHT_MODEL_SPECULAR_VECTOR_APPLE = 0x85B0; + public const int LINE = 0x1B01; + public const int LINEAR = 0x2601; + public const int LINEARBURN_NV = 0x92A5; + public const int LINEARDODGE_NV = 0x92A4; + public const int LINEARLIGHT_NV = 0x92A7; + public const int LINEAR_CLIPMAP_LINEAR_SGIX = 0x8170; + public const int LINEAR_CLIPMAP_NEAREST_SGIX = 0x844F; + public const int LINEAR_DETAIL_ALPHA_SGIS = 0x8098; + public const int LINEAR_DETAIL_COLOR_SGIS = 0x8099; + public const int LINEAR_DETAIL_SGIS = 0x8097; + public const int LINEAR_MIPMAP_LINEAR = 0x2703; + public const int LINEAR_MIPMAP_NEAREST = 0x2701; + public const int LINEAR_SHARPEN_ALPHA_SGIS = 0x80AE; + public const int LINEAR_SHARPEN_COLOR_SGIS = 0x80AF; + public const int LINEAR_SHARPEN_SGIS = 0x80AD; + public const int LINEAR_TILING_EXT = 0x9585; + public const int LINES = 0x0001; + public const int LINES_ADJACENCY = 0x000A; + public const int LINES_ADJACENCY_ARB = 0x000A; + public const int LINES_ADJACENCY_EXT = 0x000A; + public const int LINE_LOOP = 0x0002; + public const int LINE_SMOOTH = 0x0B20; + public const int LINE_SMOOTH_HINT = 0x0C52; + public const int LINE_STRIP = 0x0003; + public const int LINE_STRIP_ADJACENCY = 0x000B; + public const int LINE_STRIP_ADJACENCY_ARB = 0x000B; + public const int LINE_STRIP_ADJACENCY_EXT = 0x000B; + public const int LINE_TO_NV = 0x04; + public const int LINE_WIDTH = 0x0B21; + public const int LINE_WIDTH_COMMAND_NV = 0x000D; + public const int LINE_WIDTH_GRANULARITY = 0x0B23; + public const int LINE_WIDTH_RANGE = 0x0B22; + public const int LINK_STATUS = 0x8B82; + public const int LIST_PRIORITY_SGIX = 0x8182; + public const int LOCAL_CONSTANT_DATATYPE_EXT = 0x87ED; + public const int LOCAL_CONSTANT_EXT = 0x87C3; + public const int LOCAL_CONSTANT_VALUE_EXT = 0x87EC; + public const int LOCAL_EXT = 0x87C4; + public const int LOCATION = 0x930E; + public const int LOCATION_COMPONENT = 0x934A; + public const int LOCATION_INDEX = 0x930F; + public const int LOGIC_OP_MODE = 0x0BF0; + public const int LOSE_CONTEXT_ON_RESET = 0x8252; + public const int LOSE_CONTEXT_ON_RESET_ARB = 0x8252; + public const int LOWER_LEFT = 0x8CA1; + public const int LOW_FLOAT = 0x8DF0; + public const int LOW_INT = 0x8DF3; + public const int LO_BIAS_NV = 0x8715; + public const int LO_SCALE_NV = 0x870F; + public const int LUID_SIZE_EXT = 8; + public const int LUMINANCE12_ALPHA12_EXT = 0x8047; + public const int LUMINANCE12_ALPHA4_EXT = 0x8046; + public const int LUMINANCE12_EXT = 0x8041; + public const int LUMINANCE16F_ARB = 0x881E; + public const int LUMINANCE16F_EXT = 0x881E; + public const int LUMINANCE16I_EXT = 0x8D8C; + public const int LUMINANCE16UI_EXT = 0x8D7A; + public const int LUMINANCE16_ALPHA16_EXT = 0x8048; + public const int LUMINANCE16_ALPHA16_SNORM = 0x901A; + public const int LUMINANCE16_EXT = 0x8042; + public const int LUMINANCE16_SNORM = 0x9019; + public const int LUMINANCE32F_ARB = 0x8818; + public const int LUMINANCE32F_EXT = 0x8818; + public const int LUMINANCE32I_EXT = 0x8D86; + public const int LUMINANCE32UI_EXT = 0x8D74; + public const int LUMINANCE4_ALPHA4_EXT = 0x8043; + public const int LUMINANCE4_EXT = 0x803F; + public const int LUMINANCE6_ALPHA2_EXT = 0x8044; + public const int LUMINANCE8I_EXT = 0x8D92; + public const int LUMINANCE8UI_EXT = 0x8D80; + public const int LUMINANCE8_ALPHA8_EXT = 0x8045; + public const int LUMINANCE8_ALPHA8_SNORM = 0x9016; + public const int LUMINANCE8_EXT = 0x8040; + public const int LUMINANCE8_SNORM = 0x9015; + public const int LUMINANCE_ALPHA16F_ARB = 0x881F; + public const int LUMINANCE_ALPHA16F_EXT = 0x881F; + public const int LUMINANCE_ALPHA16I_EXT = 0x8D8D; + public const int LUMINANCE_ALPHA16UI_EXT = 0x8D7B; + public const int LUMINANCE_ALPHA32F_ARB = 0x8819; + public const int LUMINANCE_ALPHA32F_EXT = 0x8819; + public const int LUMINANCE_ALPHA32I_EXT = 0x8D87; + public const int LUMINANCE_ALPHA32UI_EXT = 0x8D75; + public const int LUMINANCE_ALPHA8I_EXT = 0x8D93; + public const int LUMINANCE_ALPHA8UI_EXT = 0x8D81; + public const int LUMINANCE_ALPHA_FLOAT16_APPLE = 0x881F; + public const int LUMINANCE_ALPHA_FLOAT16_ATI = 0x881F; + public const int LUMINANCE_ALPHA_FLOAT32_APPLE = 0x8819; + public const int LUMINANCE_ALPHA_FLOAT32_ATI = 0x8819; + public const int LUMINANCE_ALPHA_INTEGER_EXT = 0x8D9D; + public const int LUMINANCE_ALPHA_SNORM = 0x9012; + public const int LUMINANCE_FLOAT16_APPLE = 0x881E; + public const int LUMINANCE_FLOAT16_ATI = 0x881E; + public const int LUMINANCE_FLOAT32_APPLE = 0x8818; + public const int LUMINANCE_FLOAT32_ATI = 0x8818; + public const int LUMINANCE_INTEGER_EXT = 0x8D9C; + public const int LUMINANCE_SNORM = 0x9011; + public const int MAD_ATI = 0x8968; + public const int MAGNITUDE_BIAS_NV = 0x8718; + public const int MAGNITUDE_SCALE_NV = 0x8712; + public const int MAJOR_VERSION = 0x821B; + public const int MANUAL_GENERATE_MIPMAP = 0x8294; + public const int MAP1_BINORMAL_EXT = 0x8446; + public const int MAP1_TANGENT_EXT = 0x8444; + public const int MAP1_VERTEX_ATTRIB0_4_NV = 0x8660; + public const int MAP1_VERTEX_ATTRIB10_4_NV = 0x866A; + public const int MAP1_VERTEX_ATTRIB11_4_NV = 0x866B; + public const int MAP1_VERTEX_ATTRIB12_4_NV = 0x866C; + public const int MAP1_VERTEX_ATTRIB13_4_NV = 0x866D; + public const int MAP1_VERTEX_ATTRIB14_4_NV = 0x866E; + public const int MAP1_VERTEX_ATTRIB15_4_NV = 0x866F; + public const int MAP1_VERTEX_ATTRIB1_4_NV = 0x8661; + public const int MAP1_VERTEX_ATTRIB2_4_NV = 0x8662; + public const int MAP1_VERTEX_ATTRIB3_4_NV = 0x8663; + public const int MAP1_VERTEX_ATTRIB4_4_NV = 0x8664; + public const int MAP1_VERTEX_ATTRIB5_4_NV = 0x8665; + public const int MAP1_VERTEX_ATTRIB6_4_NV = 0x8666; + public const int MAP1_VERTEX_ATTRIB7_4_NV = 0x8667; + public const int MAP1_VERTEX_ATTRIB8_4_NV = 0x8668; + public const int MAP1_VERTEX_ATTRIB9_4_NV = 0x8669; + public const int MAP2_BINORMAL_EXT = 0x8447; + public const int MAP2_TANGENT_EXT = 0x8445; + public const int MAP2_VERTEX_ATTRIB0_4_NV = 0x8670; + public const int MAP2_VERTEX_ATTRIB10_4_NV = 0x867A; + public const int MAP2_VERTEX_ATTRIB11_4_NV = 0x867B; + public const int MAP2_VERTEX_ATTRIB12_4_NV = 0x867C; + public const int MAP2_VERTEX_ATTRIB13_4_NV = 0x867D; + public const int MAP2_VERTEX_ATTRIB14_4_NV = 0x867E; + public const int MAP2_VERTEX_ATTRIB15_4_NV = 0x867F; + public const int MAP2_VERTEX_ATTRIB1_4_NV = 0x8671; + public const int MAP2_VERTEX_ATTRIB2_4_NV = 0x8672; + public const int MAP2_VERTEX_ATTRIB3_4_NV = 0x8673; + public const int MAP2_VERTEX_ATTRIB4_4_NV = 0x8674; + public const int MAP2_VERTEX_ATTRIB5_4_NV = 0x8675; + public const int MAP2_VERTEX_ATTRIB6_4_NV = 0x8676; + public const int MAP2_VERTEX_ATTRIB7_4_NV = 0x8677; + public const int MAP2_VERTEX_ATTRIB8_4_NV = 0x8678; + public const int MAP2_VERTEX_ATTRIB9_4_NV = 0x8679; + public const int MAP_ATTRIB_U_ORDER_NV = 0x86C3; + public const int MAP_ATTRIB_V_ORDER_NV = 0x86C4; + public const int MAP_COHERENT_BIT = 0x0080; + public const int MAP_FLUSH_EXPLICIT_BIT = 0x0010; + public const int MAP_INVALIDATE_BUFFER_BIT = 0x0008; + public const int MAP_INVALIDATE_RANGE_BIT = 0x0004; + public const int MAP_PERSISTENT_BIT = 0x0040; + public const int MAP_READ_BIT = 0x0001; + public const int MAP_TESSELLATION_NV = 0x86C2; + public const int MAP_UNSYNCHRONIZED_BIT = 0x0020; + public const int MAP_WRITE_BIT = 0x0002; + public const int MATERIAL_SIDE_HINT_PGI = 0x1A22C; + public const int MATRIX0_ARB = 0x88C0; + public const int MATRIX0_NV = 0x8630; + public const int MATRIX10_ARB = 0x88CA; + public const int MATRIX11_ARB = 0x88CB; + public const int MATRIX12_ARB = 0x88CC; + public const int MATRIX13_ARB = 0x88CD; + public const int MATRIX14_ARB = 0x88CE; + public const int MATRIX15_ARB = 0x88CF; + public const int MATRIX16_ARB = 0x88D0; + public const int MATRIX17_ARB = 0x88D1; + public const int MATRIX18_ARB = 0x88D2; + public const int MATRIX19_ARB = 0x88D3; + public const int MATRIX1_ARB = 0x88C1; + public const int MATRIX1_NV = 0x8631; + public const int MATRIX20_ARB = 0x88D4; + public const int MATRIX21_ARB = 0x88D5; + public const int MATRIX22_ARB = 0x88D6; + public const int MATRIX23_ARB = 0x88D7; + public const int MATRIX24_ARB = 0x88D8; + public const int MATRIX25_ARB = 0x88D9; + public const int MATRIX26_ARB = 0x88DA; + public const int MATRIX27_ARB = 0x88DB; + public const int MATRIX28_ARB = 0x88DC; + public const int MATRIX29_ARB = 0x88DD; + public const int MATRIX2_ARB = 0x88C2; + public const int MATRIX2_NV = 0x8632; + public const int MATRIX30_ARB = 0x88DE; + public const int MATRIX31_ARB = 0x88DF; + public const int MATRIX3_ARB = 0x88C3; + public const int MATRIX3_NV = 0x8633; + public const int MATRIX4_ARB = 0x88C4; + public const int MATRIX4_NV = 0x8634; + public const int MATRIX5_ARB = 0x88C5; + public const int MATRIX5_NV = 0x8635; + public const int MATRIX6_ARB = 0x88C6; + public const int MATRIX6_NV = 0x8636; + public const int MATRIX7_ARB = 0x88C7; + public const int MATRIX7_NV = 0x8637; + public const int MATRIX8_ARB = 0x88C8; + public const int MATRIX9_ARB = 0x88C9; + public const int MATRIX_EXT = 0x87C0; + public const int MATRIX_INDEX_ARRAY_ARB = 0x8844; + public const int MATRIX_INDEX_ARRAY_POINTER_ARB = 0x8849; + public const int MATRIX_INDEX_ARRAY_SIZE_ARB = 0x8846; + public const int MATRIX_INDEX_ARRAY_STRIDE_ARB = 0x8848; + public const int MATRIX_INDEX_ARRAY_TYPE_ARB = 0x8847; + public const int MATRIX_PALETTE_ARB = 0x8840; + public const int MATRIX_STRIDE = 0x92FF; + public const int MAT_AMBIENT_AND_DIFFUSE_BIT_PGI = 0x00200000; + public const int MAT_AMBIENT_BIT_PGI = 0x00100000; + public const int MAT_COLOR_INDEXES_BIT_PGI = 0x01000000; + public const int MAT_DIFFUSE_BIT_PGI = 0x00400000; + public const int MAT_EMISSION_BIT_PGI = 0x00800000; + public const int MAT_SHININESS_BIT_PGI = 0x02000000; + public const int MAT_SPECULAR_BIT_PGI = 0x04000000; + public const int MAX = 0x8008; + public const int MAX_3D_TEXTURE_SIZE = 0x8073; + public const int MAX_3D_TEXTURE_SIZE_EXT = 0x8073; + public const int MAX_4D_TEXTURE_SIZE_SGIS = 0x8138; + public const int MAX_ACTIVE_LIGHTS_SGIX = 0x8405; + public const int MAX_ARRAY_TEXTURE_LAYERS = 0x88FF; + public const int MAX_ARRAY_TEXTURE_LAYERS_EXT = 0x88FF; + public const int MAX_ASYNC_DRAW_PIXELS_SGIX = 0x8360; + public const int MAX_ASYNC_HISTOGRAM_SGIX = 0x832D; + public const int MAX_ASYNC_READ_PIXELS_SGIX = 0x8361; + public const int MAX_ASYNC_TEX_IMAGE_SGIX = 0x835F; + public const int MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC; + public const int MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8; + public const int MAX_BINDABLE_UNIFORM_SIZE_EXT = 0x8DED; + public const int MAX_CLIPMAP_DEPTH_SGIX = 0x8177; + public const int MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX = 0x8178; + public const int MAX_CLIP_DISTANCES = 0x0D32; + public const int MAX_COARSE_FRAGMENT_SAMPLES_NV = 0x955F; + public const int MAX_COLOR_ATTACHMENTS = 0x8CDF; + public const int MAX_COLOR_ATTACHMENTS_EXT = 0x8CDF; + public const int MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD = 0x91B3; + public const int MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD = 0x91B4; + public const int MAX_COLOR_MATRIX_STACK_DEPTH_SGI = 0x80B3; + public const int MAX_COLOR_TEXTURE_SAMPLES = 0x910E; + public const int MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7; + public const int MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1; + public const int MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x82FA; + public const int MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266; + public const int MAX_COMBINED_DIMENSIONS = 0x8282; + public const int MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33; + public const int MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32; + public const int MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF; + public const int MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39; + public const int MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT = 0x8F39; + public const int MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV = 0x8E67; + public const int MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x8F39; + public const int MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x90DC; + public const int MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV = 0x8E6F; + public const int MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E; + public const int MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F; + public const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; + public const int MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB = 0x8B4D; + public const int MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E; + public const int MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31; + public const int MAX_COMPUTE_ATOMIC_COUNTERS = 0x8265; + public const int MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x8264; + public const int MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB = 0x90EB; + public const int MAX_COMPUTE_FIXED_GROUP_SIZE_ARB = 0x91BF; + public const int MAX_COMPUTE_IMAGE_UNIFORMS = 0x91BD; + public const int MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x90DB; + public const int MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x8262; + public const int MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x91BC; + public const int MAX_COMPUTE_UNIFORM_BLOCKS = 0x91BB; + public const int MAX_COMPUTE_UNIFORM_COMPONENTS = 0x8263; + public const int MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB = 0x9344; + public const int MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB = 0x9345; + public const int MAX_COMPUTE_WORK_GROUP_COUNT = 0x91BE; + public const int MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x90EB; + public const int MAX_COMPUTE_WORK_GROUP_SIZE = 0x91BF; + public const int MAX_CONVOLUTION_HEIGHT_EXT = 0x801B; + public const int MAX_CONVOLUTION_WIDTH_EXT = 0x801A; + public const int MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; + public const int MAX_CUBE_MAP_TEXTURE_SIZE_ARB = 0x851C; + public const int MAX_CUBE_MAP_TEXTURE_SIZE_EXT = 0x851C; + public const int MAX_CULL_DISTANCES = 0x82F9; + public const int MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C; + public const int MAX_DEBUG_LOGGED_MESSAGES = 0x9144; + public const int MAX_DEBUG_LOGGED_MESSAGES_AMD = 0x9144; + public const int MAX_DEBUG_LOGGED_MESSAGES_ARB = 0x9144; + public const int MAX_DEBUG_MESSAGE_LENGTH = 0x9143; + public const int MAX_DEBUG_MESSAGE_LENGTH_AMD = 0x9143; + public const int MAX_DEBUG_MESSAGE_LENGTH_ARB = 0x9143; + public const int MAX_DEEP_3D_TEXTURE_DEPTH_NV = 0x90D1; + public const int MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV = 0x90D0; + public const int MAX_DEFORMATION_ORDER_SGIX = 0x8197; + public const int MAX_DEPTH = 0x8280; + public const int MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD = 0x91B5; + public const int MAX_DEPTH_TEXTURE_SAMPLES = 0x910F; + public const int MAX_DETACHED_BUFFERS_NV = 0x95AD; + public const int MAX_DETACHED_TEXTURES_NV = 0x95AC; + public const int MAX_DRAW_BUFFERS = 0x8824; + public const int MAX_DRAW_BUFFERS_ARB = 0x8824; + public const int MAX_DRAW_BUFFERS_ATI = 0x8824; + public const int MAX_DRAW_MESH_TASKS_COUNT_NV = 0x953D; + public const int MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC; + public const int MAX_ELEMENTS_INDICES = 0x80E9; + public const int MAX_ELEMENTS_INDICES_EXT = 0x80E9; + public const int MAX_ELEMENTS_VERTICES = 0x80E8; + public const int MAX_ELEMENTS_VERTICES_EXT = 0x80E8; + public const int MAX_ELEMENT_INDEX = 0x8D6B; + public const int MAX_EXT = 0x8008; + public const int MAX_FOG_FUNC_POINTS_SGIS = 0x812C; + public const int MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6; + public const int MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0; + public const int MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT = 0x8DE3; + public const int MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE; + public const int MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125; + public const int MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C; + public const int MAX_FRAGMENT_INTERPOLATION_OFFSET_NV = 0x8E5C; + public const int MAX_FRAGMENT_LIGHTS_SGIX = 0x8404; + public const int MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = 0x8868; + public const int MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x90DA; + public const int MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D; + public const int MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49; + public const int MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB = 0x8B49; + public const int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; + public const int MAX_FRAMEBUFFER_HEIGHT = 0x9316; + public const int MAX_FRAMEBUFFER_LAYERS = 0x9317; + public const int MAX_FRAMEBUFFER_SAMPLES = 0x9318; + public const int MAX_FRAMEBUFFER_WIDTH = 0x9315; + public const int MAX_FRAMEZOOM_FACTOR_SGIX = 0x818D; + public const int MAX_GENERAL_COMBINERS_NV = 0x854D; + public const int MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5; + public const int MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF; + public const int MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT = 0x8DE4; + public const int MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD; + public const int MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123; + public const int MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124; + public const int MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0; + public const int MAX_GEOMETRY_OUTPUT_VERTICES_ARB = 0x8DE0; + public const int MAX_GEOMETRY_OUTPUT_VERTICES_EXT = 0x8DE0; + public const int MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV = 0x8E5A; + public const int MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A; + public const int MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x90D7; + public const int MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29; + public const int MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB = 0x8C29; + public const int MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = 0x8C29; + public const int MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1; + public const int MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB = 0x8DE1; + public const int MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = 0x8DE1; + public const int MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C; + public const int MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF; + public const int MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB = 0x8DDF; + public const int MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = 0x8DDF; + public const int MAX_GEOMETRY_VARYING_COMPONENTS_ARB = 0x8DDD; + public const int MAX_GEOMETRY_VARYING_COMPONENTS_EXT = 0x8DDD; + public const int MAX_HEIGHT = 0x827F; + public const int MAX_IMAGE_SAMPLES = 0x906D; + public const int MAX_IMAGE_SAMPLES_EXT = 0x906D; + public const int MAX_IMAGE_UNITS = 0x8F38; + public const int MAX_IMAGE_UNITS_EXT = 0x8F38; + public const int MAX_INTEGER_SAMPLES = 0x9110; + public const int MAX_LABEL_LENGTH = 0x82E8; + public const int MAX_LAYERS = 0x8281; + public const int MAX_LGPU_GPUS_NVX = 0x92BA; + public const int MAX_MAP_TESSELLATION_NV = 0x86D6; + public const int MAX_MATRIX_PALETTE_STACK_DEPTH_ARB = 0x8841; + public const int MAX_MESH_ATOMIC_COUNTERS_NV = 0x8E65; + public const int MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV = 0x8E64; + public const int MAX_MESH_IMAGE_UNIFORMS_NV = 0x8E62; + public const int MAX_MESH_OUTPUT_PRIMITIVES_NV = 0x9539; + public const int MAX_MESH_OUTPUT_VERTICES_NV = 0x9538; + public const int MAX_MESH_SHADER_STORAGE_BLOCKS_NV = 0x8E66; + public const int MAX_MESH_TEXTURE_IMAGE_UNITS_NV = 0x8E61; + public const int MAX_MESH_TOTAL_MEMORY_SIZE_NV = 0x9536; + public const int MAX_MESH_UNIFORM_BLOCKS_NV = 0x8E60; + public const int MAX_MESH_UNIFORM_COMPONENTS_NV = 0x8E63; + public const int MAX_MESH_VIEWS_NV = 0x9557; + public const int MAX_MESH_WORK_GROUP_INVOCATIONS_NV = 0x95A2; + public const int MAX_MESH_WORK_GROUP_SIZE_NV = 0x953B; + public const int MAX_MULTISAMPLE_COVERAGE_MODES_NV = 0x8E11; + public const int MAX_NAME_LENGTH = 0x92F6; + public const int MAX_NUM_ACTIVE_VARIABLES = 0x92F7; + public const int MAX_NUM_COMPATIBLE_SUBROUTINES = 0x92F8; + public const int MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT = 0x87CA; + public const int MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT = 0x87CD; + public const int MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT = 0x87CE; + public const int MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 0x87CC; + public const int MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT = 0x87CB; + public const int MAX_PALETTE_MATRICES_ARB = 0x8842; + public const int MAX_PATCH_VERTICES = 0x8E7D; + public const int MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 0x8337; + public const int MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 0x87F1; + public const int MAX_PROGRAM_ADDRESS_REGISTERS_ARB = 0x88B1; + public const int MAX_PROGRAM_ALU_INSTRUCTIONS_ARB = 0x880B; + public const int MAX_PROGRAM_ATTRIBS_ARB = 0x88AD; + public const int MAX_PROGRAM_ATTRIB_COMPONENTS_NV = 0x8908; + public const int MAX_PROGRAM_CALL_DEPTH_NV = 0x88F5; + public const int MAX_PROGRAM_ENV_PARAMETERS_ARB = 0x88B5; + public const int MAX_PROGRAM_EXEC_INSTRUCTIONS_NV = 0x88F4; + public const int MAX_PROGRAM_GENERIC_ATTRIBS_NV = 0x8DA5; + public const int MAX_PROGRAM_GENERIC_RESULTS_NV = 0x8DA6; + public const int MAX_PROGRAM_IF_DEPTH_NV = 0x88F6; + public const int MAX_PROGRAM_INSTRUCTIONS_ARB = 0x88A1; + public const int MAX_PROGRAM_LOCAL_PARAMETERS_ARB = 0x88B4; + public const int MAX_PROGRAM_LOOP_COUNT_NV = 0x88F8; + public const int MAX_PROGRAM_LOOP_DEPTH_NV = 0x88F7; + public const int MAX_PROGRAM_MATRICES_ARB = 0x862F; + public const int MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB = 0x862E; + public const int MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 0x88B3; + public const int MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 0x880E; + public const int MAX_PROGRAM_NATIVE_ATTRIBS_ARB = 0x88AF; + public const int MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 0x88A3; + public const int MAX_PROGRAM_NATIVE_PARAMETERS_ARB = 0x88AB; + public const int MAX_PROGRAM_NATIVE_TEMPORARIES_ARB = 0x88A7; + public const int MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 0x8810; + public const int MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 0x880F; + public const int MAX_PROGRAM_OUTPUT_VERTICES_NV = 0x8C27; + public const int MAX_PROGRAM_PARAMETERS_ARB = 0x88A9; + public const int MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV = 0x8DA0; + public const int MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV = 0x8DA1; + public const int MAX_PROGRAM_PATCH_ATTRIBS_NV = 0x86D8; + public const int MAX_PROGRAM_RESULT_COMPONENTS_NV = 0x8909; + public const int MAX_PROGRAM_SUBROUTINE_NUM_NV = 0x8F45; + public const int MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV = 0x8F44; + public const int MAX_PROGRAM_TEMPORARIES_ARB = 0x88A5; + public const int MAX_PROGRAM_TEXEL_OFFSET = 0x8905; + public const int MAX_PROGRAM_TEXEL_OFFSET_EXT = 0x8905; + public const int MAX_PROGRAM_TEXEL_OFFSET_NV = 0x8905; + public const int MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB = 0x8F9F; + public const int MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F; + public const int MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = 0x8E5F; + public const int MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV = 0x8E5F; + public const int MAX_PROGRAM_TEX_INDIRECTIONS_ARB = 0x880D; + public const int MAX_PROGRAM_TEX_INSTRUCTIONS_ARB = 0x880C; + public const int MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV = 0x8C28; + public const int MAX_RASTER_SAMPLES_EXT = 0x9329; + public const int MAX_RATIONAL_EVAL_ORDER_NV = 0x86D7; + public const int MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8; + public const int MAX_RECTANGLE_TEXTURE_SIZE_ARB = 0x84F8; + public const int MAX_RECTANGLE_TEXTURE_SIZE_NV = 0x84F8; + public const int MAX_RENDERBUFFER_SIZE = 0x84E8; + public const int MAX_RENDERBUFFER_SIZE_EXT = 0x84E8; + public const int MAX_SAMPLES = 0x8D57; + public const int MAX_SAMPLES_EXT = 0x8D57; + public const int MAX_SAMPLE_MASK_WORDS = 0x8E59; + public const int MAX_SAMPLE_MASK_WORDS_NV = 0x8E59; + public const int MAX_SERVER_WAIT_TIMEOUT = 0x9111; + public const int MAX_SHADER_BUFFER_ADDRESS_NV = 0x8F35; + public const int MAX_SHADER_COMPILER_THREADS_ARB = 0x91B0; + public const int MAX_SHADER_COMPILER_THREADS_KHR = 0x91B0; + public const int MAX_SHADER_STORAGE_BLOCK_SIZE = 0x90DE; + public const int MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x90DD; + public const int MAX_SHININESS_NV = 0x8504; + public const int MAX_SPARSE_3D_TEXTURE_SIZE_AMD = 0x9199; + public const int MAX_SPARSE_3D_TEXTURE_SIZE_ARB = 0x9199; + public const int MAX_SPARSE_ARRAY_TEXTURE_LAYERS = 0x919A; + public const int MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB = 0x919A; + public const int MAX_SPARSE_TEXTURE_SIZE_AMD = 0x9198; + public const int MAX_SPARSE_TEXTURE_SIZE_ARB = 0x9198; + public const int MAX_SPOT_EXPONENT_NV = 0x8505; + public const int MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV = 0x9349; + public const int MAX_SUBROUTINES = 0x8DE7; + public const int MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8; + public const int MAX_TASK_ATOMIC_COUNTERS_NV = 0x8E6D; + public const int MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV = 0x8E6C; + public const int MAX_TASK_IMAGE_UNIFORMS_NV = 0x8E6A; + public const int MAX_TASK_OUTPUT_COUNT_NV = 0x953A; + public const int MAX_TASK_SHADER_STORAGE_BLOCKS_NV = 0x8E6E; + public const int MAX_TASK_TEXTURE_IMAGE_UNITS_NV = 0x8E69; + public const int MAX_TASK_TOTAL_MEMORY_SIZE_NV = 0x9537; + public const int MAX_TASK_UNIFORM_BLOCKS_NV = 0x8E68; + public const int MAX_TASK_UNIFORM_COMPONENTS_NV = 0x8E6B; + public const int MAX_TASK_WORK_GROUP_INVOCATIONS_NV = 0x95A3; + public const int MAX_TASK_WORK_GROUP_SIZE_NV = 0x953C; + public const int MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3; + public const int MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD; + public const int MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB; + public const int MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C; + public const int MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83; + public const int MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x90D8; + public const int MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81; + public const int MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85; + public const int MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89; + public const int MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F; + public const int MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4; + public const int MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE; + public const int MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC; + public const int MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D; + public const int MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86; + public const int MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x90D9; + public const int MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82; + public const int MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A; + public const int MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80; + public const int MAX_TESS_GEN_LEVEL = 0x8E7E; + public const int MAX_TESS_PATCH_COMPONENTS = 0x8E84; + public const int MAX_TEXTURE_BUFFER_SIZE = 0x8C2B; + public const int MAX_TEXTURE_BUFFER_SIZE_ARB = 0x8C2B; + public const int MAX_TEXTURE_BUFFER_SIZE_EXT = 0x8C2B; + public const int MAX_TEXTURE_COORDS_ARB = 0x8871; + public const int MAX_TEXTURE_COORDS_NV = 0x8871; + public const int MAX_TEXTURE_IMAGE_UNITS = 0x8872; + public const int MAX_TEXTURE_IMAGE_UNITS_ARB = 0x8872; + public const int MAX_TEXTURE_IMAGE_UNITS_NV = 0x8872; + public const int MAX_TEXTURE_LOD_BIAS = 0x84FD; + public const int MAX_TEXTURE_LOD_BIAS_EXT = 0x84FD; + public const int MAX_TEXTURE_MAX_ANISOTROPY = 0x84FF; + public const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF; + public const int MAX_TEXTURE_SIZE = 0x0D33; + public const int MAX_TEXTURE_UNITS_ARB = 0x84E2; + public const int MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV = 0x95B6; + public const int MAX_TRACK_MATRICES_NV = 0x862F; + public const int MAX_TRACK_MATRIX_STACK_DEPTH_NV = 0x862E; + public const int MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70; + public const int MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A; + public const int MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT = 0x8C8A; + public const int MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV = 0x8C8A; + public const int MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B; + public const int MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT = 0x8C8B; + public const int MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV = 0x8C8B; + public const int MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80; + public const int MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT = 0x8C80; + public const int MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV = 0x8C80; + public const int MAX_UNIFORM_BLOCK_SIZE = 0x8A30; + public const int MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F; + public const int MAX_UNIFORM_LOCATIONS = 0x826E; + public const int MAX_VARYING_COMPONENTS = 0x8B4B; + public const int MAX_VARYING_COMPONENTS_EXT = 0x8B4B; + public const int MAX_VARYING_FLOATS = 0x8B4B; + public const int MAX_VARYING_FLOATS_ARB = 0x8B4B; + public const int MAX_VARYING_VECTORS = 0x8DFC; + public const int MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV = 0x8520; + public const int MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2; + public const int MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC; + public const int MAX_VERTEX_ATTRIBS = 0x8869; + public const int MAX_VERTEX_ATTRIBS_ARB = 0x8869; + public const int MAX_VERTEX_ATTRIB_BINDINGS = 0x82DA; + public const int MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D9; + public const int MAX_VERTEX_ATTRIB_STRIDE = 0x82E5; + public const int MAX_VERTEX_BINDABLE_UNIFORMS_EXT = 0x8DE2; + public const int MAX_VERTEX_HINT_PGI = 0x1A22D; + public const int MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA; + public const int MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122; + public const int MAX_VERTEX_SHADER_INSTRUCTIONS_EXT = 0x87C5; + public const int MAX_VERTEX_SHADER_INVARIANTS_EXT = 0x87C7; + public const int MAX_VERTEX_SHADER_LOCALS_EXT = 0x87C9; + public const int MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 0x87C8; + public const int MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x90D6; + public const int MAX_VERTEX_SHADER_VARIANTS_EXT = 0x87C6; + public const int MAX_VERTEX_STREAMS = 0x8E71; + public const int MAX_VERTEX_STREAMS_ATI = 0x876B; + public const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; + public const int MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = 0x8B4C; + public const int MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B; + public const int MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A; + public const int MAX_VERTEX_UNIFORM_COMPONENTS_ARB = 0x8B4A; + public const int MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; + public const int MAX_VERTEX_UNITS_ARB = 0x86A4; + public const int MAX_VERTEX_VARYING_COMPONENTS_ARB = 0x8DDE; + public const int MAX_VERTEX_VARYING_COMPONENTS_EXT = 0x8DDE; + public const int MAX_VIEWPORTS = 0x825B; + public const int MAX_VIEWPORT_DIMS = 0x0D3A; + public const int MAX_VIEWS_OVR = 0x9631; + public const int MAX_WIDTH = 0x827E; + public const int MAX_WINDOW_RECTANGLES_EXT = 0x8F14; + public const int MEDIUM_FLOAT = 0x8DF1; + public const int MEDIUM_INT = 0x8DF4; + public const int MEMORY_ATTACHABLE_ALIGNMENT_NV = 0x95A6; + public const int MEMORY_ATTACHABLE_NV = 0x95A8; + public const int MEMORY_ATTACHABLE_SIZE_NV = 0x95A7; + public const int MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV = 0x9543; + public const int MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV = 0x92DF; + public const int MESH_OUTPUT_TYPE_NV = 0x957B; + public const int MESH_PRIMITIVES_OUT_NV = 0x957A; + public const int MESH_SHADER_BIT_NV = 0x00000040; + public const int MESH_SHADER_NV = 0x9559; + public const int MESH_SUBROUTINE_NV = 0x957C; + public const int MESH_SUBROUTINE_UNIFORM_NV = 0x957E; + public const int MESH_VERTICES_OUT_NV = 0x9579; + public const int MESH_WORK_GROUP_SIZE_NV = 0x953E; + public const int MIN = 0x8007; + public const int MINMAX_EXT = 0x802E; + public const int MINMAX_FORMAT_EXT = 0x802F; + public const int MINMAX_SINK_EXT = 0x8030; + public const int MINOR_VERSION = 0x821C; + public const int MINUS_CLAMPED_NV = 0x92B3; + public const int MINUS_NV = 0x929F; + public const int MIN_EXT = 0x8007; + public const int MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B; + public const int MIN_FRAGMENT_INTERPOLATION_OFFSET_NV = 0x8E5B; + public const int MIN_LOD_WARNING_AMD = 0x919C; + public const int MIN_MAP_BUFFER_ALIGNMENT = 0x90BC; + public const int MIN_PROGRAM_TEXEL_OFFSET = 0x8904; + public const int MIN_PROGRAM_TEXEL_OFFSET_EXT = 0x8904; + public const int MIN_PROGRAM_TEXEL_OFFSET_NV = 0x8904; + public const int MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E; + public const int MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = 0x8E5E; + public const int MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV = 0x8E5E; + public const int MIN_SAMPLE_SHADING_VALUE = 0x8C37; + public const int MIN_SAMPLE_SHADING_VALUE_ARB = 0x8C37; + public const int MIN_SPARSE_LEVEL_AMD = 0x919B; + public const int MIPMAP = 0x8293; + public const int MIRRORED_REPEAT = 0x8370; + public const int MIRRORED_REPEAT_ARB = 0x8370; + public const int MIRRORED_REPEAT_IBM = 0x8370; + public const int MIRROR_CLAMP_ATI = 0x8742; + public const int MIRROR_CLAMP_EXT = 0x8742; + public const int MIRROR_CLAMP_TO_BORDER_EXT = 0x8912; + public const int MIRROR_CLAMP_TO_EDGE = 0x8743; + public const int MIRROR_CLAMP_TO_EDGE_ATI = 0x8743; + public const int MIRROR_CLAMP_TO_EDGE_EXT = 0x8743; + public const int MITER_REVERT_NV = 0x90A7; + public const int MITER_TRUNCATE_NV = 0x90A8; + public const int MIXED_DEPTH_SAMPLES_SUPPORTED_NV = 0x932F; + public const int MIXED_STENCIL_SAMPLES_SUPPORTED_NV = 0x9330; + public const int MODELVIEW0_ARB = 0x1700; + public const int MODELVIEW0_EXT = 0x1700; + public const int MODELVIEW0_MATRIX_EXT = 0x0BA6; + public const int MODELVIEW0_STACK_DEPTH_EXT = 0x0BA3; + public const int MODELVIEW10_ARB = 0x872A; + public const int MODELVIEW11_ARB = 0x872B; + public const int MODELVIEW12_ARB = 0x872C; + public const int MODELVIEW13_ARB = 0x872D; + public const int MODELVIEW14_ARB = 0x872E; + public const int MODELVIEW15_ARB = 0x872F; + public const int MODELVIEW16_ARB = 0x8730; + public const int MODELVIEW17_ARB = 0x8731; + public const int MODELVIEW18_ARB = 0x8732; + public const int MODELVIEW19_ARB = 0x8733; + public const int MODELVIEW1_ARB = 0x850A; + public const int MODELVIEW1_EXT = 0x850A; + public const int MODELVIEW1_MATRIX_EXT = 0x8506; + public const int MODELVIEW1_STACK_DEPTH_EXT = 0x8502; + public const int MODELVIEW20_ARB = 0x8734; + public const int MODELVIEW21_ARB = 0x8735; + public const int MODELVIEW22_ARB = 0x8736; + public const int MODELVIEW23_ARB = 0x8737; + public const int MODELVIEW24_ARB = 0x8738; + public const int MODELVIEW25_ARB = 0x8739; + public const int MODELVIEW26_ARB = 0x873A; + public const int MODELVIEW27_ARB = 0x873B; + public const int MODELVIEW28_ARB = 0x873C; + public const int MODELVIEW29_ARB = 0x873D; + public const int MODELVIEW2_ARB = 0x8722; + public const int MODELVIEW30_ARB = 0x873E; + public const int MODELVIEW31_ARB = 0x873F; + public const int MODELVIEW3_ARB = 0x8723; + public const int MODELVIEW4_ARB = 0x8724; + public const int MODELVIEW5_ARB = 0x8725; + public const int MODELVIEW6_ARB = 0x8726; + public const int MODELVIEW7_ARB = 0x8727; + public const int MODELVIEW8_ARB = 0x8728; + public const int MODELVIEW9_ARB = 0x8729; + public const int MODELVIEW_PROJECTION_NV = 0x8629; + public const int MODULATE_ADD_ATI = 0x8744; + public const int MODULATE_SIGNED_ADD_ATI = 0x8745; + public const int MODULATE_SUBTRACT_ATI = 0x8746; + public const int MOVE_TO_CONTINUES_NV = 0x90B6; + public const int MOVE_TO_NV = 0x02; + public const int MOVE_TO_RESETS_NV = 0x90B5; + public const int MOV_ATI = 0x8961; + public const int MULTICAST_GPUS_NV = 0x92BA; + public const int MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV = 0x9549; + public const int MULTIPLY_KHR = 0x9294; + public const int MULTIPLY_NV = 0x9294; + public const int MULTISAMPLE = 0x809D; + public const int MULTISAMPLES_NV = 0x9371; + public const int MULTISAMPLE_3DFX = 0x86B2; + public const int MULTISAMPLE_ARB = 0x809D; + public const int MULTISAMPLE_BIT_3DFX = 0x20000000; + public const int MULTISAMPLE_BIT_ARB = 0x20000000; + public const int MULTISAMPLE_BIT_EXT = 0x20000000; + public const int MULTISAMPLE_COVERAGE_MODES_NV = 0x8E12; + public const int MULTISAMPLE_EXT = 0x809D; + public const int MULTISAMPLE_FILTER_HINT_NV = 0x8534; + public const int MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB = 0x9382; + public const int MULTISAMPLE_LINE_WIDTH_RANGE_ARB = 0x9381; + public const int MULTISAMPLE_RASTERIZATION_ALLOWED_EXT = 0x932B; + public const int MULTISAMPLE_SGIS = 0x809D; + public const int MUL_ATI = 0x8964; + public const int MVP_MATRIX_EXT = 0x87E3; + public const int NAMED_STRING_LENGTH_ARB = 0x8DE9; + public const int NAMED_STRING_TYPE_ARB = 0x8DEA; + public const int NAME_LENGTH = 0x92F9; + public const int NAND = 0x150E; + public const int NATIVE_GRAPHICS_BEGIN_HINT_PGI = 0x1A203; + public const int NATIVE_GRAPHICS_END_HINT_PGI = 0x1A204; + public const int NATIVE_GRAPHICS_HANDLE_PGI = 0x1A202; + public const int NEAREST = 0x2600; + public const int NEAREST_CLIPMAP_LINEAR_SGIX = 0x844E; + public const int NEAREST_CLIPMAP_NEAREST_SGIX = 0x844D; + public const int NEAREST_MIPMAP_LINEAR = 0x2702; + public const int NEAREST_MIPMAP_NEAREST = 0x2700; + public const int NEGATE_BIT_ATI = 0x00000004; + public const int NEGATIVE_ONE_EXT = 0x87DF; + public const int NEGATIVE_ONE_TO_ONE = 0x935E; + public const int NEGATIVE_W_EXT = 0x87DC; + public const int NEGATIVE_X_EXT = 0x87D9; + public const int NEGATIVE_Y_EXT = 0x87DA; + public const int NEGATIVE_Z_EXT = 0x87DB; + public const int NEVER = 0x0200; + public const int NEXT_BUFFER_NV = -2; + public const int NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV = 0x9025; + public const int NICEST = 0x1102; + public const int NONE = 0; + public const int NOOP = 0x1505; + public const int NOP_COMMAND_NV = 0x0001; + public const int NOR = 0x1508; + public const int NORMALIZED_RANGE_EXT = 0x87E0; + public const int NORMAL_ARRAY_ADDRESS_NV = 0x8F22; + public const int NORMAL_ARRAY_BUFFER_BINDING_ARB = 0x8897; + public const int NORMAL_ARRAY_COUNT_EXT = 0x8080; + public const int NORMAL_ARRAY_EXT = 0x8075; + public const int NORMAL_ARRAY_LENGTH_NV = 0x8F2C; + public const int NORMAL_ARRAY_LIST_IBM = 103071; + public const int NORMAL_ARRAY_LIST_STRIDE_IBM = 103081; + public const int NORMAL_ARRAY_PARALLEL_POINTERS_INTEL = 0x83F6; + public const int NORMAL_ARRAY_POINTER_EXT = 0x808F; + public const int NORMAL_ARRAY_STRIDE_EXT = 0x807F; + public const int NORMAL_ARRAY_TYPE_EXT = 0x807E; + public const int NORMAL_BIT_PGI = 0x08000000; + public const int NORMAL_MAP_ARB = 0x8511; + public const int NORMAL_MAP_EXT = 0x8511; + public const int NORMAL_MAP_NV = 0x8511; + public const int NOTEQUAL = 0x0205; + public const int NO_ERROR = 0; + public const int NO_RESET_NOTIFICATION = 0x8261; + public const int NO_RESET_NOTIFICATION_ARB = 0x8261; + public const int NUM_ACTIVE_VARIABLES = 0x9304; + public const int NUM_COMPATIBLE_SUBROUTINES = 0x8E4A; + public const int NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2; + public const int NUM_COMPRESSED_TEXTURE_FORMATS_ARB = 0x86A2; + public const int NUM_DEVICE_UUIDS_EXT = 0x9596; + public const int NUM_EXTENSIONS = 0x821D; + public const int NUM_FILL_STREAMS_NV = 0x8E29; + public const int NUM_FRAGMENT_CONSTANTS_ATI = 0x896F; + public const int NUM_FRAGMENT_REGISTERS_ATI = 0x896E; + public const int NUM_GENERAL_COMBINERS_NV = 0x854E; + public const int NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI = 0x8973; + public const int NUM_INSTRUCTIONS_PER_PASS_ATI = 0x8971; + public const int NUM_INSTRUCTIONS_TOTAL_ATI = 0x8972; + public const int NUM_LOOPBACK_COMPONENTS_ATI = 0x8974; + public const int NUM_PASSES_ATI = 0x8970; + public const int NUM_PROGRAM_BINARY_FORMATS = 0x87FE; + public const int NUM_SAMPLE_COUNTS = 0x9380; + public const int NUM_SHADER_BINARY_FORMATS = 0x8DF9; + public const int NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9; + public const int NUM_SPARSE_LEVELS_ARB = 0x91AA; + public const int NUM_SPIR_V_EXTENSIONS = 0x9554; + public const int NUM_SUPPORTED_MULTISAMPLE_MODES_AMD = 0x91B6; + public const int NUM_TILING_TYPES_EXT = 0x9582; + public const int NUM_VIDEO_CAPTURE_STREAMS_NV = 0x9024; + public const int NUM_VIRTUAL_PAGE_SIZES_ARB = 0x91A8; + public const int NUM_WINDOW_RECTANGLES_EXT = 0x8F15; + public const int OBJECT_ACTIVE_ATTRIBUTES_ARB = 0x8B89; + public const int OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB = 0x8B8A; + public const int OBJECT_ACTIVE_UNIFORMS_ARB = 0x8B86; + public const int OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = 0x8B87; + public const int OBJECT_ATTACHED_OBJECTS_ARB = 0x8B85; + public const int OBJECT_BUFFER_SIZE_ATI = 0x8764; + public const int OBJECT_BUFFER_USAGE_ATI = 0x8765; + public const int OBJECT_COMPILE_STATUS_ARB = 0x8B81; + public const int OBJECT_DELETE_STATUS_ARB = 0x8B80; + public const int OBJECT_DISTANCE_TO_LINE_SGIS = 0x81F3; + public const int OBJECT_DISTANCE_TO_POINT_SGIS = 0x81F1; + public const int OBJECT_INFO_LOG_LENGTH_ARB = 0x8B84; + public const int OBJECT_LINE_SGIS = 0x81F7; + public const int OBJECT_LINK_STATUS_ARB = 0x8B82; + public const int OBJECT_POINT_SGIS = 0x81F5; + public const int OBJECT_SHADER_SOURCE_LENGTH_ARB = 0x8B88; + public const int OBJECT_SUBTYPE_ARB = 0x8B4F; + public const int OBJECT_TYPE = 0x9112; + public const int OBJECT_TYPE_ARB = 0x8B4E; + public const int OBJECT_VALIDATE_STATUS_ARB = 0x8B83; + public const int OCCLUSION_QUERY_EVENT_MASK_AMD = 0x874F; + public const int OCCLUSION_TEST_HP = 0x8165; + public const int OCCLUSION_TEST_RESULT_HP = 0x8166; + public const int OFFSET = 0x92FC; + public const int OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV = 0x8856; + public const int OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV = 0x8857; + public const int OFFSET_HILO_TEXTURE_2D_NV = 0x8854; + public const int OFFSET_HILO_TEXTURE_RECTANGLE_NV = 0x8855; + public const int OFFSET_PROJECTIVE_TEXTURE_2D_NV = 0x8850; + public const int OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV = 0x8851; + public const int OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV = 0x8852; + public const int OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV = 0x8853; + public const int OFFSET_TEXTURE_2D_BIAS_NV = 0x86E3; + public const int OFFSET_TEXTURE_2D_MATRIX_NV = 0x86E1; + public const int OFFSET_TEXTURE_2D_NV = 0x86E8; + public const int OFFSET_TEXTURE_2D_SCALE_NV = 0x86E2; + public const int OFFSET_TEXTURE_BIAS_NV = 0x86E3; + public const int OFFSET_TEXTURE_MATRIX_NV = 0x86E1; + public const int OFFSET_TEXTURE_RECTANGLE_NV = 0x864C; + public const int OFFSET_TEXTURE_RECTANGLE_SCALE_NV = 0x864D; + public const int OFFSET_TEXTURE_SCALE_NV = 0x86E2; + public const int ONE = 1; + public const int ONE_EXT = 0x87DE; + public const int ONE_MINUS_CONSTANT_ALPHA = 0x8004; + public const int ONE_MINUS_CONSTANT_ALPHA_EXT = 0x8004; + public const int ONE_MINUS_CONSTANT_COLOR = 0x8002; + public const int ONE_MINUS_CONSTANT_COLOR_EXT = 0x8002; + public const int ONE_MINUS_DST_ALPHA = 0x0305; + public const int ONE_MINUS_DST_COLOR = 0x0307; + public const int ONE_MINUS_SRC1_ALPHA = 0x88FB; + public const int ONE_MINUS_SRC1_COLOR = 0x88FA; + public const int ONE_MINUS_SRC_ALPHA = 0x0303; + public const int ONE_MINUS_SRC_COLOR = 0x0301; + public const int OPERAND0_ALPHA_ARB = 0x8598; + public const int OPERAND0_ALPHA_EXT = 0x8598; + public const int OPERAND0_RGB_ARB = 0x8590; + public const int OPERAND0_RGB_EXT = 0x8590; + public const int OPERAND1_ALPHA_ARB = 0x8599; + public const int OPERAND1_ALPHA_EXT = 0x8599; + public const int OPERAND1_RGB_ARB = 0x8591; + public const int OPERAND1_RGB_EXT = 0x8591; + public const int OPERAND2_ALPHA_ARB = 0x859A; + public const int OPERAND2_ALPHA_EXT = 0x859A; + public const int OPERAND2_RGB_ARB = 0x8592; + public const int OPERAND2_RGB_EXT = 0x8592; + public const int OPERAND3_ALPHA_NV = 0x859B; + public const int OPERAND3_RGB_NV = 0x8593; + public const int OPTIMAL_TILING_EXT = 0x9584; + public const int OP_ADD_EXT = 0x8787; + public const int OP_CLAMP_EXT = 0x878E; + public const int OP_CROSS_PRODUCT_EXT = 0x8797; + public const int OP_DOT3_EXT = 0x8784; + public const int OP_DOT4_EXT = 0x8785; + public const int OP_EXP_BASE_2_EXT = 0x8791; + public const int OP_FLOOR_EXT = 0x878F; + public const int OP_FRAC_EXT = 0x8789; + public const int OP_INDEX_EXT = 0x8782; + public const int OP_LOG_BASE_2_EXT = 0x8792; + public const int OP_MADD_EXT = 0x8788; + public const int OP_MAX_EXT = 0x878A; + public const int OP_MIN_EXT = 0x878B; + public const int OP_MOV_EXT = 0x8799; + public const int OP_MULTIPLY_MATRIX_EXT = 0x8798; + public const int OP_MUL_EXT = 0x8786; + public const int OP_NEGATE_EXT = 0x8783; + public const int OP_POWER_EXT = 0x8793; + public const int OP_RECIP_EXT = 0x8794; + public const int OP_RECIP_SQRT_EXT = 0x8795; + public const int OP_ROUND_EXT = 0x8790; + public const int OP_SET_GE_EXT = 0x878C; + public const int OP_SET_LT_EXT = 0x878D; + public const int OP_SUB_EXT = 0x8796; + public const int OR = 0x1507; + public const int OR_INVERTED = 0x150D; + public const int OR_REVERSE = 0x150B; + public const int OUTPUT_COLOR0_EXT = 0x879B; + public const int OUTPUT_COLOR1_EXT = 0x879C; + public const int OUTPUT_FOG_EXT = 0x87BD; + public const int OUTPUT_TEXTURE_COORD0_EXT = 0x879D; + public const int OUTPUT_TEXTURE_COORD10_EXT = 0x87A7; + public const int OUTPUT_TEXTURE_COORD11_EXT = 0x87A8; + public const int OUTPUT_TEXTURE_COORD12_EXT = 0x87A9; + public const int OUTPUT_TEXTURE_COORD13_EXT = 0x87AA; + public const int OUTPUT_TEXTURE_COORD14_EXT = 0x87AB; + public const int OUTPUT_TEXTURE_COORD15_EXT = 0x87AC; + public const int OUTPUT_TEXTURE_COORD16_EXT = 0x87AD; + public const int OUTPUT_TEXTURE_COORD17_EXT = 0x87AE; + public const int OUTPUT_TEXTURE_COORD18_EXT = 0x87AF; + public const int OUTPUT_TEXTURE_COORD19_EXT = 0x87B0; + public const int OUTPUT_TEXTURE_COORD1_EXT = 0x879E; + public const int OUTPUT_TEXTURE_COORD20_EXT = 0x87B1; + public const int OUTPUT_TEXTURE_COORD21_EXT = 0x87B2; + public const int OUTPUT_TEXTURE_COORD22_EXT = 0x87B3; + public const int OUTPUT_TEXTURE_COORD23_EXT = 0x87B4; + public const int OUTPUT_TEXTURE_COORD24_EXT = 0x87B5; + public const int OUTPUT_TEXTURE_COORD25_EXT = 0x87B6; + public const int OUTPUT_TEXTURE_COORD26_EXT = 0x87B7; + public const int OUTPUT_TEXTURE_COORD27_EXT = 0x87B8; + public const int OUTPUT_TEXTURE_COORD28_EXT = 0x87B9; + public const int OUTPUT_TEXTURE_COORD29_EXT = 0x87BA; + public const int OUTPUT_TEXTURE_COORD2_EXT = 0x879F; + public const int OUTPUT_TEXTURE_COORD30_EXT = 0x87BB; + public const int OUTPUT_TEXTURE_COORD31_EXT = 0x87BC; + public const int OUTPUT_TEXTURE_COORD3_EXT = 0x87A0; + public const int OUTPUT_TEXTURE_COORD4_EXT = 0x87A1; + public const int OUTPUT_TEXTURE_COORD5_EXT = 0x87A2; + public const int OUTPUT_TEXTURE_COORD6_EXT = 0x87A3; + public const int OUTPUT_TEXTURE_COORD7_EXT = 0x87A4; + public const int OUTPUT_TEXTURE_COORD8_EXT = 0x87A5; + public const int OUTPUT_TEXTURE_COORD9_EXT = 0x87A6; + public const int OUTPUT_VERTEX_EXT = 0x879A; + public const int OUT_OF_MEMORY = 0x0505; + public const int OVERLAY_KHR = 0x9296; + public const int OVERLAY_NV = 0x9296; + public const int PACK_ALIGNMENT = 0x0D05; + public const int PACK_CMYK_HINT_EXT = 0x800E; + public const int PACK_COMPRESSED_BLOCK_DEPTH = 0x912D; + public const int PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C; + public const int PACK_COMPRESSED_BLOCK_SIZE = 0x912E; + public const int PACK_COMPRESSED_BLOCK_WIDTH = 0x912B; + public const int PACK_IMAGE_DEPTH_SGIS = 0x8131; + public const int PACK_IMAGE_HEIGHT = 0x806C; + public const int PACK_IMAGE_HEIGHT_EXT = 0x806C; + public const int PACK_INVERT_MESA = 0x8758; + public const int PACK_LSB_FIRST = 0x0D01; + public const int PACK_RESAMPLE_OML = 0x8984; + public const int PACK_RESAMPLE_SGIX = 0x842E; + public const int PACK_ROW_BYTES_APPLE = 0x8A15; + public const int PACK_ROW_LENGTH = 0x0D02; + public const int PACK_SKIP_IMAGES = 0x806B; + public const int PACK_SKIP_IMAGES_EXT = 0x806B; + public const int PACK_SKIP_PIXELS = 0x0D04; + public const int PACK_SKIP_ROWS = 0x0D03; + public const int PACK_SKIP_VOLUMES_SGIS = 0x8130; + public const int PACK_SUBSAMPLE_RATE_SGIX = 0x85A0; + public const int PACK_SWAP_BYTES = 0x0D00; + public const int PALETTE4_R5_G6_B5_OES = 0x8B92; + public const int PALETTE4_RGB5_A1_OES = 0x8B94; + public const int PALETTE4_RGB8_OES = 0x8B90; + public const int PALETTE4_RGBA4_OES = 0x8B93; + public const int PALETTE4_RGBA8_OES = 0x8B91; + public const int PALETTE8_R5_G6_B5_OES = 0x8B97; + public const int PALETTE8_RGB5_A1_OES = 0x8B99; + public const int PALETTE8_RGB8_OES = 0x8B95; + public const int PALETTE8_RGBA4_OES = 0x8B98; + public const int PALETTE8_RGBA8_OES = 0x8B96; + public const int PARALLEL_ARRAYS_INTEL = 0x83F4; + public const int PARAMETER_BUFFER = 0x80EE; + public const int PARAMETER_BUFFER_ARB = 0x80EE; + public const int PARAMETER_BUFFER_BINDING = 0x80EF; + public const int PARAMETER_BUFFER_BINDING_ARB = 0x80EF; + public const int PARTIAL_SUCCESS_NV = 0x902E; + public const int PASS_THROUGH_NV = 0x86E6; + public const int PATCHES = 0x000E; + public const int PATCH_DEFAULT_INNER_LEVEL = 0x8E73; + public const int PATCH_DEFAULT_OUTER_LEVEL = 0x8E74; + public const int PATCH_VERTICES = 0x8E72; + public const int PATH_CLIENT_LENGTH_NV = 0x907F; + public const int PATH_COMMAND_COUNT_NV = 0x909D; + public const int PATH_COMPUTED_LENGTH_NV = 0x90A0; + public const int PATH_COORD_COUNT_NV = 0x909E; + public const int PATH_COVER_DEPTH_FUNC_NV = 0x90BF; + public const int PATH_DASH_ARRAY_COUNT_NV = 0x909F; + public const int PATH_DASH_CAPS_NV = 0x907B; + public const int PATH_DASH_OFFSET_NV = 0x907E; + public const int PATH_DASH_OFFSET_RESET_NV = 0x90B4; + public const int PATH_END_CAPS_NV = 0x9076; + public const int PATH_ERROR_POSITION_NV = 0x90AB; + public const int PATH_FILL_BOUNDING_BOX_NV = 0x90A1; + public const int PATH_FILL_COVER_MODE_NV = 0x9082; + public const int PATH_FILL_MASK_NV = 0x9081; + public const int PATH_FILL_MODE_NV = 0x9080; + public const int PATH_FORMAT_PS_NV = 0x9071; + public const int PATH_FORMAT_SVG_NV = 0x9070; + public const int PATH_GEN_COEFF_NV = 0x90B1; + public const int PATH_GEN_COMPONENTS_NV = 0x90B3; + public const int PATH_GEN_MODE_NV = 0x90B0; + public const int PATH_INITIAL_DASH_CAP_NV = 0x907C; + public const int PATH_INITIAL_END_CAP_NV = 0x9077; + public const int PATH_JOIN_STYLE_NV = 0x9079; + public const int PATH_MAX_MODELVIEW_STACK_DEPTH_NV = 0x0D36; + public const int PATH_MAX_PROJECTION_STACK_DEPTH_NV = 0x0D38; + public const int PATH_MITER_LIMIT_NV = 0x907A; + public const int PATH_MODELVIEW_MATRIX_NV = 0x0BA6; + public const int PATH_MODELVIEW_NV = 0x1700; + public const int PATH_MODELVIEW_STACK_DEPTH_NV = 0x0BA3; + public const int PATH_OBJECT_BOUNDING_BOX_NV = 0x908A; + public const int PATH_PROJECTION_MATRIX_NV = 0x0BA7; + public const int PATH_PROJECTION_NV = 0x1701; + public const int PATH_PROJECTION_STACK_DEPTH_NV = 0x0BA4; + public const int PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV = 0x90BD; + public const int PATH_STENCIL_DEPTH_OFFSET_UNITS_NV = 0x90BE; + public const int PATH_STENCIL_FUNC_NV = 0x90B7; + public const int PATH_STENCIL_REF_NV = 0x90B8; + public const int PATH_STENCIL_VALUE_MASK_NV = 0x90B9; + public const int PATH_STROKE_BOUNDING_BOX_NV = 0x90A2; + public const int PATH_STROKE_COVER_MODE_NV = 0x9083; + public const int PATH_STROKE_MASK_NV = 0x9084; + public const int PATH_STROKE_WIDTH_NV = 0x9075; + public const int PATH_TERMINAL_DASH_CAP_NV = 0x907D; + public const int PATH_TERMINAL_END_CAP_NV = 0x9078; + public const int PATH_TRANSPOSE_MODELVIEW_MATRIX_NV = 0x84E3; + public const int PATH_TRANSPOSE_PROJECTION_MATRIX_NV = 0x84E4; + public const int PERCENTAGE_AMD = 0x8BC3; + public const int PERFMON_RESULT_AMD = 0x8BC6; + public const int PERFMON_RESULT_AVAILABLE_AMD = 0x8BC4; + public const int PERFMON_RESULT_SIZE_AMD = 0x8BC5; + public const int PERFORMANCE_MONITOR_AMD = 0x9152; + public const int PERFQUERY_COUNTER_DATA_BOOL32_INTEL = 0x94FC; + public const int PERFQUERY_COUNTER_DATA_DOUBLE_INTEL = 0x94FB; + public const int PERFQUERY_COUNTER_DATA_FLOAT_INTEL = 0x94FA; + public const int PERFQUERY_COUNTER_DATA_UINT32_INTEL = 0x94F8; + public const int PERFQUERY_COUNTER_DATA_UINT64_INTEL = 0x94F9; + public const int PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL = 0x94FF; + public const int PERFQUERY_COUNTER_DURATION_NORM_INTEL = 0x94F1; + public const int PERFQUERY_COUNTER_DURATION_RAW_INTEL = 0x94F2; + public const int PERFQUERY_COUNTER_EVENT_INTEL = 0x94F0; + public const int PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL = 0x94FE; + public const int PERFQUERY_COUNTER_RAW_INTEL = 0x94F4; + public const int PERFQUERY_COUNTER_THROUGHPUT_INTEL = 0x94F3; + public const int PERFQUERY_COUNTER_TIMESTAMP_INTEL = 0x94F5; + public const int PERFQUERY_DONOT_FLUSH_INTEL = 0x83F9; + public const int PERFQUERY_FLUSH_INTEL = 0x83FA; + public const int PERFQUERY_GLOBAL_CONTEXT_INTEL = 0x00000001; + public const int PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL = 0x9500; + public const int PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL = 0x94FD; + public const int PERFQUERY_SINGLE_CONTEXT_INTEL = 0x00000000; + public const int PERFQUERY_WAIT_INTEL = 0x83FB; + public const int PERTURB_EXT = 0x85AE; + public const int PER_GPU_STORAGE_BIT_NV = 0x0800; + public const int PER_GPU_STORAGE_NV = 0x9548; + public const int PER_STAGE_CONSTANTS_NV = 0x8535; + public const int PHONG_HINT_WIN = 0x80EB; + public const int PHONG_WIN = 0x80EA; + public const int PINLIGHT_NV = 0x92A8; + public const int PIXELS_PER_SAMPLE_PATTERN_X_AMD = 0x91AE; + public const int PIXELS_PER_SAMPLE_PATTERN_Y_AMD = 0x91AF; + public const int PIXEL_BUFFER_BARRIER_BIT = 0x00000080; + public const int PIXEL_BUFFER_BARRIER_BIT_EXT = 0x00000080; + public const int PIXEL_COUNTER_BITS_NV = 0x8864; + public const int PIXEL_COUNT_AVAILABLE_NV = 0x8867; + public const int PIXEL_COUNT_NV = 0x8866; + public const int PIXEL_CUBIC_WEIGHT_EXT = 0x8333; + public const int PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = 0x8355; + public const int PIXEL_FRAGMENT_RGB_SOURCE_SGIS = 0x8354; + public const int PIXEL_GROUP_COLOR_SGIS = 0x8356; + public const int PIXEL_MAG_FILTER_EXT = 0x8331; + public const int PIXEL_MIN_FILTER_EXT = 0x8332; + public const int PIXEL_PACK_BUFFER = 0x88EB; + public const int PIXEL_PACK_BUFFER_ARB = 0x88EB; + public const int PIXEL_PACK_BUFFER_BINDING = 0x88ED; + public const int PIXEL_PACK_BUFFER_BINDING_ARB = 0x88ED; + public const int PIXEL_PACK_BUFFER_BINDING_EXT = 0x88ED; + public const int PIXEL_PACK_BUFFER_EXT = 0x88EB; + public const int PIXEL_SUBSAMPLE_2424_SGIX = 0x85A3; + public const int PIXEL_SUBSAMPLE_4242_SGIX = 0x85A4; + public const int PIXEL_SUBSAMPLE_4444_SGIX = 0x85A2; + public const int PIXEL_TEXTURE_SGIS = 0x8353; + public const int PIXEL_TEX_GEN_MODE_SGIX = 0x832B; + public const int PIXEL_TEX_GEN_SGIX = 0x8139; + public const int PIXEL_TILE_BEST_ALIGNMENT_SGIX = 0x813E; + public const int PIXEL_TILE_CACHE_INCREMENT_SGIX = 0x813F; + public const int PIXEL_TILE_CACHE_SIZE_SGIX = 0x8145; + public const int PIXEL_TILE_GRID_DEPTH_SGIX = 0x8144; + public const int PIXEL_TILE_GRID_HEIGHT_SGIX = 0x8143; + public const int PIXEL_TILE_GRID_WIDTH_SGIX = 0x8142; + public const int PIXEL_TILE_HEIGHT_SGIX = 0x8141; + public const int PIXEL_TILE_WIDTH_SGIX = 0x8140; + public const int PIXEL_TRANSFORM_2D_EXT = 0x8330; + public const int PIXEL_TRANSFORM_2D_MATRIX_EXT = 0x8338; + public const int PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 0x8336; + public const int PIXEL_UNPACK_BUFFER = 0x88EC; + public const int PIXEL_UNPACK_BUFFER_ARB = 0x88EC; + public const int PIXEL_UNPACK_BUFFER_BINDING = 0x88EF; + public const int PIXEL_UNPACK_BUFFER_BINDING_ARB = 0x88EF; + public const int PIXEL_UNPACK_BUFFER_BINDING_EXT = 0x88EF; + public const int PIXEL_UNPACK_BUFFER_EXT = 0x88EC; + public const int PLUS_CLAMPED_ALPHA_NV = 0x92B2; + public const int PLUS_CLAMPED_NV = 0x92B1; + public const int PLUS_DARKER_NV = 0x9292; + public const int PLUS_NV = 0x9291; + public const int PN_TRIANGLES_ATI = 0x87F0; + public const int PN_TRIANGLES_NORMAL_MODE_ATI = 0x87F3; + public const int PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI = 0x87F7; + public const int PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI = 0x87F8; + public const int PN_TRIANGLES_POINT_MODE_ATI = 0x87F2; + public const int PN_TRIANGLES_POINT_MODE_CUBIC_ATI = 0x87F6; + public const int PN_TRIANGLES_POINT_MODE_LINEAR_ATI = 0x87F5; + public const int PN_TRIANGLES_TESSELATION_LEVEL_ATI = 0x87F4; + public const int POINT = 0x1B00; + public const int POINTS = 0x0000; + public const int POINT_DISTANCE_ATTENUATION_ARB = 0x8129; + public const int POINT_FADE_THRESHOLD_SIZE = 0x8128; + public const int POINT_FADE_THRESHOLD_SIZE_ARB = 0x8128; + public const int POINT_FADE_THRESHOLD_SIZE_EXT = 0x8128; + public const int POINT_FADE_THRESHOLD_SIZE_SGIS = 0x8128; + public const int POINT_SIZE = 0x0B11; + public const int POINT_SIZE_GRANULARITY = 0x0B13; + public const int POINT_SIZE_MAX_ARB = 0x8127; + public const int POINT_SIZE_MAX_EXT = 0x8127; + public const int POINT_SIZE_MAX_SGIS = 0x8127; + public const int POINT_SIZE_MIN_ARB = 0x8126; + public const int POINT_SIZE_MIN_EXT = 0x8126; + public const int POINT_SIZE_MIN_SGIS = 0x8126; + public const int POINT_SIZE_RANGE = 0x0B12; + public const int POINT_SPRITE_ARB = 0x8861; + public const int POINT_SPRITE_COORD_ORIGIN = 0x8CA0; + public const int POINT_SPRITE_NV = 0x8861; + public const int POINT_SPRITE_R_MODE_NV = 0x8863; + public const int POLYGON_MODE = 0x0B40; + public const int POLYGON_OFFSET_BIAS_EXT = 0x8039; + public const int POLYGON_OFFSET_CLAMP = 0x8E1B; + public const int POLYGON_OFFSET_CLAMP_EXT = 0x8E1B; + public const int POLYGON_OFFSET_COMMAND_NV = 0x000E; + public const int POLYGON_OFFSET_EXT = 0x8037; + public const int POLYGON_OFFSET_FACTOR = 0x8038; + public const int POLYGON_OFFSET_FACTOR_EXT = 0x8038; + public const int POLYGON_OFFSET_FILL = 0x8037; + public const int POLYGON_OFFSET_LINE = 0x2A02; + public const int POLYGON_OFFSET_POINT = 0x2A01; + public const int POLYGON_OFFSET_UNITS = 0x2A00; + public const int POLYGON_SMOOTH = 0x0B41; + public const int POLYGON_SMOOTH_HINT = 0x0C53; + public const int POST_COLOR_MATRIX_ALPHA_BIAS_SGI = 0x80BB; + public const int POST_COLOR_MATRIX_ALPHA_SCALE_SGI = 0x80B7; + public const int POST_COLOR_MATRIX_BLUE_BIAS_SGI = 0x80BA; + public const int POST_COLOR_MATRIX_BLUE_SCALE_SGI = 0x80B6; + public const int POST_COLOR_MATRIX_COLOR_TABLE_SGI = 0x80D2; + public const int POST_COLOR_MATRIX_GREEN_BIAS_SGI = 0x80B9; + public const int POST_COLOR_MATRIX_GREEN_SCALE_SGI = 0x80B5; + public const int POST_COLOR_MATRIX_RED_BIAS_SGI = 0x80B8; + public const int POST_COLOR_MATRIX_RED_SCALE_SGI = 0x80B4; + public const int POST_CONVOLUTION_ALPHA_BIAS_EXT = 0x8023; + public const int POST_CONVOLUTION_ALPHA_SCALE_EXT = 0x801F; + public const int POST_CONVOLUTION_BLUE_BIAS_EXT = 0x8022; + public const int POST_CONVOLUTION_BLUE_SCALE_EXT = 0x801E; + public const int POST_CONVOLUTION_COLOR_TABLE_SGI = 0x80D1; + public const int POST_CONVOLUTION_GREEN_BIAS_EXT = 0x8021; + public const int POST_CONVOLUTION_GREEN_SCALE_EXT = 0x801D; + public const int POST_CONVOLUTION_RED_BIAS_EXT = 0x8020; + public const int POST_CONVOLUTION_RED_SCALE_EXT = 0x801C; + public const int POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 0x8162; + public const int POST_TEXTURE_FILTER_BIAS_RANGE_SGIX = 0x817B; + public const int POST_TEXTURE_FILTER_BIAS_SGIX = 0x8179; + public const int POST_TEXTURE_FILTER_SCALE_RANGE_SGIX = 0x817C; + public const int POST_TEXTURE_FILTER_SCALE_SGIX = 0x817A; + public const int PREFER_DOUBLEBUFFER_HINT_PGI = 0x1A1F8; + public const int PRESENT_DURATION_NV = 0x8E2B; + public const int PRESENT_TIME_NV = 0x8E2A; + public const int PRESERVE_ATI = 0x8762; + public const int PREVIOUS_ARB = 0x8578; + public const int PREVIOUS_EXT = 0x8578; + public const int PREVIOUS_TEXTURE_INPUT_NV = 0x86E4; + public const int PRIMARY_COLOR_ARB = 0x8577; + public const int PRIMARY_COLOR_EXT = 0x8577; + public const int PRIMARY_COLOR_NV = 0x852C; + public const int PRIMITIVES_GENERATED = 0x8C87; + public const int PRIMITIVES_GENERATED_EXT = 0x8C87; + public const int PRIMITIVES_GENERATED_NV = 0x8C87; + public const int PRIMITIVES_SUBMITTED = 0x82EF; + public const int PRIMITIVES_SUBMITTED_ARB = 0x82EF; + public const int PRIMITIVE_BOUNDING_BOX_ARB = 0x92BE; + public const int PRIMITIVE_ID_NV = 0x8C7C; + public const int PRIMITIVE_RESTART = 0x8F9D; + public const int PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69; + public const int PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 0x8221; + public const int PRIMITIVE_RESTART_INDEX = 0x8F9E; + public const int PRIMITIVE_RESTART_INDEX_NV = 0x8559; + public const int PRIMITIVE_RESTART_NV = 0x8558; + public const int PROGRAM = 0x82E2; + public const int PROGRAMMABLE_SAMPLE_LOCATION_ARB = 0x9341; + public const int PROGRAMMABLE_SAMPLE_LOCATION_NV = 0x9341; + public const int PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB = 0x9340; + public const int PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV = 0x9340; + public const int PROGRAM_ADDRESS_REGISTERS_ARB = 0x88B0; + public const int PROGRAM_ALU_INSTRUCTIONS_ARB = 0x8805; + public const int PROGRAM_ATTRIBS_ARB = 0x88AC; + public const int PROGRAM_ATTRIB_COMPONENTS_NV = 0x8906; + public const int PROGRAM_BINARY_FORMATS = 0x87FF; + public const int PROGRAM_BINARY_FORMAT_MESA = 0x875F; + public const int PROGRAM_BINARY_LENGTH = 0x8741; + public const int PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257; + public const int PROGRAM_BINDING_ARB = 0x8677; + public const int PROGRAM_ERROR_POSITION_ARB = 0x864B; + public const int PROGRAM_ERROR_POSITION_NV = 0x864B; + public const int PROGRAM_ERROR_STRING_ARB = 0x8874; + public const int PROGRAM_ERROR_STRING_NV = 0x8874; + public const int PROGRAM_FORMAT_ARB = 0x8876; + public const int PROGRAM_FORMAT_ASCII_ARB = 0x8875; + public const int PROGRAM_INPUT = 0x92E3; + public const int PROGRAM_INSTRUCTIONS_ARB = 0x88A0; + public const int PROGRAM_LENGTH_ARB = 0x8627; + public const int PROGRAM_LENGTH_NV = 0x8627; + public const int PROGRAM_MATRIX_EXT = 0x8E2D; + public const int PROGRAM_MATRIX_STACK_DEPTH_EXT = 0x8E2F; + public const int PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 0x88B2; + public const int PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 0x8808; + public const int PROGRAM_NATIVE_ATTRIBS_ARB = 0x88AE; + public const int PROGRAM_NATIVE_INSTRUCTIONS_ARB = 0x88A2; + public const int PROGRAM_NATIVE_PARAMETERS_ARB = 0x88AA; + public const int PROGRAM_NATIVE_TEMPORARIES_ARB = 0x88A6; + public const int PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 0x880A; + public const int PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 0x8809; + public const int PROGRAM_OBJECT_ARB = 0x8B40; + public const int PROGRAM_OBJECT_EXT = 0x8B40; + public const int PROGRAM_OUTPUT = 0x92E4; + public const int PROGRAM_PARAMETERS_ARB = 0x88A8; + public const int PROGRAM_PARAMETER_NV = 0x8644; + public const int PROGRAM_PIPELINE = 0x82E4; + public const int PROGRAM_PIPELINE_BINDING = 0x825A; + public const int PROGRAM_PIPELINE_OBJECT_EXT = 0x8A4F; + public const int PROGRAM_POINT_SIZE = 0x8642; + public const int PROGRAM_POINT_SIZE_ARB = 0x8642; + public const int PROGRAM_POINT_SIZE_EXT = 0x8642; + public const int PROGRAM_RESIDENT_NV = 0x8647; + public const int PROGRAM_RESULT_COMPONENTS_NV = 0x8907; + public const int PROGRAM_SEPARABLE = 0x8258; + public const int PROGRAM_STRING_ARB = 0x8628; + public const int PROGRAM_STRING_NV = 0x8628; + public const int PROGRAM_TARGET_NV = 0x8646; + public const int PROGRAM_TEMPORARIES_ARB = 0x88A4; + public const int PROGRAM_TEX_INDIRECTIONS_ARB = 0x8807; + public const int PROGRAM_TEX_INSTRUCTIONS_ARB = 0x8806; + public const int PROGRAM_UNDER_NATIVE_LIMITS_ARB = 0x88B6; + public const int PROTECTED_MEMORY_OBJECT_EXT = 0x959B; + public const int PROVOKING_VERTEX = 0x8E4F; + public const int PROVOKING_VERTEX_EXT = 0x8E4F; + public const int PROXY_COLOR_TABLE_SGI = 0x80D3; + public const int PROXY_HISTOGRAM_EXT = 0x8025; + public const int PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 0x80D5; + public const int PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI = 0x80D4; + public const int PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 0x8163; + public const int PROXY_TEXTURE_1D = 0x8063; + public const int PROXY_TEXTURE_1D_ARRAY = 0x8C19; + public const int PROXY_TEXTURE_1D_ARRAY_EXT = 0x8C19; + public const int PROXY_TEXTURE_1D_EXT = 0x8063; + public const int PROXY_TEXTURE_1D_STACK_MESAX = 0x875B; + public const int PROXY_TEXTURE_2D = 0x8064; + public const int PROXY_TEXTURE_2D_ARRAY = 0x8C1B; + public const int PROXY_TEXTURE_2D_ARRAY_EXT = 0x8C1B; + public const int PROXY_TEXTURE_2D_EXT = 0x8064; + public const int PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101; + public const int PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103; + public const int PROXY_TEXTURE_2D_STACK_MESAX = 0x875C; + public const int PROXY_TEXTURE_3D = 0x8070; + public const int PROXY_TEXTURE_3D_EXT = 0x8070; + public const int PROXY_TEXTURE_4D_SGIS = 0x8135; + public const int PROXY_TEXTURE_COLOR_TABLE_SGI = 0x80BD; + public const int PROXY_TEXTURE_CUBE_MAP = 0x851B; + public const int PROXY_TEXTURE_CUBE_MAP_ARB = 0x851B; + public const int PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B; + public const int PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB = 0x900B; + public const int PROXY_TEXTURE_CUBE_MAP_EXT = 0x851B; + public const int PROXY_TEXTURE_RECTANGLE = 0x84F7; + public const int PROXY_TEXTURE_RECTANGLE_ARB = 0x84F7; + public const int PROXY_TEXTURE_RECTANGLE_NV = 0x84F7; + public const int PURGEABLE_APPLE = 0x8A1D; + public const int PURGED_CONTEXT_RESET_NV = 0x92BB; + public const int QUADRATIC_CURVE_TO_NV = 0x0A; + public const int QUADS = 0x0007; + public const int QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C; + public const int QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT = 0x8E4C; + public const int QUAD_ALPHA4_SGIS = 0x811E; + public const int QUAD_ALPHA8_SGIS = 0x811F; + public const int QUAD_INTENSITY4_SGIS = 0x8122; + public const int QUAD_INTENSITY8_SGIS = 0x8123; + public const int QUAD_LUMINANCE4_SGIS = 0x8120; + public const int QUAD_LUMINANCE8_SGIS = 0x8121; + public const int QUAD_MESH_SUN = 0x8614; + public const int QUAD_TEXTURE_SELECT_SGIS = 0x8125; + public const int QUARTER_BIT_ATI = 0x00000010; + public const int QUERY = 0x82E3; + public const uint QUERY_ALL_EVENT_BITS_AMD = 0xFFFFFFFF; + public const int QUERY_BUFFER = 0x9192; + public const int QUERY_BUFFER_AMD = 0x9192; + public const int QUERY_BUFFER_BARRIER_BIT = 0x00008000; + public const int QUERY_BUFFER_BINDING = 0x9193; + public const int QUERY_BUFFER_BINDING_AMD = 0x9193; + public const int QUERY_BY_REGION_NO_WAIT = 0x8E16; + public const int QUERY_BY_REGION_NO_WAIT_INVERTED = 0x8E1A; + public const int QUERY_BY_REGION_NO_WAIT_NV = 0x8E16; + public const int QUERY_BY_REGION_WAIT = 0x8E15; + public const int QUERY_BY_REGION_WAIT_INVERTED = 0x8E19; + public const int QUERY_BY_REGION_WAIT_NV = 0x8E15; + public const int QUERY_COUNTER_BITS = 0x8864; + public const int QUERY_COUNTER_BITS_ARB = 0x8864; + public const int QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD = 0x00000008; + public const int QUERY_DEPTH_FAIL_EVENT_BIT_AMD = 0x00000002; + public const int QUERY_DEPTH_PASS_EVENT_BIT_AMD = 0x00000001; + public const int QUERY_NO_WAIT = 0x8E14; + public const int QUERY_NO_WAIT_INVERTED = 0x8E18; + public const int QUERY_NO_WAIT_NV = 0x8E14; + public const int QUERY_OBJECT_AMD = 0x9153; + public const int QUERY_OBJECT_EXT = 0x9153; + public const int QUERY_RESOURCE_BUFFEROBJECT_NV = 0x9547; + public const int QUERY_RESOURCE_MEMTYPE_VIDMEM_NV = 0x9542; + public const int QUERY_RESOURCE_RENDERBUFFER_NV = 0x9546; + public const int QUERY_RESOURCE_SYS_RESERVED_NV = 0x9544; + public const int QUERY_RESOURCE_TEXTURE_NV = 0x9545; + public const int QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV = 0x9540; + public const int QUERY_RESULT = 0x8866; + public const int QUERY_RESULT_ARB = 0x8866; + public const int QUERY_RESULT_AVAILABLE = 0x8867; + public const int QUERY_RESULT_AVAILABLE_ARB = 0x8867; + public const int QUERY_RESULT_NO_WAIT = 0x9194; + public const int QUERY_RESULT_NO_WAIT_AMD = 0x9194; + public const int QUERY_STENCIL_FAIL_EVENT_BIT_AMD = 0x00000004; + public const int QUERY_TARGET = 0x82EA; + public const int QUERY_WAIT = 0x8E13; + public const int QUERY_WAIT_INVERTED = 0x8E17; + public const int QUERY_WAIT_NV = 0x8E13; + public const int R11F_G11F_B10F = 0x8C3A; + public const int R11F_G11F_B10F_EXT = 0x8C3A; + public const int R16 = 0x822A; + public const int R16F = 0x822D; + public const int R16F_EXT = 0x822D; + public const int R16I = 0x8233; + public const int R16UI = 0x8234; + public const int R16_SNORM = 0x8F98; + public const int R1UI_C3F_V3F_SUN = 0x85C6; + public const int R1UI_C4F_N3F_V3F_SUN = 0x85C8; + public const int R1UI_C4UB_V3F_SUN = 0x85C5; + public const int R1UI_N3F_V3F_SUN = 0x85C7; + public const int R1UI_T2F_C4F_N3F_V3F_SUN = 0x85CB; + public const int R1UI_T2F_N3F_V3F_SUN = 0x85CA; + public const int R1UI_T2F_V3F_SUN = 0x85C9; + public const int R1UI_V3F_SUN = 0x85C4; + public const int R32F = 0x822E; + public const int R32F_EXT = 0x822E; + public const int R32I = 0x8235; + public const int R32UI = 0x8236; + public const int R3_G3_B2 = 0x2A10; + public const int R8 = 0x8229; + public const int R8I = 0x8231; + public const int R8UI = 0x8232; + public const int R8_EXT = 0x8229; + public const int R8_SNORM = 0x8F94; + public const int RASTERIZER_DISCARD = 0x8C89; + public const int RASTERIZER_DISCARD_EXT = 0x8C89; + public const int RASTERIZER_DISCARD_NV = 0x8C89; + public const int RASTER_FIXED_SAMPLE_LOCATIONS_EXT = 0x932A; + public const int RASTER_MULTISAMPLE_EXT = 0x9327; + public const int RASTER_POSITION_UNCLIPPED_IBM = 0x19262; + public const int RASTER_SAMPLES_EXT = 0x9328; + public const int READ_BUFFER = 0x0C02; + public const int READ_FRAMEBUFFER = 0x8CA8; + public const int READ_FRAMEBUFFER_BINDING = 0x8CAA; + public const int READ_FRAMEBUFFER_BINDING_EXT = 0x8CAA; + public const int READ_FRAMEBUFFER_EXT = 0x8CA8; + public const int READ_ONLY = 0x88B8; + public const int READ_ONLY_ARB = 0x88B8; + public const int READ_PIXELS = 0x828C; + public const int READ_PIXELS_FORMAT = 0x828D; + public const int READ_PIXELS_TYPE = 0x828E; + public const int READ_PIXEL_DATA_RANGE_LENGTH_NV = 0x887B; + public const int READ_PIXEL_DATA_RANGE_NV = 0x8879; + public const int READ_PIXEL_DATA_RANGE_POINTER_NV = 0x887D; + public const int READ_WRITE = 0x88BA; + public const int READ_WRITE_ARB = 0x88BA; + public const int RECLAIM_MEMORY_HINT_PGI = 0x1A1FE; + public const int RECT_NV = 0xF6; + public const int RED = 0x1903; + public const int REDUCE_EXT = 0x8016; + public const int RED_BIT_ATI = 0x00000001; + public const int RED_INTEGER = 0x8D94; + public const int RED_INTEGER_EXT = 0x8D94; + public const int RED_MAX_CLAMP_INGR = 0x8564; + public const int RED_MIN_CLAMP_INGR = 0x8560; + public const int RED_NV = 0x1903; + public const int RED_SNORM = 0x8F90; + public const int REFERENCED_BY_COMPUTE_SHADER = 0x930B; + public const int REFERENCED_BY_FRAGMENT_SHADER = 0x930A; + public const int REFERENCED_BY_GEOMETRY_SHADER = 0x9309; + public const int REFERENCED_BY_MESH_SHADER_NV = 0x95A0; + public const int REFERENCED_BY_TASK_SHADER_NV = 0x95A1; + public const int REFERENCED_BY_TESS_CONTROL_SHADER = 0x9307; + public const int REFERENCED_BY_TESS_EVALUATION_SHADER = 0x9308; + public const int REFERENCED_BY_VERTEX_SHADER = 0x9306; + public const int REFERENCE_PLANE_EQUATION_SGIX = 0x817E; + public const int REFERENCE_PLANE_SGIX = 0x817D; + public const int REFLECTION_MAP_ARB = 0x8512; + public const int REFLECTION_MAP_EXT = 0x8512; + public const int REFLECTION_MAP_NV = 0x8512; + public const int REGISTER_COMBINERS_NV = 0x8522; + public const int REG_0_ATI = 0x8921; + public const int REG_10_ATI = 0x892B; + public const int REG_11_ATI = 0x892C; + public const int REG_12_ATI = 0x892D; + public const int REG_13_ATI = 0x892E; + public const int REG_14_ATI = 0x892F; + public const int REG_15_ATI = 0x8930; + public const int REG_16_ATI = 0x8931; + public const int REG_17_ATI = 0x8932; + public const int REG_18_ATI = 0x8933; + public const int REG_19_ATI = 0x8934; + public const int REG_1_ATI = 0x8922; + public const int REG_20_ATI = 0x8935; + public const int REG_21_ATI = 0x8936; + public const int REG_22_ATI = 0x8937; + public const int REG_23_ATI = 0x8938; + public const int REG_24_ATI = 0x8939; + public const int REG_25_ATI = 0x893A; + public const int REG_26_ATI = 0x893B; + public const int REG_27_ATI = 0x893C; + public const int REG_28_ATI = 0x893D; + public const int REG_29_ATI = 0x893E; + public const int REG_2_ATI = 0x8923; + public const int REG_30_ATI = 0x893F; + public const int REG_31_ATI = 0x8940; + public const int REG_3_ATI = 0x8924; + public const int REG_4_ATI = 0x8925; + public const int REG_5_ATI = 0x8926; + public const int REG_6_ATI = 0x8927; + public const int REG_7_ATI = 0x8928; + public const int REG_8_ATI = 0x8929; + public const int REG_9_ATI = 0x892A; + public const int RELATIVE_ARC_TO_NV = 0xFF; + public const int RELATIVE_CONIC_CURVE_TO_NV = 0x1B; + public const int RELATIVE_CUBIC_CURVE_TO_NV = 0x0D; + public const int RELATIVE_HORIZONTAL_LINE_TO_NV = 0x07; + public const int RELATIVE_LARGE_CCW_ARC_TO_NV = 0x17; + public const int RELATIVE_LARGE_CW_ARC_TO_NV = 0x19; + public const int RELATIVE_LINE_TO_NV = 0x05; + public const int RELATIVE_MOVE_TO_NV = 0x03; + public const int RELATIVE_QUADRATIC_CURVE_TO_NV = 0x0B; + public const int RELATIVE_RECT_NV = 0xF7; + public const int RELATIVE_ROUNDED_RECT2_NV = 0xEB; + public const int RELATIVE_ROUNDED_RECT4_NV = 0xED; + public const int RELATIVE_ROUNDED_RECT8_NV = 0xEF; + public const int RELATIVE_ROUNDED_RECT_NV = 0xE9; + public const int RELATIVE_SMALL_CCW_ARC_TO_NV = 0x13; + public const int RELATIVE_SMALL_CW_ARC_TO_NV = 0x15; + public const int RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV = 0x11; + public const int RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV = 0x0F; + public const int RELATIVE_VERTICAL_LINE_TO_NV = 0x09; + public const int RELEASED_APPLE = 0x8A19; + public const int RENDERBUFFER = 0x8D41; + public const int RENDERBUFFER_ALPHA_SIZE = 0x8D53; + public const int RENDERBUFFER_ALPHA_SIZE_EXT = 0x8D53; + public const int RENDERBUFFER_BINDING = 0x8CA7; + public const int RENDERBUFFER_BINDING_EXT = 0x8CA7; + public const int RENDERBUFFER_BLUE_SIZE = 0x8D52; + public const int RENDERBUFFER_BLUE_SIZE_EXT = 0x8D52; + public const int RENDERBUFFER_COLOR_SAMPLES_NV = 0x8E10; + public const int RENDERBUFFER_COVERAGE_SAMPLES_NV = 0x8CAB; + public const int RENDERBUFFER_DEPTH_SIZE = 0x8D54; + public const int RENDERBUFFER_DEPTH_SIZE_EXT = 0x8D54; + public const int RENDERBUFFER_EXT = 0x8D41; + public const int RENDERBUFFER_FREE_MEMORY_ATI = 0x87FD; + public const int RENDERBUFFER_GREEN_SIZE = 0x8D51; + public const int RENDERBUFFER_GREEN_SIZE_EXT = 0x8D51; + public const int RENDERBUFFER_HEIGHT = 0x8D43; + public const int RENDERBUFFER_HEIGHT_EXT = 0x8D43; + public const int RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; + public const int RENDERBUFFER_INTERNAL_FORMAT_EXT = 0x8D44; + public const int RENDERBUFFER_RED_SIZE = 0x8D50; + public const int RENDERBUFFER_RED_SIZE_EXT = 0x8D50; + public const int RENDERBUFFER_SAMPLES = 0x8CAB; + public const int RENDERBUFFER_SAMPLES_EXT = 0x8CAB; + public const int RENDERBUFFER_STENCIL_SIZE = 0x8D55; + public const int RENDERBUFFER_STENCIL_SIZE_EXT = 0x8D55; + public const int RENDERBUFFER_STORAGE_SAMPLES_AMD = 0x91B2; + public const int RENDERBUFFER_WIDTH = 0x8D42; + public const int RENDERBUFFER_WIDTH_EXT = 0x8D42; + public const int RENDERER = 0x1F01; + public const int RENDER_GPU_MASK_NV = 0x9558; + public const int REPEAT = 0x2901; + public const int REPLACE = 0x1E01; + public const int REPLACEMENT_CODE_ARRAY_POINTER_SUN = 0x85C3; + public const int REPLACEMENT_CODE_ARRAY_STRIDE_SUN = 0x85C2; + public const int REPLACEMENT_CODE_ARRAY_SUN = 0x85C0; + public const int REPLACEMENT_CODE_ARRAY_TYPE_SUN = 0x85C1; + public const int REPLACEMENT_CODE_SUN = 0x81D8; + public const int REPLACE_EXT = 0x8062; + public const int REPLACE_MIDDLE_SUN = 0x0002; + public const int REPLACE_OLDEST_SUN = 0x0003; + public const int REPLACE_VALUE_AMD = 0x874B; + public const int REPLICATE_BORDER_HP = 0x8153; + public const int REPRESENTATIVE_FRAGMENT_TEST_NV = 0x937F; + public const int RESAMPLE_AVERAGE_OML = 0x8988; + public const int RESAMPLE_DECIMATE_OML = 0x8989; + public const int RESAMPLE_DECIMATE_SGIX = 0x8430; + public const int RESAMPLE_REPLICATE_OML = 0x8986; + public const int RESAMPLE_REPLICATE_SGIX = 0x8433; + public const int RESAMPLE_ZERO_FILL_OML = 0x8987; + public const int RESAMPLE_ZERO_FILL_SGIX = 0x8434; + public const int RESCALE_NORMAL_EXT = 0x803A; + public const int RESET_NOTIFICATION_STRATEGY = 0x8256; + public const int RESET_NOTIFICATION_STRATEGY_ARB = 0x8256; + public const int RESTART_PATH_NV = 0xF0; + public const int RESTART_SUN = 0x0001; + public const int RETAINED_APPLE = 0x8A1B; + public const int RG = 0x8227; + public const int RG16 = 0x822C; + public const int RG16F = 0x822F; + public const int RG16F_EXT = 0x822F; + public const int RG16I = 0x8239; + public const int RG16UI = 0x823A; + public const int RG16_SNORM = 0x8F99; + public const int RG32F = 0x8230; + public const int RG32F_EXT = 0x8230; + public const int RG32I = 0x823B; + public const int RG32UI = 0x823C; + public const int RG8 = 0x822B; + public const int RG8I = 0x8237; + public const int RG8UI = 0x8238; + public const int RG8_EXT = 0x822B; + public const int RG8_SNORM = 0x8F95; + public const int RGB = 0x1907; + public const int RGB10 = 0x8052; + public const int RGB10_A2 = 0x8059; + public const int RGB10_A2UI = 0x906F; + public const int RGB10_A2_EXT = 0x8059; + public const int RGB10_EXT = 0x8052; + public const int RGB12 = 0x8053; + public const int RGB12_EXT = 0x8053; + public const int RGB16 = 0x8054; + public const int RGB16F = 0x881B; + public const int RGB16F_ARB = 0x881B; + public const int RGB16F_EXT = 0x881B; + public const int RGB16I = 0x8D89; + public const int RGB16I_EXT = 0x8D89; + public const int RGB16UI = 0x8D77; + public const int RGB16UI_EXT = 0x8D77; + public const int RGB16_EXT = 0x8054; + public const int RGB16_SNORM = 0x8F9A; + public const int RGB2_EXT = 0x804E; + public const int RGB32F = 0x8815; + public const int RGB32F_ARB = 0x8815; + public const int RGB32F_EXT = 0x8815; + public const int RGB32I = 0x8D83; + public const int RGB32I_EXT = 0x8D83; + public const int RGB32UI = 0x8D71; + public const int RGB32UI_EXT = 0x8D71; + public const int RGB4 = 0x804F; + public const int RGB4_EXT = 0x804F; + public const int RGB4_S3TC = 0x83A1; + public const int RGB5 = 0x8050; + public const int RGB565 = 0x8D62; + public const int RGB5_A1 = 0x8057; + public const int RGB5_A1_EXT = 0x8057; + public const int RGB5_EXT = 0x8050; + public const int RGB8 = 0x8051; + public const int RGB8I = 0x8D8F; + public const int RGB8I_EXT = 0x8D8F; + public const int RGB8UI = 0x8D7D; + public const int RGB8UI_EXT = 0x8D7D; + public const int RGB8_EXT = 0x8051; + public const int RGB8_SNORM = 0x8F96; + public const int RGB9_E5 = 0x8C3D; + public const int RGB9_E5_EXT = 0x8C3D; + public const int RGBA = 0x1908; + public const int RGBA12 = 0x805A; + public const int RGBA12_EXT = 0x805A; + public const int RGBA16 = 0x805B; + public const int RGBA16F = 0x881A; + public const int RGBA16F_ARB = 0x881A; + public const int RGBA16F_EXT = 0x881A; + public const int RGBA16I = 0x8D88; + public const int RGBA16I_EXT = 0x8D88; + public const int RGBA16UI = 0x8D76; + public const int RGBA16UI_EXT = 0x8D76; + public const int RGBA16_EXT = 0x805B; + public const int RGBA16_SNORM = 0x8F9B; + public const int RGBA2 = 0x8055; + public const int RGBA2_EXT = 0x8055; + public const int RGBA32F = 0x8814; + public const int RGBA32F_ARB = 0x8814; + public const int RGBA32F_EXT = 0x8814; + public const int RGBA32I = 0x8D82; + public const int RGBA32I_EXT = 0x8D82; + public const int RGBA32UI = 0x8D70; + public const int RGBA32UI_EXT = 0x8D70; + public const int RGBA4 = 0x8056; + public const int RGBA4_DXT5_S3TC = 0x83A5; + public const int RGBA4_EXT = 0x8056; + public const int RGBA4_S3TC = 0x83A3; + public const int RGBA8 = 0x8058; + public const int RGBA8I = 0x8D8E; + public const int RGBA8I_EXT = 0x8D8E; + public const int RGBA8UI = 0x8D7C; + public const int RGBA8UI_EXT = 0x8D7C; + public const int RGBA8_EXT = 0x8058; + public const int RGBA8_SNORM = 0x8F97; + public const int RGBA_DXT5_S3TC = 0x83A4; + public const int RGBA_FLOAT16_APPLE = 0x881A; + public const int RGBA_FLOAT16_ATI = 0x881A; + public const int RGBA_FLOAT32_APPLE = 0x8814; + public const int RGBA_FLOAT32_ATI = 0x8814; + public const int RGBA_FLOAT_MODE_ARB = 0x8820; + public const int RGBA_FLOAT_MODE_ATI = 0x8820; + public const int RGBA_INTEGER = 0x8D99; + public const int RGBA_INTEGER_EXT = 0x8D99; + public const int RGBA_INTEGER_MODE_EXT = 0x8D9E; + public const int RGBA_S3TC = 0x83A2; + public const int RGBA_SIGNED_COMPONENTS_EXT = 0x8C3C; + public const int RGBA_SNORM = 0x8F93; + public const int RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV = 0x86D9; + public const int RGB_422_APPLE = 0x8A1F; + public const int RGB_FLOAT16_APPLE = 0x881B; + public const int RGB_FLOAT16_ATI = 0x881B; + public const int RGB_FLOAT32_APPLE = 0x8815; + public const int RGB_FLOAT32_ATI = 0x8815; + public const int RGB_INTEGER = 0x8D98; + public const int RGB_INTEGER_EXT = 0x8D98; + public const int RGB_RAW_422_APPLE = 0x8A51; + public const int RGB_S3TC = 0x83A0; + public const int RGB_SCALE_ARB = 0x8573; + public const int RGB_SCALE_EXT = 0x8573; + public const int RGB_SNORM = 0x8F92; + public const int RG_INTEGER = 0x8228; + public const int RG_SNORM = 0x8F91; + public const int RIGHT = 0x0407; + public const int ROUNDED_RECT2_NV = 0xEA; + public const int ROUNDED_RECT4_NV = 0xEC; + public const int ROUNDED_RECT8_NV = 0xEE; + public const int ROUNDED_RECT_NV = 0xE8; + public const int ROUND_NV = 0x90A4; + public const int SAMPLER = 0x82E6; + public const int SAMPLER_1D = 0x8B5D; + public const int SAMPLER_1D_ARB = 0x8B5D; + public const int SAMPLER_1D_ARRAY = 0x8DC0; + public const int SAMPLER_1D_ARRAY_EXT = 0x8DC0; + public const int SAMPLER_1D_ARRAY_SHADOW = 0x8DC3; + public const int SAMPLER_1D_ARRAY_SHADOW_EXT = 0x8DC3; + public const int SAMPLER_1D_SHADOW = 0x8B61; + public const int SAMPLER_1D_SHADOW_ARB = 0x8B61; + public const int SAMPLER_2D = 0x8B5E; + public const int SAMPLER_2D_ARB = 0x8B5E; + public const int SAMPLER_2D_ARRAY = 0x8DC1; + public const int SAMPLER_2D_ARRAY_EXT = 0x8DC1; + public const int SAMPLER_2D_ARRAY_SHADOW = 0x8DC4; + public const int SAMPLER_2D_ARRAY_SHADOW_EXT = 0x8DC4; + public const int SAMPLER_2D_MULTISAMPLE = 0x9108; + public const int SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B; + public const int SAMPLER_2D_RECT = 0x8B63; + public const int SAMPLER_2D_RECT_ARB = 0x8B63; + public const int SAMPLER_2D_RECT_SHADOW = 0x8B64; + public const int SAMPLER_2D_RECT_SHADOW_ARB = 0x8B64; + public const int SAMPLER_2D_SHADOW = 0x8B62; + public const int SAMPLER_2D_SHADOW_ARB = 0x8B62; + public const int SAMPLER_3D = 0x8B5F; + public const int SAMPLER_3D_ARB = 0x8B5F; + public const int SAMPLER_BINDING = 0x8919; + public const int SAMPLER_BUFFER = 0x8DC2; + public const int SAMPLER_BUFFER_AMD = 0x9001; + public const int SAMPLER_BUFFER_EXT = 0x8DC2; + public const int SAMPLER_CUBE = 0x8B60; + public const int SAMPLER_CUBE_ARB = 0x8B60; + public const int SAMPLER_CUBE_MAP_ARRAY = 0x900C; + public const int SAMPLER_CUBE_MAP_ARRAY_ARB = 0x900C; + public const int SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D; + public const int SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB = 0x900D; + public const int SAMPLER_CUBE_SHADOW = 0x8DC5; + public const int SAMPLER_CUBE_SHADOW_EXT = 0x8DC5; + public const int SAMPLER_OBJECT_AMD = 0x9155; + public const int SAMPLER_RENDERBUFFER_NV = 0x8E56; + public const int SAMPLES = 0x80A9; + public const int SAMPLES_3DFX = 0x86B4; + public const int SAMPLES_ARB = 0x80A9; + public const int SAMPLES_EXT = 0x80A9; + public const int SAMPLES_PASSED = 0x8914; + public const int SAMPLES_PASSED_ARB = 0x8914; + public const int SAMPLES_SGIS = 0x80A9; + public const int SAMPLE_ALPHA_TO_COVERAGE = 0x809E; + public const int SAMPLE_ALPHA_TO_COVERAGE_ARB = 0x809E; + public const int SAMPLE_ALPHA_TO_MASK_EXT = 0x809E; + public const int SAMPLE_ALPHA_TO_MASK_SGIS = 0x809E; + public const int SAMPLE_ALPHA_TO_ONE = 0x809F; + public const int SAMPLE_ALPHA_TO_ONE_ARB = 0x809F; + public const int SAMPLE_ALPHA_TO_ONE_EXT = 0x809F; + public const int SAMPLE_ALPHA_TO_ONE_SGIS = 0x809F; + public const int SAMPLE_BUFFERS = 0x80A8; + public const int SAMPLE_BUFFERS_3DFX = 0x86B3; + public const int SAMPLE_BUFFERS_ARB = 0x80A8; + public const int SAMPLE_BUFFERS_EXT = 0x80A8; + public const int SAMPLE_BUFFERS_SGIS = 0x80A8; + public const int SAMPLE_COVERAGE = 0x80A0; + public const int SAMPLE_COVERAGE_ARB = 0x80A0; + public const int SAMPLE_COVERAGE_INVERT = 0x80AB; + public const int SAMPLE_COVERAGE_INVERT_ARB = 0x80AB; + public const int SAMPLE_COVERAGE_VALUE = 0x80AA; + public const int SAMPLE_COVERAGE_VALUE_ARB = 0x80AA; + public const int SAMPLE_LOCATION_ARB = 0x8E50; + public const int SAMPLE_LOCATION_NV = 0x8E50; + public const int SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB = 0x933F; + public const int SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV = 0x933F; + public const int SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB = 0x933E; + public const int SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV = 0x933E; + public const int SAMPLE_LOCATION_SUBPIXEL_BITS_ARB = 0x933D; + public const int SAMPLE_LOCATION_SUBPIXEL_BITS_NV = 0x933D; + public const int SAMPLE_MASK = 0x8E51; + public const int SAMPLE_MASK_EXT = 0x80A0; + public const int SAMPLE_MASK_INVERT_EXT = 0x80AB; + public const int SAMPLE_MASK_INVERT_SGIS = 0x80AB; + public const int SAMPLE_MASK_NV = 0x8E51; + public const int SAMPLE_MASK_SGIS = 0x80A0; + public const int SAMPLE_MASK_VALUE = 0x8E52; + public const int SAMPLE_MASK_VALUE_EXT = 0x80AA; + public const int SAMPLE_MASK_VALUE_NV = 0x8E52; + public const int SAMPLE_MASK_VALUE_SGIS = 0x80AA; + public const int SAMPLE_PATTERN_EXT = 0x80AC; + public const int SAMPLE_PATTERN_SGIS = 0x80AC; + public const int SAMPLE_POSITION = 0x8E50; + public const int SAMPLE_POSITION_NV = 0x8E50; + public const int SAMPLE_SHADING = 0x8C36; + public const int SAMPLE_SHADING_ARB = 0x8C36; + public const int SATURATE_BIT_ATI = 0x00000040; + public const int SCALAR_EXT = 0x87BE; + public const int SCALEBIAS_HINT_SGIX = 0x8322; + public const int SCALED_RESOLVE_FASTEST_EXT = 0x90BA; + public const int SCALED_RESOLVE_NICEST_EXT = 0x90BB; + public const int SCALE_BY_FOUR_NV = 0x853F; + public const int SCALE_BY_ONE_HALF_NV = 0x8540; + public const int SCALE_BY_TWO_NV = 0x853E; + public const int SCISSOR_BOX = 0x0C10; + public const int SCISSOR_BOX_EXCLUSIVE_NV = 0x9556; + public const int SCISSOR_COMMAND_NV = 0x0011; + public const int SCISSOR_TEST = 0x0C11; + public const int SCISSOR_TEST_EXCLUSIVE_NV = 0x9555; + public const int SCREEN_COORDINATES_REND = 0x8490; + public const int SCREEN_KHR = 0x9295; + public const int SCREEN_NV = 0x9295; + public const int SECONDARY_COLOR_ARRAY_ADDRESS_NV = 0x8F27; + public const int SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = 0x889C; + public const int SECONDARY_COLOR_ARRAY_EXT = 0x845E; + public const int SECONDARY_COLOR_ARRAY_LENGTH_NV = 0x8F31; + public const int SECONDARY_COLOR_ARRAY_LIST_IBM = 103077; + public const int SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM = 103087; + public const int SECONDARY_COLOR_ARRAY_POINTER_EXT = 0x845D; + public const int SECONDARY_COLOR_ARRAY_SIZE_EXT = 0x845A; + public const int SECONDARY_COLOR_ARRAY_STRIDE_EXT = 0x845C; + public const int SECONDARY_COLOR_ARRAY_TYPE_EXT = 0x845B; + public const int SECONDARY_COLOR_NV = 0x852D; + public const int SECONDARY_INTERPOLATOR_ATI = 0x896D; + public const int SEMAPHORE_TYPE_BINARY_NV = 0x95B4; + public const int SEMAPHORE_TYPE_NV = 0x95B3; + public const int SEMAPHORE_TYPE_TIMELINE_NV = 0x95B5; + public const int SEPARABLE_2D_EXT = 0x8012; + public const int SEPARATE_ATTRIBS = 0x8C8D; + public const int SEPARATE_ATTRIBS_EXT = 0x8C8D; + public const int SEPARATE_ATTRIBS_NV = 0x8C8D; + public const int SEPARATE_SPECULAR_COLOR_EXT = 0x81FA; + public const int SET = 0x150F; + public const int SET_AMD = 0x874A; + public const int SHADER = 0x82E1; + public const int SHADER_BINARY_FORMATS = 0x8DF8; + public const int SHADER_BINARY_FORMAT_SPIR_V = 0x9551; + public const int SHADER_BINARY_FORMAT_SPIR_V_ARB = 0x9551; + public const int SHADER_COMPILER = 0x8DFA; + public const int SHADER_CONSISTENT_NV = 0x86DD; + public const int SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV = 0x00000010; + public const int SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020; + public const int SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT = 0x00000020; + public const int SHADER_IMAGE_ATOMIC = 0x82A6; + public const int SHADER_IMAGE_LOAD = 0x82A4; + public const int SHADER_IMAGE_STORE = 0x82A5; + public const int SHADER_INCLUDE_ARB = 0x8DAE; + public const int SHADER_OBJECT_ARB = 0x8B48; + public const int SHADER_OBJECT_EXT = 0x8B48; + public const int SHADER_OPERATION_NV = 0x86DF; + public const int SHADER_SOURCE_LENGTH = 0x8B88; + public const int SHADER_STORAGE_BARRIER_BIT = 0x00002000; + public const int SHADER_STORAGE_BLOCK = 0x92E6; + public const int SHADER_STORAGE_BUFFER = 0x90D2; + public const int SHADER_STORAGE_BUFFER_BINDING = 0x90D3; + public const int SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x90DF; + public const int SHADER_STORAGE_BUFFER_SIZE = 0x90D5; + public const int SHADER_STORAGE_BUFFER_START = 0x90D4; + public const int SHADER_TYPE = 0x8B4F; + public const int SHADING_LANGUAGE_VERSION = 0x8B8C; + public const int SHADING_LANGUAGE_VERSION_ARB = 0x8B8C; + public const int SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 0x956F; + public const int SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 0x9566; + public const int SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 0x9567; + public const int SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 0x9568; + public const int SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 0x9569; + public const int SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 0x956A; + public const int SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 0x956B; + public const int SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0x9565; + public const int SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 0x956C; + public const int SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 0x956D; + public const int SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 0x956E; + public const int SHADING_RATE_IMAGE_BINDING_NV = 0x955B; + public const int SHADING_RATE_IMAGE_NV = 0x9563; + public const int SHADING_RATE_IMAGE_PALETTE_COUNT_NV = 0x95B2; + public const int SHADING_RATE_IMAGE_PALETTE_SIZE_NV = 0x955E; + public const int SHADING_RATE_IMAGE_PER_PRIMITIVE_NV = 0x95B1; + public const int SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV = 0x955D; + public const int SHADING_RATE_IMAGE_TEXEL_WIDTH_NV = 0x955C; + public const int SHADING_RATE_NO_INVOCATIONS_NV = 0x9564; + public const int SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV = 0x95AE; + public const int SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV = 0x95AF; + public const int SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV = 0x95B0; + public const int SHADOW_AMBIENT_SGIX = 0x80BF; + public const int SHADOW_ATTENUATION_EXT = 0x834E; + public const int SHARED_EDGE_NV = 0xC0; + public const int SHARED_TEXTURE_PALETTE_EXT = 0x81FB; + public const int SHARPEN_TEXTURE_FUNC_POINTS_SGIS = 0x80B0; + public const int SHORT = 0x1402; + public const int SIGNALED = 0x9119; + public const int SIGNED_ALPHA8_NV = 0x8706; + public const int SIGNED_ALPHA_NV = 0x8705; + public const int SIGNED_HILO16_NV = 0x86FA; + public const int SIGNED_HILO8_NV = 0x885F; + public const int SIGNED_HILO_NV = 0x86F9; + public const int SIGNED_IDENTITY_NV = 0x853C; + public const int SIGNED_INTENSITY8_NV = 0x8708; + public const int SIGNED_INTENSITY_NV = 0x8707; + public const int SIGNED_LUMINANCE8_ALPHA8_NV = 0x8704; + public const int SIGNED_LUMINANCE8_NV = 0x8702; + public const int SIGNED_LUMINANCE_ALPHA_NV = 0x8703; + public const int SIGNED_LUMINANCE_NV = 0x8701; + public const int SIGNED_NEGATE_NV = 0x853D; + public const int SIGNED_NORMALIZED = 0x8F9C; + public const int SIGNED_RGB8_NV = 0x86FF; + public const int SIGNED_RGB8_UNSIGNED_ALPHA8_NV = 0x870D; + public const int SIGNED_RGBA8_NV = 0x86FC; + public const int SIGNED_RGBA_NV = 0x86FB; + public const int SIGNED_RGB_NV = 0x86FE; + public const int SIGNED_RGB_UNSIGNED_ALPHA_NV = 0x870C; + public const int SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x82AC; + public const int SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x82AE; + public const int SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x82AD; + public const int SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x82AF; + public const int SINGLE_COLOR_EXT = 0x81F9; + public const int SKIP_COMPONENTS1_NV = -6; + public const int SKIP_COMPONENTS2_NV = -5; + public const int SKIP_COMPONENTS3_NV = -4; + public const int SKIP_COMPONENTS4_NV = -3; + public const int SKIP_DECODE_EXT = 0x8A4A; + public const int SKIP_MISSING_GLYPH_NV = 0x90A9; + public const int SLICE_ACCUM_SUN = 0x85CC; + public const int SLUMINANCE8_ALPHA8_EXT = 0x8C45; + public const int SLUMINANCE8_EXT = 0x8C47; + public const int SLUMINANCE_ALPHA_EXT = 0x8C44; + public const int SLUMINANCE_EXT = 0x8C46; + public const int SMALL_CCW_ARC_TO_NV = 0x12; + public const int SMALL_CW_ARC_TO_NV = 0x14; + public const int SMOOTH_CUBIC_CURVE_TO_NV = 0x10; + public const int SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23; + public const int SMOOTH_LINE_WIDTH_RANGE = 0x0B22; + public const int SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13; + public const int SMOOTH_POINT_SIZE_RANGE = 0x0B12; + public const int SMOOTH_QUADRATIC_CURVE_TO_NV = 0x0E; + public const int SM_COUNT_NV = 0x933B; + public const int SOFTLIGHT_KHR = 0x929C; + public const int SOFTLIGHT_NV = 0x929C; + public const int SOURCE0_ALPHA_ARB = 0x8588; + public const int SOURCE0_ALPHA_EXT = 0x8588; + public const int SOURCE0_RGB_ARB = 0x8580; + public const int SOURCE0_RGB_EXT = 0x8580; + public const int SOURCE1_ALPHA = 0x8589; + public const int SOURCE1_ALPHA_ARB = 0x8589; + public const int SOURCE1_ALPHA_EXT = 0x8589; + public const int SOURCE1_RGB_ARB = 0x8581; + public const int SOURCE1_RGB_EXT = 0x8581; + public const int SOURCE2_ALPHA_ARB = 0x858A; + public const int SOURCE2_ALPHA_EXT = 0x858A; + public const int SOURCE2_RGB_ARB = 0x8582; + public const int SOURCE2_RGB_EXT = 0x8582; + public const int SOURCE3_ALPHA_NV = 0x858B; + public const int SOURCE3_RGB_NV = 0x8583; + public const int SPARE0_NV = 0x852E; + public const int SPARE0_PLUS_SECONDARY_COLOR_NV = 0x8532; + public const int SPARE1_NV = 0x852F; + public const int SPARSE_BUFFER_PAGE_SIZE_ARB = 0x82F8; + public const int SPARSE_STORAGE_BIT_ARB = 0x0400; + public const int SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB = 0x91A9; + public const int SPIR_V_BINARY = 0x9552; + public const int SPIR_V_BINARY_ARB = 0x9552; + public const int SPIR_V_EXTENSIONS = 0x9553; + public const int SPRITE_AXIAL_SGIX = 0x814C; + public const int SPRITE_AXIS_SGIX = 0x814A; + public const int SPRITE_EYE_ALIGNED_SGIX = 0x814E; + public const int SPRITE_MODE_SGIX = 0x8149; + public const int SPRITE_OBJECT_ALIGNED_SGIX = 0x814D; + public const int SPRITE_SGIX = 0x8148; + public const int SPRITE_TRANSLATION_SGIX = 0x814B; + public const int SQUARE_NV = 0x90A3; + public const int SR8_EXT = 0x8FBD; + public const int SRC1_ALPHA = 0x8589; + public const int SRC1_COLOR = 0x88F9; + public const int SRC_ALPHA = 0x0302; + public const int SRC_ALPHA_SATURATE = 0x0308; + public const int SRC_ATOP_NV = 0x928E; + public const int SRC_COLOR = 0x0300; + public const int SRC_IN_NV = 0x928A; + public const int SRC_NV = 0x9286; + public const int SRC_OUT_NV = 0x928C; + public const int SRC_OVER_NV = 0x9288; + public const int SRG8_EXT = 0x8FBE; + public const int SRGB = 0x8C40; + public const int SRGB8 = 0x8C41; + public const int SRGB8_ALPHA8 = 0x8C43; + public const int SRGB8_ALPHA8_EXT = 0x8C43; + public const int SRGB8_EXT = 0x8C41; + public const int SRGB_ALPHA = 0x8C42; + public const int SRGB_ALPHA_EXT = 0x8C42; + public const int SRGB_DECODE_ARB = 0x8299; + public const int SRGB_EXT = 0x8C40; + public const int SRGB_READ = 0x8297; + public const int SRGB_WRITE = 0x8298; + public const int STACK_OVERFLOW = 0x0503; + public const int STACK_UNDERFLOW = 0x0504; + public const int STANDARD_FONT_FORMAT_NV = 0x936C; + public const int STANDARD_FONT_NAME_NV = 0x9072; + public const int STATIC_ATI = 0x8760; + public const int STATIC_COPY = 0x88E6; + public const int STATIC_COPY_ARB = 0x88E6; + public const int STATIC_DRAW = 0x88E4; + public const int STATIC_DRAW_ARB = 0x88E4; + public const int STATIC_READ = 0x88E5; + public const int STATIC_READ_ARB = 0x88E5; + public const int STATIC_VERTEX_ARRAY_IBM = 103061; + public const int STENCIL = 0x1802; + public const int STENCIL_ATTACHMENT = 0x8D20; + public const int STENCIL_ATTACHMENT_EXT = 0x8D20; + public const int STENCIL_BACK_FAIL = 0x8801; + public const int STENCIL_BACK_FAIL_ATI = 0x8801; + public const int STENCIL_BACK_FUNC = 0x8800; + public const int STENCIL_BACK_FUNC_ATI = 0x8800; + public const int STENCIL_BACK_OP_VALUE_AMD = 0x874D; + public const int STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; + public const int STENCIL_BACK_PASS_DEPTH_FAIL_ATI = 0x8802; + public const int STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; + public const int STENCIL_BACK_PASS_DEPTH_PASS_ATI = 0x8803; + public const int STENCIL_BACK_REF = 0x8CA3; + public const int STENCIL_BACK_VALUE_MASK = 0x8CA4; + public const int STENCIL_BACK_WRITEMASK = 0x8CA5; + public const int STENCIL_BUFFER_BIT = 0x00000400; + public const int STENCIL_CLEAR_TAG_VALUE_EXT = 0x88F3; + public const int STENCIL_CLEAR_VALUE = 0x0B91; + public const int STENCIL_COMPONENTS = 0x8285; + public const int STENCIL_FAIL = 0x0B94; + public const int STENCIL_FUNC = 0x0B92; + public const int STENCIL_INDEX = 0x1901; + public const int STENCIL_INDEX1 = 0x8D46; + public const int STENCIL_INDEX16 = 0x8D49; + public const int STENCIL_INDEX16_EXT = 0x8D49; + public const int STENCIL_INDEX1_EXT = 0x8D46; + public const int STENCIL_INDEX4 = 0x8D47; + public const int STENCIL_INDEX4_EXT = 0x8D47; + public const int STENCIL_INDEX8 = 0x8D48; + public const int STENCIL_INDEX8_EXT = 0x8D48; + public const int STENCIL_OP_VALUE_AMD = 0x874C; + public const int STENCIL_PASS_DEPTH_FAIL = 0x0B95; + public const int STENCIL_PASS_DEPTH_PASS = 0x0B96; + public const int STENCIL_REF = 0x0B97; + public const int STENCIL_REF_COMMAND_NV = 0x000C; + public const int STENCIL_RENDERABLE = 0x8288; + public const int STENCIL_SAMPLES_NV = 0x932E; + public const int STENCIL_TAG_BITS_EXT = 0x88F2; + public const int STENCIL_TEST = 0x0B90; + public const int STENCIL_TEST_TWO_SIDE_EXT = 0x8910; + public const int STENCIL_VALUE_MASK = 0x0B93; + public const int STENCIL_WRITEMASK = 0x0B98; + public const int STEREO = 0x0C33; + public const int STORAGE_CACHED_APPLE = 0x85BE; + public const int STORAGE_CLIENT_APPLE = 0x85B4; + public const int STORAGE_PRIVATE_APPLE = 0x85BD; + public const int STORAGE_SHARED_APPLE = 0x85BF; + public const int STREAM_COPY = 0x88E2; + public const int STREAM_COPY_ARB = 0x88E2; + public const int STREAM_DRAW = 0x88E0; + public const int STREAM_DRAW_ARB = 0x88E0; + public const int STREAM_RASTERIZATION_AMD = 0x91A0; + public const int STREAM_READ = 0x88E1; + public const int STREAM_READ_ARB = 0x88E1; + public const int STRICT_DEPTHFUNC_HINT_PGI = 0x1A216; + public const int STRICT_LIGHTING_HINT_PGI = 0x1A217; + public const int STRICT_SCISSOR_HINT_PGI = 0x1A218; + public const int SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR = 0x00000004; + public const int SUBGROUP_FEATURE_BALLOT_BIT_KHR = 0x00000008; + public const int SUBGROUP_FEATURE_BASIC_BIT_KHR = 0x00000001; + public const int SUBGROUP_FEATURE_CLUSTERED_BIT_KHR = 0x00000040; + public const int SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100; + public const int SUBGROUP_FEATURE_QUAD_BIT_KHR = 0x00000080; + public const int SUBGROUP_FEATURE_SHUFFLE_BIT_KHR = 0x00000010; + public const int SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR = 0x00000020; + public const int SUBGROUP_FEATURE_VOTE_BIT_KHR = 0x00000002; + public const int SUBGROUP_QUAD_ALL_STAGES_KHR = 0x9535; + public const int SUBGROUP_SIZE_KHR = 0x9532; + public const int SUBGROUP_SUPPORTED_FEATURES_KHR = 0x9534; + public const int SUBGROUP_SUPPORTED_STAGES_KHR = 0x9533; + public const int SUBPIXEL_BITS = 0x0D50; + public const int SUBPIXEL_PRECISION_BIAS_X_BITS_NV = 0x9347; + public const int SUBPIXEL_PRECISION_BIAS_Y_BITS_NV = 0x9348; + public const int SUBSAMPLE_DISTANCE_AMD = 0x883F; + public const int SUBTRACT_ARB = 0x84E7; + public const int SUB_ATI = 0x8965; + public const int SUCCESS_NV = 0x902F; + public const int SUPERSAMPLE_SCALE_X_NV = 0x9372; + public const int SUPERSAMPLE_SCALE_Y_NV = 0x9373; + public const int SUPPORTED_MULTISAMPLE_MODES_AMD = 0x91B7; + public const int SURFACE_MAPPED_NV = 0x8700; + public const int SURFACE_REGISTERED_NV = 0x86FD; + public const int SURFACE_STATE_NV = 0x86EB; + public const int SWIZZLE_STQ_ATI = 0x8977; + public const int SWIZZLE_STQ_DQ_ATI = 0x8979; + public const int SWIZZLE_STRQ_ATI = 0x897A; + public const int SWIZZLE_STRQ_DQ_ATI = 0x897B; + public const int SWIZZLE_STR_ATI = 0x8976; + public const int SWIZZLE_STR_DR_ATI = 0x8978; + public const int SYNC_CL_EVENT_ARB = 0x8240; + public const int SYNC_CL_EVENT_COMPLETE_ARB = 0x8241; + public const int SYNC_CONDITION = 0x9113; + public const int SYNC_FENCE = 0x9116; + public const int SYNC_FLAGS = 0x9115; + public const int SYNC_FLUSH_COMMANDS_BIT = 0x00000001; + public const int SYNC_GPU_COMMANDS_COMPLETE = 0x9117; + public const int SYNC_STATUS = 0x9114; + public const int SYNC_X11_FENCE_EXT = 0x90E1; + public const int SYSTEM_FONT_NAME_NV = 0x9073; + public const int T2F_IUI_N3F_V2F_EXT = 0x81B3; + public const int T2F_IUI_N3F_V3F_EXT = 0x81B4; + public const int T2F_IUI_V2F_EXT = 0x81B1; + public const int T2F_IUI_V3F_EXT = 0x81B2; + public const int TABLE_TOO_LARGE_EXT = 0x8031; + public const int TANGENT_ARRAY_EXT = 0x8439; + public const int TANGENT_ARRAY_POINTER_EXT = 0x8442; + public const int TANGENT_ARRAY_STRIDE_EXT = 0x843F; + public const int TANGENT_ARRAY_TYPE_EXT = 0x843E; + public const int TASK_SHADER_BIT_NV = 0x00000080; + public const int TASK_SHADER_NV = 0x955A; + public const int TASK_SUBROUTINE_NV = 0x957D; + public const int TASK_SUBROUTINE_UNIFORM_NV = 0x957F; + public const int TASK_WORK_GROUP_SIZE_NV = 0x953F; + public const int TERMINATE_SEQUENCE_COMMAND_NV = 0x0000; + public const int TESSELLATION_FACTOR_AMD = 0x9005; + public const int TESSELLATION_MODE_AMD = 0x9004; + public const int TESS_CONTROL_OUTPUT_VERTICES = 0x8E75; + public const int TESS_CONTROL_PROGRAM_NV = 0x891E; + public const int TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV = 0x8C74; + public const int TESS_CONTROL_SHADER = 0x8E88; + public const int TESS_CONTROL_SHADER_BIT = 0x00000008; + public const int TESS_CONTROL_SHADER_PATCHES = 0x82F1; + public const int TESS_CONTROL_SHADER_PATCHES_ARB = 0x82F1; + public const int TESS_CONTROL_SUBROUTINE = 0x92E9; + public const int TESS_CONTROL_SUBROUTINE_UNIFORM = 0x92EF; + public const int TESS_CONTROL_TEXTURE = 0x829C; + public const int TESS_EVALUATION_PROGRAM_NV = 0x891F; + public const int TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV = 0x8C75; + public const int TESS_EVALUATION_SHADER = 0x8E87; + public const int TESS_EVALUATION_SHADER_BIT = 0x00000010; + public const int TESS_EVALUATION_SHADER_INVOCATIONS = 0x82F2; + public const int TESS_EVALUATION_SHADER_INVOCATIONS_ARB = 0x82F2; + public const int TESS_EVALUATION_SUBROUTINE = 0x92EA; + public const int TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x92F0; + public const int TESS_EVALUATION_TEXTURE = 0x829D; + public const int TESS_GEN_MODE = 0x8E76; + public const int TESS_GEN_POINT_MODE = 0x8E79; + public const int TESS_GEN_SPACING = 0x8E77; + public const int TESS_GEN_VERTEX_ORDER = 0x8E78; + public const int TEXCOORD1_BIT_PGI = 0x10000000; + public const int TEXCOORD2_BIT_PGI = 0x20000000; + public const int TEXCOORD3_BIT_PGI = 0x40000000; + public const uint TEXCOORD4_BIT_PGI = 0x80000000; + public const int TEXTURE = 0x1702; + public const int TEXTURE0 = 0x84C0; + public const int TEXTURE0_ARB = 0x84C0; + public const int TEXTURE1 = 0x84C1; + public const int TEXTURE10 = 0x84CA; + public const int TEXTURE10_ARB = 0x84CA; + public const int TEXTURE11 = 0x84CB; + public const int TEXTURE11_ARB = 0x84CB; + public const int TEXTURE12 = 0x84CC; + public const int TEXTURE12_ARB = 0x84CC; + public const int TEXTURE13 = 0x84CD; + public const int TEXTURE13_ARB = 0x84CD; + public const int TEXTURE14 = 0x84CE; + public const int TEXTURE14_ARB = 0x84CE; + public const int TEXTURE15 = 0x84CF; + public const int TEXTURE15_ARB = 0x84CF; + public const int TEXTURE16 = 0x84D0; + public const int TEXTURE16_ARB = 0x84D0; + public const int TEXTURE17 = 0x84D1; + public const int TEXTURE17_ARB = 0x84D1; + public const int TEXTURE18 = 0x84D2; + public const int TEXTURE18_ARB = 0x84D2; + public const int TEXTURE19 = 0x84D3; + public const int TEXTURE19_ARB = 0x84D3; + public const int TEXTURE1_ARB = 0x84C1; + public const int TEXTURE2 = 0x84C2; + public const int TEXTURE20 = 0x84D4; + public const int TEXTURE20_ARB = 0x84D4; + public const int TEXTURE21 = 0x84D5; + public const int TEXTURE21_ARB = 0x84D5; + public const int TEXTURE22 = 0x84D6; + public const int TEXTURE22_ARB = 0x84D6; + public const int TEXTURE23 = 0x84D7; + public const int TEXTURE23_ARB = 0x84D7; + public const int TEXTURE24 = 0x84D8; + public const int TEXTURE24_ARB = 0x84D8; + public const int TEXTURE25 = 0x84D9; + public const int TEXTURE25_ARB = 0x84D9; + public const int TEXTURE26 = 0x84DA; + public const int TEXTURE26_ARB = 0x84DA; + public const int TEXTURE27 = 0x84DB; + public const int TEXTURE27_ARB = 0x84DB; + public const int TEXTURE28 = 0x84DC; + public const int TEXTURE28_ARB = 0x84DC; + public const int TEXTURE29 = 0x84DD; + public const int TEXTURE29_ARB = 0x84DD; + public const int TEXTURE2_ARB = 0x84C2; + public const int TEXTURE3 = 0x84C3; + public const int TEXTURE30 = 0x84DE; + public const int TEXTURE30_ARB = 0x84DE; + public const int TEXTURE31 = 0x84DF; + public const int TEXTURE31_ARB = 0x84DF; + public const int TEXTURE3_ARB = 0x84C3; + public const int TEXTURE4 = 0x84C4; + public const int TEXTURE4_ARB = 0x84C4; + public const int TEXTURE5 = 0x84C5; + public const int TEXTURE5_ARB = 0x84C5; + public const int TEXTURE6 = 0x84C6; + public const int TEXTURE6_ARB = 0x84C6; + public const int TEXTURE7 = 0x84C7; + public const int TEXTURE7_ARB = 0x84C7; + public const int TEXTURE8 = 0x84C8; + public const int TEXTURE8_ARB = 0x84C8; + public const int TEXTURE9 = 0x84C9; + public const int TEXTURE9_ARB = 0x84C9; + public const int TEXTURE_1D = 0x0DE0; + public const int TEXTURE_1D_ARRAY = 0x8C18; + public const int TEXTURE_1D_ARRAY_EXT = 0x8C18; + public const int TEXTURE_1D_BINDING_EXT = 0x8068; + public const int TEXTURE_1D_STACK_BINDING_MESAX = 0x875D; + public const int TEXTURE_1D_STACK_MESAX = 0x8759; + public const int TEXTURE_2D = 0x0DE1; + public const int TEXTURE_2D_ARRAY = 0x8C1A; + public const int TEXTURE_2D_ARRAY_EXT = 0x8C1A; + public const int TEXTURE_2D_BINDING_EXT = 0x8069; + public const int TEXTURE_2D_MULTISAMPLE = 0x9100; + public const int TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102; + public const int TEXTURE_2D_STACK_BINDING_MESAX = 0x875E; + public const int TEXTURE_2D_STACK_MESAX = 0x875A; + public const int TEXTURE_3D = 0x806F; + public const int TEXTURE_3D_BINDING_EXT = 0x806A; + public const int TEXTURE_3D_EXT = 0x806F; + public const int TEXTURE_4DSIZE_SGIS = 0x8136; + public const int TEXTURE_4D_BINDING_SGIS = 0x814F; + public const int TEXTURE_4D_SGIS = 0x8134; + public const int TEXTURE_ALPHA_SIZE = 0x805F; + public const int TEXTURE_ALPHA_SIZE_EXT = 0x805F; + public const int TEXTURE_ALPHA_TYPE = 0x8C13; + public const int TEXTURE_ALPHA_TYPE_ARB = 0x8C13; + public const int TEXTURE_APPLICATION_MODE_EXT = 0x834F; + public const int TEXTURE_BASE_LEVEL = 0x813C; + public const int TEXTURE_BASE_LEVEL_SGIS = 0x813C; + public const int TEXTURE_BINDING_1D = 0x8068; + public const int TEXTURE_BINDING_1D_ARRAY = 0x8C1C; + public const int TEXTURE_BINDING_1D_ARRAY_EXT = 0x8C1C; + public const int TEXTURE_BINDING_2D = 0x8069; + public const int TEXTURE_BINDING_2D_ARRAY = 0x8C1D; + public const int TEXTURE_BINDING_2D_ARRAY_EXT = 0x8C1D; + public const int TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104; + public const int TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105; + public const int TEXTURE_BINDING_3D = 0x806A; + public const int TEXTURE_BINDING_BUFFER = 0x8C2C; + public const int TEXTURE_BINDING_BUFFER_ARB = 0x8C2C; + public const int TEXTURE_BINDING_BUFFER_EXT = 0x8C2C; + public const int TEXTURE_BINDING_CUBE_MAP = 0x8514; + public const int TEXTURE_BINDING_CUBE_MAP_ARB = 0x8514; + public const int TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A; + public const int TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB = 0x900A; + public const int TEXTURE_BINDING_CUBE_MAP_EXT = 0x8514; + public const int TEXTURE_BINDING_RECTANGLE = 0x84F6; + public const int TEXTURE_BINDING_RECTANGLE_ARB = 0x84F6; + public const int TEXTURE_BINDING_RECTANGLE_NV = 0x84F6; + public const int TEXTURE_BINDING_RENDERBUFFER_NV = 0x8E53; + public const int TEXTURE_BLUE_SIZE = 0x805E; + public const int TEXTURE_BLUE_SIZE_EXT = 0x805E; + public const int TEXTURE_BLUE_TYPE = 0x8C12; + public const int TEXTURE_BLUE_TYPE_ARB = 0x8C12; + public const int TEXTURE_BORDER_COLOR = 0x1004; + public const int TEXTURE_BORDER_VALUES_NV = 0x871A; + public const int TEXTURE_BUFFER = 0x8C2A; + public const int TEXTURE_BUFFER_ARB = 0x8C2A; + public const int TEXTURE_BUFFER_BINDING = 0x8C2A; + public const int TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D; + public const int TEXTURE_BUFFER_DATA_STORE_BINDING_ARB = 0x8C2D; + public const int TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = 0x8C2D; + public const int TEXTURE_BUFFER_EXT = 0x8C2A; + public const int TEXTURE_BUFFER_FORMAT_ARB = 0x8C2E; + public const int TEXTURE_BUFFER_FORMAT_EXT = 0x8C2E; + public const int TEXTURE_BUFFER_OFFSET = 0x919D; + public const int TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x919F; + public const int TEXTURE_BUFFER_SIZE = 0x919E; + public const int TEXTURE_CLIPMAP_CENTER_SGIX = 0x8171; + public const int TEXTURE_CLIPMAP_DEPTH_SGIX = 0x8176; + public const int TEXTURE_CLIPMAP_FRAME_SGIX = 0x8172; + public const int TEXTURE_CLIPMAP_LOD_OFFSET_SGIX = 0x8175; + public const int TEXTURE_CLIPMAP_OFFSET_SGIX = 0x8173; + public const int TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX = 0x8174; + public const int TEXTURE_COLOR_SAMPLES_NV = 0x9046; + public const int TEXTURE_COLOR_TABLE_SGI = 0x80BC; + public const int TEXTURE_COLOR_WRITEMASK_SGIS = 0x81EF; + public const int TEXTURE_COMPARE_FAIL_VALUE_ARB = 0x80BF; + public const int TEXTURE_COMPARE_FUNC = 0x884D; + public const int TEXTURE_COMPARE_FUNC_ARB = 0x884D; + public const int TEXTURE_COMPARE_MODE = 0x884C; + public const int TEXTURE_COMPARE_MODE_ARB = 0x884C; + public const int TEXTURE_COMPARE_OPERATOR_SGIX = 0x819B; + public const int TEXTURE_COMPARE_SGIX = 0x819A; + public const int TEXTURE_COMPRESSED = 0x86A1; + public const int TEXTURE_COMPRESSED_ARB = 0x86A1; + public const int TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x82B2; + public const int TEXTURE_COMPRESSED_BLOCK_SIZE = 0x82B3; + public const int TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x82B1; + public const int TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0; + public const int TEXTURE_COMPRESSED_IMAGE_SIZE_ARB = 0x86A0; + public const int TEXTURE_COMPRESSION_HINT = 0x84EF; + public const int TEXTURE_COMPRESSION_HINT_ARB = 0x84EF; + public const int TEXTURE_CONSTANT_DATA_SUNX = 0x81D6; + public const int TEXTURE_COORD_ARRAY_ADDRESS_NV = 0x8F25; + public const int TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = 0x889A; + public const int TEXTURE_COORD_ARRAY_COUNT_EXT = 0x808B; + public const int TEXTURE_COORD_ARRAY_EXT = 0x8078; + public const int TEXTURE_COORD_ARRAY_LENGTH_NV = 0x8F2F; + public const int TEXTURE_COORD_ARRAY_LIST_IBM = 103074; + public const int TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM = 103084; + public const int TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL = 0x83F8; + public const int TEXTURE_COORD_ARRAY_POINTER_EXT = 0x8092; + public const int TEXTURE_COORD_ARRAY_SIZE_EXT = 0x8088; + public const int TEXTURE_COORD_ARRAY_STRIDE_EXT = 0x808A; + public const int TEXTURE_COORD_ARRAY_TYPE_EXT = 0x8089; + public const int TEXTURE_COORD_NV = 0x8C79; + public const int TEXTURE_COVERAGE_SAMPLES_NV = 0x9045; + public const int TEXTURE_CUBE_MAP = 0x8513; + public const int TEXTURE_CUBE_MAP_ARB = 0x8513; + public const int TEXTURE_CUBE_MAP_ARRAY = 0x9009; + public const int TEXTURE_CUBE_MAP_ARRAY_ARB = 0x9009; + public const int TEXTURE_CUBE_MAP_EXT = 0x8513; + public const int TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; + public const int TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 0x8516; + public const int TEXTURE_CUBE_MAP_NEGATIVE_X_EXT = 0x8516; + public const int TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; + public const int TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 0x8518; + public const int TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT = 0x8518; + public const int TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; + public const int TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 0x851A; + public const int TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT = 0x851A; + public const int TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; + public const int TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 0x8515; + public const int TEXTURE_CUBE_MAP_POSITIVE_X_EXT = 0x8515; + public const int TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; + public const int TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 0x8517; + public const int TEXTURE_CUBE_MAP_POSITIVE_Y_EXT = 0x8517; + public const int TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; + public const int TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 0x8519; + public const int TEXTURE_CUBE_MAP_POSITIVE_Z_EXT = 0x8519; + public const int TEXTURE_CUBE_MAP_SEAMLESS = 0x884F; + public const int TEXTURE_DEFORMATION_BIT_SGIX = 0x00000001; + public const int TEXTURE_DEFORMATION_SGIX = 0x8195; + public const int TEXTURE_DEPTH = 0x8071; + public const int TEXTURE_DEPTH_EXT = 0x8071; + public const int TEXTURE_DEPTH_SIZE = 0x884A; + public const int TEXTURE_DEPTH_SIZE_ARB = 0x884A; + public const int TEXTURE_DEPTH_TYPE = 0x8C16; + public const int TEXTURE_DEPTH_TYPE_ARB = 0x8C16; + public const int TEXTURE_DS_SIZE_NV = 0x871D; + public const int TEXTURE_DT_SIZE_NV = 0x871E; + public const int TEXTURE_ENV_BIAS_SGIX = 0x80BE; + public const int TEXTURE_FETCH_BARRIER_BIT = 0x00000008; + public const int TEXTURE_FETCH_BARRIER_BIT_EXT = 0x00000008; + public const int TEXTURE_FILTER4_SIZE_SGIS = 0x8147; + public const int TEXTURE_FILTER_CONTROL_EXT = 0x8500; + public const int TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107; + public const int TEXTURE_FLOAT_COMPONENTS_NV = 0x888C; + public const int TEXTURE_FREE_MEMORY_ATI = 0x87FC; + public const int TEXTURE_GATHER = 0x82A2; + public const int TEXTURE_GATHER_SHADOW = 0x82A3; + public const int TEXTURE_GEQUAL_R_SGIX = 0x819D; + public const int TEXTURE_GREEN_SIZE = 0x805D; + public const int TEXTURE_GREEN_SIZE_EXT = 0x805D; + public const int TEXTURE_GREEN_TYPE = 0x8C11; + public const int TEXTURE_GREEN_TYPE_ARB = 0x8C11; + public const int TEXTURE_HEIGHT = 0x1001; + public const int TEXTURE_HI_SIZE_NV = 0x871B; + public const int TEXTURE_IMAGE_FORMAT = 0x828F; + public const int TEXTURE_IMAGE_TYPE = 0x8290; + public const int TEXTURE_IMMUTABLE_FORMAT = 0x912F; + public const int TEXTURE_IMMUTABLE_FORMAT_EXT = 0x912F; + public const int TEXTURE_IMMUTABLE_LEVELS = 0x82DF; + public const int TEXTURE_INDEX_SIZE_EXT = 0x80ED; + public const int TEXTURE_INTENSITY_SIZE_EXT = 0x8061; + public const int TEXTURE_INTENSITY_TYPE_ARB = 0x8C15; + public const int TEXTURE_INTERNAL_FORMAT = 0x1003; + public const int TEXTURE_LEQUAL_R_SGIX = 0x819C; + public const int TEXTURE_LIGHTING_MODE_HP = 0x8167; + public const int TEXTURE_LIGHT_EXT = 0x8350; + public const int TEXTURE_LOD_BIAS = 0x8501; + public const int TEXTURE_LOD_BIAS_EXT = 0x8501; + public const int TEXTURE_LOD_BIAS_R_SGIX = 0x8190; + public const int TEXTURE_LOD_BIAS_S_SGIX = 0x818E; + public const int TEXTURE_LOD_BIAS_T_SGIX = 0x818F; + public const int TEXTURE_LO_SIZE_NV = 0x871C; + public const int TEXTURE_LUMINANCE_SIZE_EXT = 0x8060; + public const int TEXTURE_LUMINANCE_TYPE_ARB = 0x8C14; + public const int TEXTURE_MAG_FILTER = 0x2800; + public const int TEXTURE_MAG_SIZE_NV = 0x871F; + public const int TEXTURE_MATERIAL_FACE_EXT = 0x8351; + public const int TEXTURE_MATERIAL_PARAMETER_EXT = 0x8352; + public const int TEXTURE_MAX_ANISOTROPY = 0x84FE; + public const int TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE; + public const int TEXTURE_MAX_CLAMP_R_SGIX = 0x836B; + public const int TEXTURE_MAX_CLAMP_S_SGIX = 0x8369; + public const int TEXTURE_MAX_CLAMP_T_SGIX = 0x836A; + public const int TEXTURE_MAX_LEVEL = 0x813D; + public const int TEXTURE_MAX_LEVEL_SGIS = 0x813D; + public const int TEXTURE_MAX_LOD = 0x813B; + public const int TEXTURE_MAX_LOD_SGIS = 0x813B; + public const int TEXTURE_MEMORY_LAYOUT_INTEL = 0x83FF; + public const int TEXTURE_MIN_FILTER = 0x2801; + public const int TEXTURE_MIN_LOD = 0x813A; + public const int TEXTURE_MIN_LOD_SGIS = 0x813A; + public const int TEXTURE_MULTI_BUFFER_HINT_SGIX = 0x812E; + public const int TEXTURE_NORMAL_EXT = 0x85AF; + public const int TEXTURE_POST_SPECULAR_HP = 0x8168; + public const int TEXTURE_PRE_SPECULAR_HP = 0x8169; + public const int TEXTURE_PRIORITY_EXT = 0x8066; + public const int TEXTURE_RANGE_LENGTH_APPLE = 0x85B7; + public const int TEXTURE_RANGE_POINTER_APPLE = 0x85B8; + public const int TEXTURE_RECTANGLE = 0x84F5; + public const int TEXTURE_RECTANGLE_ARB = 0x84F5; + public const int TEXTURE_RECTANGLE_NV = 0x84F5; + public const int TEXTURE_REDUCTION_MODE_ARB = 0x9366; + public const int TEXTURE_REDUCTION_MODE_EXT = 0x9366; + public const int TEXTURE_RED_SIZE = 0x805C; + public const int TEXTURE_RED_SIZE_EXT = 0x805C; + public const int TEXTURE_RED_TYPE = 0x8C10; + public const int TEXTURE_RED_TYPE_ARB = 0x8C10; + public const int TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV = 0x8E54; + public const int TEXTURE_RENDERBUFFER_NV = 0x8E55; + public const int TEXTURE_RESIDENT_EXT = 0x8067; + public const int TEXTURE_SAMPLES = 0x9106; + public const int TEXTURE_SHADER_NV = 0x86DE; + public const int TEXTURE_SHADOW = 0x82A1; + public const int TEXTURE_SHARED_SIZE = 0x8C3F; + public const int TEXTURE_SHARED_SIZE_EXT = 0x8C3F; + public const int TEXTURE_SPARSE_ARB = 0x91A6; + public const int TEXTURE_SRGB_DECODE_EXT = 0x8A48; + public const int TEXTURE_STENCIL_SIZE = 0x88F1; + public const int TEXTURE_STENCIL_SIZE_EXT = 0x88F1; + public const int TEXTURE_STORAGE_HINT_APPLE = 0x85BC; + public const int TEXTURE_STORAGE_SPARSE_BIT_AMD = 0x00000001; + public const int TEXTURE_SWIZZLE_A = 0x8E45; + public const int TEXTURE_SWIZZLE_A_EXT = 0x8E45; + public const int TEXTURE_SWIZZLE_B = 0x8E44; + public const int TEXTURE_SWIZZLE_B_EXT = 0x8E44; + public const int TEXTURE_SWIZZLE_G = 0x8E43; + public const int TEXTURE_SWIZZLE_G_EXT = 0x8E43; + public const int TEXTURE_SWIZZLE_R = 0x8E42; + public const int TEXTURE_SWIZZLE_RGBA = 0x8E46; + public const int TEXTURE_SWIZZLE_RGBA_EXT = 0x8E46; + public const int TEXTURE_SWIZZLE_R_EXT = 0x8E42; + public const int TEXTURE_TARGET = 0x1006; + public const int TEXTURE_TILING_EXT = 0x9580; + public const int TEXTURE_TOO_LARGE_EXT = 0x8065; + public const int TEXTURE_UNSIGNED_REMAP_MODE_NV = 0x888F; + public const int TEXTURE_UPDATE_BARRIER_BIT = 0x00000100; + public const int TEXTURE_UPDATE_BARRIER_BIT_EXT = 0x00000100; + public const int TEXTURE_VIEW = 0x82B5; + public const int TEXTURE_VIEW_MIN_LAYER = 0x82DD; + public const int TEXTURE_VIEW_MIN_LEVEL = 0x82DB; + public const int TEXTURE_VIEW_NUM_LAYERS = 0x82DE; + public const int TEXTURE_VIEW_NUM_LEVELS = 0x82DC; + public const int TEXTURE_WIDTH = 0x1000; + public const int TEXTURE_WRAP_Q_SGIS = 0x8137; + public const int TEXTURE_WRAP_R = 0x8072; + public const int TEXTURE_WRAP_R_EXT = 0x8072; + public const int TEXTURE_WRAP_S = 0x2802; + public const int TEXTURE_WRAP_T = 0x2803; + public const int TEXT_FRAGMENT_SHADER_ATI = 0x8200; + public const int TILE_RASTER_ORDER_FIXED_MESA = 0x8BB8; + public const int TILE_RASTER_ORDER_INCREASING_X_MESA = 0x8BB9; + public const int TILE_RASTER_ORDER_INCREASING_Y_MESA = 0x8BBA; + public const int TILING_TYPES_EXT = 0x9583; + public const int TIMELINE_SEMAPHORE_VALUE_NV = 0x9595; + public const int TIMEOUT_EXPIRED = 0x911B; + public const ulong TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF; + public const int TIMESTAMP = 0x8E28; + public const int TIME_ELAPSED = 0x88BF; + public const int TIME_ELAPSED_EXT = 0x88BF; + public const int TOP_LEVEL_ARRAY_SIZE = 0x930C; + public const int TOP_LEVEL_ARRAY_STRIDE = 0x930D; + public const int TRACK_MATRIX_NV = 0x8648; + public const int TRACK_MATRIX_TRANSFORM_NV = 0x8649; + public const int TRANSFORM_FEEDBACK = 0x8E22; + public const int TRANSFORM_FEEDBACK_ACTIVE = 0x8E24; + public const int TRANSFORM_FEEDBACK_ATTRIBS_NV = 0x8C7E; + public const int TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800; + public const int TRANSFORM_FEEDBACK_BARRIER_BIT_EXT = 0x00000800; + public const int TRANSFORM_FEEDBACK_BINDING = 0x8E25; + public const int TRANSFORM_FEEDBACK_BINDING_NV = 0x8E25; + public const int TRANSFORM_FEEDBACK_BUFFER = 0x8C8E; + public const int TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24; + public const int TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV = 0x8E24; + public const int TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F; + public const int TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT = 0x8C8F; + public const int TRANSFORM_FEEDBACK_BUFFER_BINDING_NV = 0x8C8F; + public const int TRANSFORM_FEEDBACK_BUFFER_EXT = 0x8C8E; + public const int TRANSFORM_FEEDBACK_BUFFER_INDEX = 0x934B; + public const int TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F; + public const int TRANSFORM_FEEDBACK_BUFFER_MODE_EXT = 0x8C7F; + public const int TRANSFORM_FEEDBACK_BUFFER_MODE_NV = 0x8C7F; + public const int TRANSFORM_FEEDBACK_BUFFER_NV = 0x8C8E; + public const int TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23; + public const int TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV = 0x8E23; + public const int TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85; + public const int TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT = 0x8C85; + public const int TRANSFORM_FEEDBACK_BUFFER_SIZE_NV = 0x8C85; + public const int TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84; + public const int TRANSFORM_FEEDBACK_BUFFER_START_EXT = 0x8C84; + public const int TRANSFORM_FEEDBACK_BUFFER_START_NV = 0x8C84; + public const int TRANSFORM_FEEDBACK_BUFFER_STRIDE = 0x934C; + public const int TRANSFORM_FEEDBACK_NV = 0x8E22; + public const int TRANSFORM_FEEDBACK_OVERFLOW = 0x82EC; + public const int TRANSFORM_FEEDBACK_OVERFLOW_ARB = 0x82EC; + public const int TRANSFORM_FEEDBACK_PAUSED = 0x8E23; + public const int TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88; + public const int TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT = 0x8C88; + public const int TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV = 0x8C88; + public const int TRANSFORM_FEEDBACK_RECORD_NV = 0x8C86; + public const int TRANSFORM_FEEDBACK_STREAM_OVERFLOW = 0x82ED; + public const int TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB = 0x82ED; + public const int TRANSFORM_FEEDBACK_VARYING = 0x92F4; + public const int TRANSFORM_FEEDBACK_VARYINGS = 0x8C83; + public const int TRANSFORM_FEEDBACK_VARYINGS_EXT = 0x8C83; + public const int TRANSFORM_FEEDBACK_VARYINGS_NV = 0x8C83; + public const int TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76; + public const int TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT = 0x8C76; + public const int TRANSFORM_HINT_APPLE = 0x85B1; + public const int TRANSLATE_2D_NV = 0x9090; + public const int TRANSLATE_3D_NV = 0x9091; + public const int TRANSLATE_X_NV = 0x908E; + public const int TRANSLATE_Y_NV = 0x908F; + public const int TRANSPOSE_AFFINE_2D_NV = 0x9096; + public const int TRANSPOSE_AFFINE_3D_NV = 0x9098; + public const int TRANSPOSE_COLOR_MATRIX_ARB = 0x84E6; + public const int TRANSPOSE_CURRENT_MATRIX_ARB = 0x88B7; + public const int TRANSPOSE_MODELVIEW_MATRIX_ARB = 0x84E3; + public const int TRANSPOSE_NV = 0x862C; + public const int TRANSPOSE_PROGRAM_MATRIX_EXT = 0x8E2E; + public const int TRANSPOSE_PROJECTION_MATRIX_ARB = 0x84E4; + public const int TRANSPOSE_TEXTURE_MATRIX_ARB = 0x84E5; + public const int TRIANGLES = 0x0004; + public const int TRIANGLES_ADJACENCY = 0x000C; + public const int TRIANGLES_ADJACENCY_ARB = 0x000C; + public const int TRIANGLES_ADJACENCY_EXT = 0x000C; + public const int TRIANGLE_FAN = 0x0006; + public const int TRIANGLE_LIST_SUN = 0x81D7; + public const int TRIANGLE_MESH_SUN = 0x8615; + public const int TRIANGLE_STRIP = 0x0005; + public const int TRIANGLE_STRIP_ADJACENCY = 0x000D; + public const int TRIANGLE_STRIP_ADJACENCY_ARB = 0x000D; + public const int TRIANGLE_STRIP_ADJACENCY_EXT = 0x000D; + public const int TRIANGULAR_NV = 0x90A5; + public const int TRUE = 1; + public const int TYPE = 0x92FA; + public const int UNCORRELATED_NV = 0x9282; + public const int UNDEFINED_APPLE = 0x8A1C; + public const int UNDEFINED_VERTEX = 0x8260; + public const int UNIFORM = 0x92E1; + public const int UNIFORM_ADDRESS_COMMAND_NV = 0x000A; + public const int UNIFORM_ARRAY_STRIDE = 0x8A3C; + public const int UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA; + public const int UNIFORM_BARRIER_BIT = 0x00000004; + public const int UNIFORM_BARRIER_BIT_EXT = 0x00000004; + public const int UNIFORM_BLOCK = 0x92E2; + public const int UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42; + public const int UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43; + public const int UNIFORM_BLOCK_BINDING = 0x8A3F; + public const int UNIFORM_BLOCK_DATA_SIZE = 0x8A40; + public const int UNIFORM_BLOCK_INDEX = 0x8A3A; + public const int UNIFORM_BLOCK_NAME_LENGTH = 0x8A41; + public const int UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x90EC; + public const int UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46; + public const int UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45; + public const int UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV = 0x959C; + public const int UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV = 0x959D; + public const int UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0; + public const int UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1; + public const int UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44; + public const int UNIFORM_BUFFER = 0x8A11; + public const int UNIFORM_BUFFER_ADDRESS_NV = 0x936F; + public const int UNIFORM_BUFFER_BINDING = 0x8A28; + public const int UNIFORM_BUFFER_BINDING_EXT = 0x8DEF; + public const int UNIFORM_BUFFER_EXT = 0x8DEE; + public const int UNIFORM_BUFFER_LENGTH_NV = 0x9370; + public const int UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34; + public const int UNIFORM_BUFFER_SIZE = 0x8A2A; + public const int UNIFORM_BUFFER_START = 0x8A29; + public const int UNIFORM_BUFFER_UNIFIED_NV = 0x936E; + public const int UNIFORM_IS_ROW_MAJOR = 0x8A3E; + public const int UNIFORM_MATRIX_STRIDE = 0x8A3D; + public const int UNIFORM_NAME_LENGTH = 0x8A39; + public const int UNIFORM_OFFSET = 0x8A3B; + public const int UNIFORM_SIZE = 0x8A38; + public const int UNIFORM_TYPE = 0x8A37; + public const int UNKNOWN_CONTEXT_RESET = 0x8255; + public const int UNKNOWN_CONTEXT_RESET_ARB = 0x8255; + public const int UNPACK_ALIGNMENT = 0x0CF5; + public const int UNPACK_CLIENT_STORAGE_APPLE = 0x85B2; + public const int UNPACK_CMYK_HINT_EXT = 0x800F; + public const int UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129; + public const int UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128; + public const int UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A; + public const int UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127; + public const int UNPACK_CONSTANT_DATA_SUNX = 0x81D5; + public const int UNPACK_IMAGE_DEPTH_SGIS = 0x8133; + public const int UNPACK_IMAGE_HEIGHT = 0x806E; + public const int UNPACK_IMAGE_HEIGHT_EXT = 0x806E; + public const int UNPACK_LSB_FIRST = 0x0CF1; + public const int UNPACK_RESAMPLE_OML = 0x8985; + public const int UNPACK_RESAMPLE_SGIX = 0x842F; + public const int UNPACK_ROW_BYTES_APPLE = 0x8A16; + public const int UNPACK_ROW_LENGTH = 0x0CF2; + public const int UNPACK_SKIP_IMAGES = 0x806D; + public const int UNPACK_SKIP_IMAGES_EXT = 0x806D; + public const int UNPACK_SKIP_PIXELS = 0x0CF4; + public const int UNPACK_SKIP_ROWS = 0x0CF3; + public const int UNPACK_SKIP_VOLUMES_SGIS = 0x8132; + public const int UNPACK_SUBSAMPLE_RATE_SGIX = 0x85A1; + public const int UNPACK_SWAP_BYTES = 0x0CF0; + public const int UNSIGNALED = 0x9118; + public const int UNSIGNED_BYTE = 0x1401; + public const int UNSIGNED_BYTE_2_3_3_REV = 0x8362; + public const int UNSIGNED_BYTE_3_3_2 = 0x8032; + public const int UNSIGNED_BYTE_3_3_2_EXT = 0x8032; + public const int UNSIGNED_IDENTITY_NV = 0x8536; + public const int UNSIGNED_INT = 0x1405; + public const int UNSIGNED_INT16_NV = 0x8FF0; + public const int UNSIGNED_INT16_VEC2_NV = 0x8FF1; + public const int UNSIGNED_INT16_VEC3_NV = 0x8FF2; + public const int UNSIGNED_INT16_VEC4_NV = 0x8FF3; + public const int UNSIGNED_INT64_AMD = 0x8BC2; + public const int UNSIGNED_INT64_ARB = 0x140F; + public const int UNSIGNED_INT64_NV = 0x140F; + public const int UNSIGNED_INT64_VEC2_ARB = 0x8FF5; + public const int UNSIGNED_INT64_VEC2_NV = 0x8FF5; + public const int UNSIGNED_INT64_VEC3_ARB = 0x8FF6; + public const int UNSIGNED_INT64_VEC3_NV = 0x8FF6; + public const int UNSIGNED_INT64_VEC4_ARB = 0x8FF7; + public const int UNSIGNED_INT64_VEC4_NV = 0x8FF7; + public const int UNSIGNED_INT8_NV = 0x8FEC; + public const int UNSIGNED_INT8_VEC2_NV = 0x8FED; + public const int UNSIGNED_INT8_VEC3_NV = 0x8FEE; + public const int UNSIGNED_INT8_VEC4_NV = 0x8FEF; + public const int UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B; + public const int UNSIGNED_INT_10F_11F_11F_REV_EXT = 0x8C3B; + public const int UNSIGNED_INT_10_10_10_2 = 0x8036; + public const int UNSIGNED_INT_10_10_10_2_EXT = 0x8036; + public const int UNSIGNED_INT_24_8 = 0x84FA; + public const int UNSIGNED_INT_24_8_EXT = 0x84FA; + public const int UNSIGNED_INT_24_8_NV = 0x84FA; + public const int UNSIGNED_INT_2_10_10_10_REV = 0x8368; + public const int UNSIGNED_INT_5_9_9_9_REV = 0x8C3E; + public const int UNSIGNED_INT_5_9_9_9_REV_EXT = 0x8C3E; + public const int UNSIGNED_INT_8_8_8_8 = 0x8035; + public const int UNSIGNED_INT_8_8_8_8_EXT = 0x8035; + public const int UNSIGNED_INT_8_8_8_8_REV = 0x8367; + public const int UNSIGNED_INT_8_8_S8_S8_REV_NV = 0x86DB; + public const int UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB; + public const int UNSIGNED_INT_IMAGE_1D = 0x9062; + public const int UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068; + public const int UNSIGNED_INT_IMAGE_1D_ARRAY_EXT = 0x9068; + public const int UNSIGNED_INT_IMAGE_1D_EXT = 0x9062; + public const int UNSIGNED_INT_IMAGE_2D = 0x9063; + public const int UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069; + public const int UNSIGNED_INT_IMAGE_2D_ARRAY_EXT = 0x9069; + public const int UNSIGNED_INT_IMAGE_2D_EXT = 0x9063; + public const int UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B; + public const int UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C; + public const int UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x906C; + public const int UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT = 0x906B; + public const int UNSIGNED_INT_IMAGE_2D_RECT = 0x9065; + public const int UNSIGNED_INT_IMAGE_2D_RECT_EXT = 0x9065; + public const int UNSIGNED_INT_IMAGE_3D = 0x9064; + public const int UNSIGNED_INT_IMAGE_3D_EXT = 0x9064; + public const int UNSIGNED_INT_IMAGE_BUFFER = 0x9067; + public const int UNSIGNED_INT_IMAGE_BUFFER_EXT = 0x9067; + public const int UNSIGNED_INT_IMAGE_CUBE = 0x9066; + public const int UNSIGNED_INT_IMAGE_CUBE_EXT = 0x9066; + public const int UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A; + public const int UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 0x906A; + public const int UNSIGNED_INT_S8_S8_8_8_NV = 0x86DA; + public const int UNSIGNED_INT_SAMPLER_1D = 0x8DD1; + public const int UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6; + public const int UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT = 0x8DD6; + public const int UNSIGNED_INT_SAMPLER_1D_EXT = 0x8DD1; + public const int UNSIGNED_INT_SAMPLER_2D = 0x8DD2; + public const int UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7; + public const int UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT = 0x8DD7; + public const int UNSIGNED_INT_SAMPLER_2D_EXT = 0x8DD2; + public const int UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A; + public const int UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D; + public const int UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5; + public const int UNSIGNED_INT_SAMPLER_2D_RECT_EXT = 0x8DD5; + public const int UNSIGNED_INT_SAMPLER_3D = 0x8DD3; + public const int UNSIGNED_INT_SAMPLER_3D_EXT = 0x8DD3; + public const int UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8; + public const int UNSIGNED_INT_SAMPLER_BUFFER_AMD = 0x9003; + public const int UNSIGNED_INT_SAMPLER_BUFFER_EXT = 0x8DD8; + public const int UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4; + public const int UNSIGNED_INT_SAMPLER_CUBE_EXT = 0x8DD4; + public const int UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F; + public const int UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x900F; + public const int UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV = 0x8E58; + public const int UNSIGNED_INT_VEC2 = 0x8DC6; + public const int UNSIGNED_INT_VEC2_EXT = 0x8DC6; + public const int UNSIGNED_INT_VEC3 = 0x8DC7; + public const int UNSIGNED_INT_VEC3_EXT = 0x8DC7; + public const int UNSIGNED_INT_VEC4 = 0x8DC8; + public const int UNSIGNED_INT_VEC4_EXT = 0x8DC8; + public const int UNSIGNED_INVERT_NV = 0x8537; + public const int UNSIGNED_NORMALIZED = 0x8C17; + public const int UNSIGNED_NORMALIZED_ARB = 0x8C17; + public const int UNSIGNED_SHORT = 0x1403; + public const int UNSIGNED_SHORT_1_5_5_5_REV = 0x8366; + public const int UNSIGNED_SHORT_4_4_4_4 = 0x8033; + public const int UNSIGNED_SHORT_4_4_4_4_EXT = 0x8033; + public const int UNSIGNED_SHORT_4_4_4_4_REV = 0x8365; + public const int UNSIGNED_SHORT_5_5_5_1 = 0x8034; + public const int UNSIGNED_SHORT_5_5_5_1_EXT = 0x8034; + public const int UNSIGNED_SHORT_5_6_5 = 0x8363; + public const int UNSIGNED_SHORT_5_6_5_REV = 0x8364; + public const int UNSIGNED_SHORT_8_8_APPLE = 0x85BA; + public const int UNSIGNED_SHORT_8_8_MESA = 0x85BA; + public const int UNSIGNED_SHORT_8_8_REV_APPLE = 0x85BB; + public const int UNSIGNED_SHORT_8_8_REV_MESA = 0x85BB; + public const int UPLOAD_GPU_MASK_NVX = 0x954A; + public const int UPPER_LEFT = 0x8CA2; + public const int USE_MISSING_GLYPH_NV = 0x90AA; + public const int UTF16_NV = 0x909B; + public const int UTF8_NV = 0x909A; + public const int UUID_SIZE_EXT = 16; + public const int VALIDATE_STATUS = 0x8B83; + public const int VARIABLE_A_NV = 0x8523; + public const int VARIABLE_B_NV = 0x8524; + public const int VARIABLE_C_NV = 0x8525; + public const int VARIABLE_D_NV = 0x8526; + public const int VARIABLE_E_NV = 0x8527; + public const int VARIABLE_F_NV = 0x8528; + public const int VARIABLE_G_NV = 0x8529; + public const int VARIANT_ARRAY_EXT = 0x87E8; + public const int VARIANT_ARRAY_POINTER_EXT = 0x87E9; + public const int VARIANT_ARRAY_STRIDE_EXT = 0x87E6; + public const int VARIANT_ARRAY_TYPE_EXT = 0x87E7; + public const int VARIANT_DATATYPE_EXT = 0x87E5; + public const int VARIANT_EXT = 0x87C1; + public const int VARIANT_VALUE_EXT = 0x87E4; + public const int VBO_FREE_MEMORY_ATI = 0x87FB; + public const int VECTOR_EXT = 0x87BF; + public const int VENDOR = 0x1F00; + public const int VERSION = 0x1F02; + public const int VERTEX23_BIT_PGI = 0x00000004; + public const int VERTEX4_BIT_PGI = 0x00000008; + public const int VERTEX_ARRAY = 0x8074; + public const int VERTEX_ARRAY_ADDRESS_NV = 0x8F21; + public const int VERTEX_ARRAY_BINDING = 0x85B5; + public const int VERTEX_ARRAY_BINDING_APPLE = 0x85B5; + public const int VERTEX_ARRAY_BUFFER_BINDING_ARB = 0x8896; + public const int VERTEX_ARRAY_COUNT_EXT = 0x807D; + public const int VERTEX_ARRAY_EXT = 0x8074; + public const int VERTEX_ARRAY_LENGTH_NV = 0x8F2B; + public const int VERTEX_ARRAY_LIST_IBM = 103070; + public const int VERTEX_ARRAY_LIST_STRIDE_IBM = 103080; + public const int VERTEX_ARRAY_OBJECT_AMD = 0x9154; + public const int VERTEX_ARRAY_OBJECT_EXT = 0x9154; + public const int VERTEX_ARRAY_PARALLEL_POINTERS_INTEL = 0x83F5; + public const int VERTEX_ARRAY_POINTER_EXT = 0x808E; + public const int VERTEX_ARRAY_RANGE_APPLE = 0x851D; + public const int VERTEX_ARRAY_RANGE_LENGTH_APPLE = 0x851E; + public const int VERTEX_ARRAY_RANGE_LENGTH_NV = 0x851E; + public const int VERTEX_ARRAY_RANGE_NV = 0x851D; + public const int VERTEX_ARRAY_RANGE_POINTER_APPLE = 0x8521; + public const int VERTEX_ARRAY_RANGE_POINTER_NV = 0x8521; + public const int VERTEX_ARRAY_RANGE_VALID_NV = 0x851F; + public const int VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV = 0x8533; + public const int VERTEX_ARRAY_SIZE_EXT = 0x807A; + public const int VERTEX_ARRAY_STORAGE_HINT_APPLE = 0x851F; + public const int VERTEX_ARRAY_STRIDE_EXT = 0x807C; + public const int VERTEX_ARRAY_TYPE_EXT = 0x807B; + public const int VERTEX_ATTRIB_ARRAY0_NV = 0x8650; + public const int VERTEX_ATTRIB_ARRAY10_NV = 0x865A; + public const int VERTEX_ATTRIB_ARRAY11_NV = 0x865B; + public const int VERTEX_ATTRIB_ARRAY12_NV = 0x865C; + public const int VERTEX_ATTRIB_ARRAY13_NV = 0x865D; + public const int VERTEX_ATTRIB_ARRAY14_NV = 0x865E; + public const int VERTEX_ATTRIB_ARRAY15_NV = 0x865F; + public const int VERTEX_ATTRIB_ARRAY1_NV = 0x8651; + public const int VERTEX_ATTRIB_ARRAY2_NV = 0x8652; + public const int VERTEX_ATTRIB_ARRAY3_NV = 0x8653; + public const int VERTEX_ATTRIB_ARRAY4_NV = 0x8654; + public const int VERTEX_ATTRIB_ARRAY5_NV = 0x8655; + public const int VERTEX_ATTRIB_ARRAY6_NV = 0x8656; + public const int VERTEX_ATTRIB_ARRAY7_NV = 0x8657; + public const int VERTEX_ATTRIB_ARRAY8_NV = 0x8658; + public const int VERTEX_ATTRIB_ARRAY9_NV = 0x8659; + public const int VERTEX_ATTRIB_ARRAY_ADDRESS_NV = 0x8F20; + public const int VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001; + public const int VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT = 0x00000001; + public const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; + public const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = 0x889F; + public const int VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE; + public const int VERTEX_ATTRIB_ARRAY_DIVISOR_ARB = 0x88FE; + public const int VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; + public const int VERTEX_ATTRIB_ARRAY_ENABLED_ARB = 0x8622; + public const int VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD; + public const int VERTEX_ATTRIB_ARRAY_INTEGER_EXT = 0x88FD; + public const int VERTEX_ATTRIB_ARRAY_INTEGER_NV = 0x88FD; + public const int VERTEX_ATTRIB_ARRAY_LENGTH_NV = 0x8F2A; + public const int VERTEX_ATTRIB_ARRAY_LONG = 0x874E; + public const int VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; + public const int VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB = 0x886A; + public const int VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; + public const int VERTEX_ATTRIB_ARRAY_POINTER_ARB = 0x8645; + public const int VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; + public const int VERTEX_ATTRIB_ARRAY_SIZE_ARB = 0x8623; + public const int VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; + public const int VERTEX_ATTRIB_ARRAY_STRIDE_ARB = 0x8624; + public const int VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; + public const int VERTEX_ATTRIB_ARRAY_TYPE_ARB = 0x8625; + public const int VERTEX_ATTRIB_ARRAY_UNIFIED_NV = 0x8F1E; + public const int VERTEX_ATTRIB_BINDING = 0x82D4; + public const int VERTEX_ATTRIB_MAP1_APPLE = 0x8A00; + public const int VERTEX_ATTRIB_MAP1_COEFF_APPLE = 0x8A03; + public const int VERTEX_ATTRIB_MAP1_DOMAIN_APPLE = 0x8A05; + public const int VERTEX_ATTRIB_MAP1_ORDER_APPLE = 0x8A04; + public const int VERTEX_ATTRIB_MAP1_SIZE_APPLE = 0x8A02; + public const int VERTEX_ATTRIB_MAP2_APPLE = 0x8A01; + public const int VERTEX_ATTRIB_MAP2_COEFF_APPLE = 0x8A07; + public const int VERTEX_ATTRIB_MAP2_DOMAIN_APPLE = 0x8A09; + public const int VERTEX_ATTRIB_MAP2_ORDER_APPLE = 0x8A08; + public const int VERTEX_ATTRIB_MAP2_SIZE_APPLE = 0x8A06; + public const int VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D5; + public const int VERTEX_BINDING_BUFFER = 0x8F4F; + public const int VERTEX_BINDING_DIVISOR = 0x82D6; + public const int VERTEX_BINDING_OFFSET = 0x82D7; + public const int VERTEX_BINDING_STRIDE = 0x82D8; + public const int VERTEX_BLEND_ARB = 0x86A7; + public const int VERTEX_CONSISTENT_HINT_PGI = 0x1A22B; + public const int VERTEX_DATA_HINT_PGI = 0x1A22A; + public const int VERTEX_ELEMENT_SWIZZLE_AMD = 0x91A4; + public const int VERTEX_ID_NV = 0x8C7B; + public const int VERTEX_ID_SWIZZLE_AMD = 0x91A5; + public const int VERTEX_PRECLIP_HINT_SGIX = 0x83EF; + public const int VERTEX_PRECLIP_SGIX = 0x83EE; + public const int VERTEX_PROGRAM_ARB = 0x8620; + public const int VERTEX_PROGRAM_BINDING_NV = 0x864A; + public const int VERTEX_PROGRAM_NV = 0x8620; + public const int VERTEX_PROGRAM_PARAMETER_BUFFER_NV = 0x8DA2; + public const int VERTEX_PROGRAM_POINT_SIZE = 0x8642; + public const int VERTEX_PROGRAM_POINT_SIZE_ARB = 0x8642; + public const int VERTEX_PROGRAM_POINT_SIZE_NV = 0x8642; + public const int VERTEX_PROGRAM_TWO_SIDE_ARB = 0x8643; + public const int VERTEX_PROGRAM_TWO_SIDE_NV = 0x8643; + public const int VERTEX_SHADER = 0x8B31; + public const int VERTEX_SHADER_ARB = 0x8B31; + public const int VERTEX_SHADER_BINDING_EXT = 0x8781; + public const int VERTEX_SHADER_BIT = 0x00000001; + public const int VERTEX_SHADER_EXT = 0x8780; + public const int VERTEX_SHADER_INSTRUCTIONS_EXT = 0x87CF; + public const int VERTEX_SHADER_INVARIANTS_EXT = 0x87D1; + public const int VERTEX_SHADER_INVOCATIONS = 0x82F0; + public const int VERTEX_SHADER_INVOCATIONS_ARB = 0x82F0; + public const int VERTEX_SHADER_LOCALS_EXT = 0x87D3; + public const int VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 0x87D2; + public const int VERTEX_SHADER_OPTIMIZED_EXT = 0x87D4; + public const int VERTEX_SHADER_VARIANTS_EXT = 0x87D0; + public const int VERTEX_SOURCE_ATI = 0x8774; + public const int VERTEX_STATE_PROGRAM_NV = 0x8621; + public const int VERTEX_STREAM0_ATI = 0x876C; + public const int VERTEX_STREAM1_ATI = 0x876D; + public const int VERTEX_STREAM2_ATI = 0x876E; + public const int VERTEX_STREAM3_ATI = 0x876F; + public const int VERTEX_STREAM4_ATI = 0x8770; + public const int VERTEX_STREAM5_ATI = 0x8771; + public const int VERTEX_STREAM6_ATI = 0x8772; + public const int VERTEX_STREAM7_ATI = 0x8773; + public const int VERTEX_SUBROUTINE = 0x92E8; + public const int VERTEX_SUBROUTINE_UNIFORM = 0x92EE; + public const int VERTEX_TEXTURE = 0x829B; + public const int VERTEX_WEIGHTING_EXT = 0x8509; + public const int VERTEX_WEIGHT_ARRAY_EXT = 0x850C; + public const int VERTEX_WEIGHT_ARRAY_POINTER_EXT = 0x8510; + public const int VERTEX_WEIGHT_ARRAY_SIZE_EXT = 0x850D; + public const int VERTEX_WEIGHT_ARRAY_STRIDE_EXT = 0x850F; + public const int VERTEX_WEIGHT_ARRAY_TYPE_EXT = 0x850E; + public const int VERTICAL_LINE_TO_NV = 0x08; + public const int VERTICES_SUBMITTED = 0x82EE; + public const int VERTICES_SUBMITTED_ARB = 0x82EE; + public const int VIBRANCE_BIAS_NV = 0x8719; + public const int VIBRANCE_SCALE_NV = 0x8713; + public const int VIDEO_BUFFER_BINDING_NV = 0x9021; + public const int VIDEO_BUFFER_INTERNAL_FORMAT_NV = 0x902D; + public const int VIDEO_BUFFER_NV = 0x9020; + public const int VIDEO_BUFFER_PITCH_NV = 0x9028; + public const int VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV = 0x903B; + public const int VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV = 0x903A; + public const int VIDEO_CAPTURE_FRAME_HEIGHT_NV = 0x9039; + public const int VIDEO_CAPTURE_FRAME_WIDTH_NV = 0x9038; + public const int VIDEO_CAPTURE_SURFACE_ORIGIN_NV = 0x903C; + public const int VIDEO_CAPTURE_TO_422_SUPPORTED_NV = 0x9026; + public const int VIDEO_COLOR_CONVERSION_MATRIX_NV = 0x9029; + public const int VIDEO_COLOR_CONVERSION_MAX_NV = 0x902A; + public const int VIDEO_COLOR_CONVERSION_MIN_NV = 0x902B; + public const int VIDEO_COLOR_CONVERSION_OFFSET_NV = 0x902C; + public const int VIEWPORT = 0x0BA2; + public const int VIEWPORT_BOUNDS_RANGE = 0x825D; + public const int VIEWPORT_COMMAND_NV = 0x0010; + public const int VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F; + public const int VIEWPORT_POSITION_W_SCALE_NV = 0x937C; + public const int VIEWPORT_POSITION_W_SCALE_X_COEFF_NV = 0x937D; + public const int VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV = 0x937E; + public const int VIEWPORT_SUBPIXEL_BITS = 0x825C; + public const int VIEWPORT_SWIZZLE_NEGATIVE_W_NV = 0x9357; + public const int VIEWPORT_SWIZZLE_NEGATIVE_X_NV = 0x9351; + public const int VIEWPORT_SWIZZLE_NEGATIVE_Y_NV = 0x9353; + public const int VIEWPORT_SWIZZLE_NEGATIVE_Z_NV = 0x9355; + public const int VIEWPORT_SWIZZLE_POSITIVE_W_NV = 0x9356; + public const int VIEWPORT_SWIZZLE_POSITIVE_X_NV = 0x9350; + public const int VIEWPORT_SWIZZLE_POSITIVE_Y_NV = 0x9352; + public const int VIEWPORT_SWIZZLE_POSITIVE_Z_NV = 0x9354; + public const int VIEWPORT_SWIZZLE_W_NV = 0x935B; + public const int VIEWPORT_SWIZZLE_X_NV = 0x9358; + public const int VIEWPORT_SWIZZLE_Y_NV = 0x9359; + public const int VIEWPORT_SWIZZLE_Z_NV = 0x935A; + public const int VIEW_CLASS_128_BITS = 0x82C4; + public const int VIEW_CLASS_16_BITS = 0x82CA; + public const int VIEW_CLASS_24_BITS = 0x82C9; + public const int VIEW_CLASS_32_BITS = 0x82C8; + public const int VIEW_CLASS_48_BITS = 0x82C7; + public const int VIEW_CLASS_64_BITS = 0x82C6; + public const int VIEW_CLASS_8_BITS = 0x82CB; + public const int VIEW_CLASS_96_BITS = 0x82C5; + public const int VIEW_CLASS_ASTC_10x10_RGBA = 0x9393; + public const int VIEW_CLASS_ASTC_10x5_RGBA = 0x9390; + public const int VIEW_CLASS_ASTC_10x6_RGBA = 0x9391; + public const int VIEW_CLASS_ASTC_10x8_RGBA = 0x9392; + public const int VIEW_CLASS_ASTC_12x10_RGBA = 0x9394; + public const int VIEW_CLASS_ASTC_12x12_RGBA = 0x9395; + public const int VIEW_CLASS_ASTC_4x4_RGBA = 0x9388; + public const int VIEW_CLASS_ASTC_5x4_RGBA = 0x9389; + public const int VIEW_CLASS_ASTC_5x5_RGBA = 0x938A; + public const int VIEW_CLASS_ASTC_6x5_RGBA = 0x938B; + public const int VIEW_CLASS_ASTC_6x6_RGBA = 0x938C; + public const int VIEW_CLASS_ASTC_8x5_RGBA = 0x938D; + public const int VIEW_CLASS_ASTC_8x6_RGBA = 0x938E; + public const int VIEW_CLASS_ASTC_8x8_RGBA = 0x938F; + public const int VIEW_CLASS_BPTC_FLOAT = 0x82D3; + public const int VIEW_CLASS_BPTC_UNORM = 0x82D2; + public const int VIEW_CLASS_EAC_R11 = 0x9383; + public const int VIEW_CLASS_EAC_RG11 = 0x9384; + public const int VIEW_CLASS_ETC2_EAC_RGBA = 0x9387; + public const int VIEW_CLASS_ETC2_RGB = 0x9385; + public const int VIEW_CLASS_ETC2_RGBA = 0x9386; + public const int VIEW_CLASS_RGTC1_RED = 0x82D0; + public const int VIEW_CLASS_RGTC2_RG = 0x82D1; + public const int VIEW_CLASS_S3TC_DXT1_RGB = 0x82CC; + public const int VIEW_CLASS_S3TC_DXT1_RGBA = 0x82CD; + public const int VIEW_CLASS_S3TC_DXT3_RGBA = 0x82CE; + public const int VIEW_CLASS_S3TC_DXT5_RGBA = 0x82CF; + public const int VIEW_COMPATIBILITY_CLASS = 0x82B6; + public const int VIRTUAL_PAGE_SIZE_INDEX_ARB = 0x91A7; + public const int VIRTUAL_PAGE_SIZE_X_AMD = 0x9195; + public const int VIRTUAL_PAGE_SIZE_X_ARB = 0x9195; + public const int VIRTUAL_PAGE_SIZE_Y_AMD = 0x9196; + public const int VIRTUAL_PAGE_SIZE_Y_ARB = 0x9196; + public const int VIRTUAL_PAGE_SIZE_Z_AMD = 0x9197; + public const int VIRTUAL_PAGE_SIZE_Z_ARB = 0x9197; + public const int VIVIDLIGHT_NV = 0x92A6; + public const int VOLATILE_APPLE = 0x8A1A; + public const int WAIT_FAILED = 0x911D; + public const int WARPS_PER_SM_NV = 0x933A; + public const int WARP_SIZE_NV = 0x9339; + public const int WEIGHTED_AVERAGE_ARB = 0x9367; + public const int WEIGHTED_AVERAGE_EXT = 0x9367; + public const int WEIGHT_ARRAY_ARB = 0x86AD; + public const int WEIGHT_ARRAY_BUFFER_BINDING_ARB = 0x889E; + public const int WEIGHT_ARRAY_POINTER_ARB = 0x86AC; + public const int WEIGHT_ARRAY_SIZE_ARB = 0x86AB; + public const int WEIGHT_ARRAY_STRIDE_ARB = 0x86AA; + public const int WEIGHT_ARRAY_TYPE_ARB = 0x86A9; + public const int WEIGHT_SUM_UNITY_ARB = 0x86A6; + public const int WIDE_LINE_HINT_PGI = 0x1A222; + public const int WINDOW_RECTANGLE_EXT = 0x8F12; + public const int WINDOW_RECTANGLE_MODE_EXT = 0x8F13; + public const int WRAP_BORDER_SUN = 0x81D4; + public const int WRITE_DISCARD_NV = 0x88BE; + public const int WRITE_ONLY = 0x88B9; + public const int WRITE_ONLY_ARB = 0x88B9; + public const int WRITE_PIXEL_DATA_RANGE_LENGTH_NV = 0x887A; + public const int WRITE_PIXEL_DATA_RANGE_NV = 0x8878; + public const int WRITE_PIXEL_DATA_RANGE_POINTER_NV = 0x887C; + public const int W_EXT = 0x87D8; + public const int XOR = 0x1506; + public const int XOR_NV = 0x1506; + public const int X_EXT = 0x87D5; + public const int YCBAYCR8A_4224_NV = 0x9032; + public const int YCBCR_422_APPLE = 0x85B9; + public const int YCBCR_MESA = 0x8757; + public const int YCBYCR8_422_NV = 0x9031; + public const int YCRCBA_SGIX = 0x8319; + public const int YCRCB_422_SGIX = 0x81BB; + public const int YCRCB_444_SGIX = 0x81BC; + public const int YCRCB_SGIX = 0x8318; + public const int Y_EXT = 0x87D6; + public const int Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV = 0x9036; + public const int Z4Y12Z4CB12Z4CR12_444_NV = 0x9037; + public const int Z4Y12Z4CB12Z4Y12Z4CR12_422_NV = 0x9035; + public const int Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV = 0x9034; + public const int Z6Y10Z6CB10Z6Y10Z6CR10_422_NV = 0x9033; + public const int ZERO = 0; + public const int ZERO_EXT = 0x87DD; + public const int ZERO_TO_ONE = 0x935F; + public const int Z_EXT = 0x87D7; + + #endregion + } + + public static class glAttachment + { + + public const uint Depth = glConst.DEPTH_ATTACHMENT; + public const uint DepthAndStencil = glConst.DEPTH_STENCIL_ATTACHMENT; + public const uint Stencil = glConst.STENCIL_ATTACHMENT; + + public static uint Color(int i) + { + #if DEBUG + if ((i > OpenGLFunction.CurrentGL.AttachmentColorRange) || (i < 0)) + { + throw new ArgumentOutOfRangeException(); + } + #endif + return (uint)(glConst.COLOR_ATTACHMENT0 + i); + } + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/glContext.cs b/StgSharp.Common/Graphics/OpenGL/glContext.cs new file mode 100644 index 00000000..53cb8614 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glContext.cs @@ -0,0 +1,2603 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glContext" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; +using StgSharp.Internal; +using StgSharp.Internal.Intrinsic; + +using System; +using System.Collections.Generic; + +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + [StructLayout(LayoutKind.Sequential)] + public struct OpenglContext + { + + public override bool Equals(object obj) + { + return false; + } + + public override unsafe int GetHashCode() + { + fixed (OpenglContext* sptr = &this) { + return sptr->GetHashCode(); + } + } + + public static bool operator !=(OpenglContext left, OpenglContext right) + { + return !(left == right); + } + + public static bool operator ==(OpenglContext left, OpenglContext right) + { + return left.Equals(right); + } + + #region glapi + + internal unsafe delegate* glAccumxOES; + internal unsafe delegate* glAcquireKeyedMutexWin32EXT; + internal unsafe delegate* glActiveProgramEXT; + internal unsafe delegate* glActiveShaderProgram; + internal unsafe delegate* glActiveStencilFaceEXT; + internal unsafe delegate* glActiveTexture; + internal unsafe delegate* glActiveTextureARB; + internal unsafe delegate* glActiveVaryingNV; + internal unsafe delegate* glAlphaFragmentOp1ATI; + internal unsafe delegate* glAlphaFragmentOp2ATI; + internal unsafe delegate* glAlphaFragmentOp3ATI; + internal unsafe delegate* glAlphaFuncxOES; + internal unsafe delegate* glAlphaToCoverageDitherControlNV; + internal unsafe delegate* glApplyFramebufferAttachmentCMAAINTEL; + internal unsafe delegate* glApplyTextureEXT; + internal unsafe delegate* glAreProgramsResidentNV; + internal unsafe delegate* glAreTexturesResidentEXT; + internal unsafe delegate* glArrayElementEXT; + internal unsafe delegate* glArrayObjectATI; + internal unsafe delegate* glAsyncCopyBufferSubDataNVX; + internal unsafe delegate* glAsyncCopyImageSubDataNVX; + internal unsafe delegate* glAsyncMarkerSGIX; + internal unsafe delegate* glAttachObjectARB; + internal unsafe delegate* glAttachShader; + internal unsafe delegate* glBeginConditionalRender; + internal unsafe delegate* glBeginConditionalRenderNV; + internal unsafe delegate* glBeginConditionalRenderNVX; + internal unsafe delegate* glBeginFragmentShaderATI; + internal unsafe delegate* glBeginOcclusionQueryNV; + internal unsafe delegate* glBeginPerfMonitorAMD; + internal unsafe delegate* glBeginPerfQueryINTEL; + internal unsafe delegate* glBeginQuery; + internal unsafe delegate* glBeginQueryARB; + internal unsafe delegate* glBeginQueryIndexed; + internal unsafe delegate* glBeginTransformFeedback; + internal unsafe delegate* glBeginTransformFeedbackEXT; + internal unsafe delegate* glBeginTransformFeedbackNV; + internal unsafe delegate* glBeginVertexShaderEXT; + internal unsafe delegate* glBeginVideoCaptureNV; + internal unsafe delegate* glBindAttribLocation; + internal unsafe delegate* glBindAttribLocationARB; + internal unsafe delegate* glBindBuffer; + internal unsafe delegate* glBindBufferARB; + internal unsafe delegate* glBindBufferBase; + internal unsafe delegate* glBindBufferBaseEXT; + internal unsafe delegate* glBindBufferBaseNV; + internal unsafe delegate* glBindBufferOffsetEXT; + internal unsafe delegate* glBindBufferOffsetNV; + internal unsafe delegate* glBindBufferRange; + internal unsafe delegate* glBindBufferRangeEXT; + internal unsafe delegate* glBindBufferRangeNV; + internal unsafe delegate* glBindBuffersBase; + internal unsafe delegate* glBindBuffersRange; + internal unsafe delegate* glBindFragDataLocation; + internal unsafe delegate* glBindFragDataLocationEXT; + internal unsafe delegate* glBindFragDataLocationIndexed; + internal unsafe delegate* glBindFragmentShaderATI; + internal unsafe delegate* glBindFramebuffer; + internal unsafe delegate* glBindFramebufferEXT; + internal unsafe delegate* glBindImageTexture; + internal unsafe delegate* glBindImageTextureEXT; + internal unsafe delegate* glBindImageTextures; + internal unsafe delegate* glBindLightParameterEXT; + internal unsafe delegate* glBindMaterialParameterEXT; + internal unsafe delegate* glBindMultiTextureEXT; + internal unsafe delegate* glBindParameterEXT; + internal unsafe delegate* glBindProgramARB; + internal unsafe delegate* glBindProgramNV; + internal unsafe delegate* glBindProgramPipeline; + internal unsafe delegate* glBindRenderbuffer; + internal unsafe delegate* glBindRenderbufferEXT; + internal unsafe delegate* glBindSampler; + internal unsafe delegate* glBindSamplers; + internal unsafe delegate* glBindShadingRateImageNV; + internal unsafe delegate* glBindTexGenParameterEXT; + internal unsafe delegate* glBindTexture; + internal unsafe delegate* glBindTextureEXT; + internal unsafe delegate* glBindTextureUnit; + internal unsafe delegate* glBindTextureUnitParameterEXT; + internal unsafe delegate* glBindTextures; + internal unsafe delegate* glBindTransformFeedback; + internal unsafe delegate* glBindTransformFeedbackNV; + internal unsafe delegate* glBindVertexArray; + internal unsafe delegate* glBindVertexArrayAPPLE; + internal unsafe delegate* glBindVertexBuffer; + internal unsafe delegate* glBindVertexBuffers; + internal unsafe delegate* glBindVertexShaderEXT; + internal unsafe delegate* glBindVideoCaptureStreamBufferNV; + internal unsafe delegate* glBindVideoCaptureStreamTextureNV; + internal unsafe delegate* glBinormal3bEXT; + internal unsafe delegate* glBinormal3bvEXT; + internal unsafe delegate* glBinormal3dEXT; + internal unsafe delegate* glBinormal3dvEXT; + internal unsafe delegate* glBinormal3fEXT; + internal unsafe delegate* glBinormal3fvEXT; + internal unsafe delegate* glBinormal3iEXT; + internal unsafe delegate* glBinormal3ivEXT; + internal unsafe delegate* glBinormal3sEXT; + internal unsafe delegate* glBinormal3svEXT; + internal unsafe delegate* glBinormalPointerEXT; + internal unsafe delegate* glBitmapxOES; + internal unsafe delegate* glBlendBarrierKHR; + internal unsafe delegate* glBlendBarrierNV; + internal unsafe delegate* glBlendColor; + internal unsafe delegate* glBlendColorEXT; + internal unsafe delegate* glBlendColorxOES; + internal unsafe delegate* glBlendEquation; + internal unsafe delegate* glBlendEquationEXT; + internal unsafe delegate* glBlendEquationIndexedAMD; + internal unsafe delegate* glBlendEquationSeparate; + internal unsafe delegate* glBlendEquationSeparateEXT; + internal unsafe delegate* glBlendEquationSeparateIndexedAMD; + internal unsafe delegate* glBlendEquationSeparatei; + internal unsafe delegate* glBlendEquationSeparateiARB; + internal unsafe delegate* glBlendEquationi; + internal unsafe delegate* glBlendEquationiARB; + internal unsafe delegate* glBlendFunc; + internal unsafe delegate* glBlendFuncIndexedAMD; + internal unsafe delegate* glBlendFuncSeparate; + internal unsafe delegate* glBlendFuncSeparateEXT; + internal unsafe delegate* glBlendFuncSeparateINGR; + internal unsafe delegate* glBlendFuncSeparateIndexedAMD; + internal unsafe delegate* glBlendFuncSeparatei; + internal unsafe delegate* glBlendFuncSeparateiARB; + internal unsafe delegate* glBlendFunci; + internal unsafe delegate* glBlendFunciARB; + internal unsafe delegate* glBlendParameteriNV; + internal unsafe delegate* glBlitFramebuffer; + internal unsafe delegate* glBlitFramebufferEXT; + internal unsafe delegate* glBlitFramebufferLayerEXT; + internal unsafe delegate* glBlitFramebufferLayersEXT; + internal unsafe delegate* glBlitNamedFramebuffer; + internal unsafe delegate* glBufferAddressRangeNV; + internal unsafe delegate* glBufferAttachMemoryNV; + internal unsafe delegate* glBufferData; + internal unsafe delegate* glBufferDataARB; + internal unsafe delegate* glBufferPageCommitmentARB; + internal unsafe delegate* glBufferPageCommitmentMemNV; + internal unsafe delegate* glBufferParameteriAPPLE; + internal unsafe delegate* glBufferStorage; + [Obsolete("Param type uncertain", true)] internal unsafe delegate* glBufferStorageExternalEXT; + internal unsafe delegate* glBufferStorageMemEXT; + internal unsafe delegate* glBufferSubData; + internal unsafe delegate* glBufferSubDataARB; + internal unsafe delegate* glCallCommandListNV; + internal unsafe delegate* glCheckFramebufferStatus; + internal unsafe delegate* glCheckFramebufferStatusEXT; + internal unsafe delegate* glCheckNamedFramebufferStatus; + internal unsafe delegate* glCheckNamedFramebufferStatusEXT; + internal unsafe delegate* glClampColor; + internal unsafe delegate* glClampColorARB; + internal unsafe delegate* glClear; + internal unsafe delegate* glClearAccumxOES; + internal unsafe delegate* glClearBufferData; + internal unsafe delegate* glClearBufferSubData; + internal unsafe delegate* glClearBufferfi; + internal unsafe delegate* glClearBufferfv; + internal unsafe delegate* glClearBufferiv; + internal unsafe delegate* glClearBufferuiv; + internal unsafe delegate* glClearColor; + internal unsafe delegate* glClearColorIiEXT; + internal unsafe delegate* glClearColorIuiEXT; + internal unsafe delegate* glClearColorxOES; + internal unsafe delegate* glClearDepth; + internal unsafe delegate* glClearDepthdNV; + internal unsafe delegate* glClearDepthf; + internal unsafe delegate* glClearDepthfOES; + internal unsafe delegate* glClearDepthxOES; + internal unsafe delegate* glClearNamedBufferData; + internal unsafe delegate* glClearNamedBufferDataEXT; + internal unsafe delegate* glClearNamedBufferSubData; + internal unsafe delegate* glClearNamedBufferSubDataEXT; + internal unsafe delegate* glClearNamedFramebufferfi; + internal unsafe delegate* glClearNamedFramebufferfv; + internal unsafe delegate* glClearNamedFramebufferiv; + internal unsafe delegate* glClearNamedFramebufferuiv; + internal unsafe delegate* glClearStencil; + internal unsafe delegate* glClearTexImage; + internal unsafe delegate* glClearTexSubImage; + internal unsafe delegate* glClientActiveTextureARB; + internal unsafe delegate* glClientActiveVertexStreamATI; + internal unsafe delegate* glClientAttribDefaultEXT; + internal unsafe delegate* glClientWaitSemaphoreui64NVX; + internal unsafe delegate* glClientWaitSync; + internal unsafe delegate* glClipControl; + internal unsafe delegate* glClipPlanefOES; + internal unsafe delegate* glClipPlanexOES; + internal unsafe delegate* glColor3fVertex3fSUN; + internal unsafe delegate* glColor3fVertex3fvSUN; + internal unsafe delegate* glColor3hNV; + internal unsafe delegate* glColor3hvNV; + internal unsafe delegate* glColor3xOES; + internal unsafe delegate* glColor3xvOES; + internal unsafe delegate* glColor4fNormal3fVertex3fSUN; + internal unsafe delegate* glColor4fNormal3fVertex3fvSUN; + internal unsafe delegate* glColor4hNV; + internal unsafe delegate* glColor4hvNV; + internal unsafe delegate* glColor4ubVertex2fSUN; + internal unsafe delegate* glColor4ubVertex2fvSUN; + internal unsafe delegate* glColor4ubVertex3fSUN; + internal unsafe delegate* glColor4ubVertex3fvSUN; + internal unsafe delegate* glColor4xOES; + internal unsafe delegate* glColor4xvOES; + internal unsafe delegate* glColorFormatNV; + internal unsafe delegate* glColorFragmentOp1ATI; + internal unsafe delegate* glColorFragmentOp2ATI; + internal unsafe delegate* glColorFragmentOp3ATI; + internal unsafe delegate* glColorMask; + internal unsafe delegate* glColorMaskIndexedEXT; + internal unsafe delegate* glColorMaski; + internal unsafe delegate* glColorPointerEXT; + internal unsafe delegate* glColorPointerListIBM; + internal unsafe delegate* glColorPointervINTEL; + internal unsafe delegate* glColorSubTableEXT; + internal unsafe delegate* glColorTableEXT; + internal unsafe delegate* glColorTableParameterfvSGI; + internal unsafe delegate* glColorTableParameterivSGI; + internal unsafe delegate* glColorTableSGI; + internal unsafe delegate* glCombinerInputNV; + internal unsafe delegate* glCombinerOutputNV; + internal unsafe delegate* glCombinerParameterfNV; + internal unsafe delegate* glCombinerParameterfvNV; + internal unsafe delegate* glCombinerParameteriNV; + internal unsafe delegate* glCombinerParameterivNV; + internal unsafe delegate* glCombinerStageParameterfvNV; + internal unsafe delegate* glCommandListSegmentsNV; + internal unsafe delegate* glCompileCommandListNV; + internal unsafe delegate* glCompileShader; + internal unsafe delegate* glCompileShaderARB; + internal unsafe delegate* glCompileShaderIncludeARB; + internal unsafe delegate* glCompressedMultiTexImage1DEXT; + internal unsafe delegate* glCompressedMultiTexImage2DEXT; + internal unsafe delegate* glCompressedMultiTexImage3DEXT; + internal unsafe delegate* glCompressedMultiTexSubImage1DEXT; + internal unsafe delegate* glCompressedMultiTexSubImage2DEXT; + internal unsafe delegate* glCompressedMultiTexSubImage3DEXT; + internal unsafe delegate* glCompressedTexImage1D; + internal unsafe delegate* glCompressedTexImage1DARB; + internal unsafe delegate* glCompressedTexImage2D; + internal unsafe delegate* glCompressedTexImage2DARB; + internal unsafe delegate* glCompressedTexImage3D; + internal unsafe delegate* glCompressedTexImage3DARB; + internal unsafe delegate* glCompressedTexSubImage1D; + internal unsafe delegate* glCompressedTexSubImage1DARB; + internal unsafe delegate* glCompressedTexSubImage2D; + internal unsafe delegate* glCompressedTexSubImage2DARB; + internal unsafe delegate* glCompressedTexSubImage3D; + internal unsafe delegate* glCompressedTexSubImage3DARB; + internal unsafe delegate* glCompressedTextureImage1DEXT; + internal unsafe delegate* glCompressedTextureImage2DEXT; + internal unsafe delegate* glCompressedTextureImage3DEXT; + internal unsafe delegate* glCompressedTextureSubImage1D; + internal unsafe delegate* glCompressedTextureSubImage1DEXT; + internal unsafe delegate* glCompressedTextureSubImage2D; + internal unsafe delegate* glCompressedTextureSubImage2DEXT; + internal unsafe delegate* glCompressedTextureSubImage3D; + internal unsafe delegate* glCompressedTextureSubImage3DEXT; + internal unsafe delegate* glConservativeRasterParameterfNV; + internal unsafe delegate* glConservativeRasterParameteriNV; + internal unsafe delegate* glConvolutionFilter1DEXT; + internal unsafe delegate* glConvolutionFilter2DEXT; + internal unsafe delegate* glConvolutionParameterfEXT; + internal unsafe delegate* glConvolutionParameterfvEXT; + internal unsafe delegate* glConvolutionParameteriEXT; + internal unsafe delegate* glConvolutionParameterivEXT; + internal unsafe delegate* glConvolutionParameterxOES; + internal unsafe delegate* glConvolutionParameterxvOES; + internal unsafe delegate* glCopyBufferSubData; + internal unsafe delegate* glCopyColorSubTableEXT; + internal unsafe delegate* glCopyColorTableSGI; + internal unsafe delegate* glCopyConvolutionFilter1DEXT; + internal unsafe delegate* glCopyConvolutionFilter2DEXT; + internal unsafe delegate* glCopyImageSubData; + internal unsafe delegate* glCopyImageSubDataNV; + internal unsafe delegate* glCopyMultiTexImage1DEXT; + internal unsafe delegate* glCopyMultiTexImage2DEXT; + internal unsafe delegate* glCopyMultiTexSubImage1DEXT; + internal unsafe delegate* glCopyMultiTexSubImage2DEXT; + internal unsafe delegate* glCopyMultiTexSubImage3DEXT; + internal unsafe delegate* glCopyNamedBufferSubData; + internal unsafe delegate* glCopyPathNV; + internal unsafe delegate* glCopyTexImage1D; + internal unsafe delegate* glCopyTexImage1DEXT; + internal unsafe delegate* glCopyTexImage2D; + internal unsafe delegate* glCopyTexImage2DEXT; + internal unsafe delegate* glCopyTexSubImage1D; + internal unsafe delegate* glCopyTexSubImage1DEXT; + internal unsafe delegate* glCopyTexSubImage2D; + internal unsafe delegate* glCopyTexSubImage2DEXT; + internal unsafe delegate* glCopyTexSubImage3D; + internal unsafe delegate* glCopyTexSubImage3DEXT; + internal unsafe delegate* glCopyTextureImage1DEXT; + internal unsafe delegate* glCopyTextureImage2DEXT; + internal unsafe delegate* glCopyTextureSubImage1D; + internal unsafe delegate* glCopyTextureSubImage1DEXT; + internal unsafe delegate* glCopyTextureSubImage2D; + internal unsafe delegate* glCopyTextureSubImage2DEXT; + internal unsafe delegate* glCopyTextureSubImage3D; + internal unsafe delegate* glCopyTextureSubImage3DEXT; + internal unsafe delegate* glCoverFillPathInstancedNV; + internal unsafe delegate* glCoverFillPathNV; + internal unsafe delegate* glCoverStrokePathInstancedNV; + internal unsafe delegate* glCoverStrokePathNV; + internal unsafe delegate* glCoverageModulationNV; + internal unsafe delegate* glCoverageModulationTableNV; + internal unsafe delegate* glCreateBuffers; + internal unsafe delegate* glCreateCommandListsNV; + internal unsafe delegate* glCreateFramebuffers; + internal unsafe delegate* glCreateMemoryObjectsEXT; + internal unsafe delegate* glCreatePerfQueryINTEL; + internal unsafe delegate* glCreateProgram; + internal unsafe delegate* glCreateProgramObjectARB; + internal unsafe delegate* glCreateProgramPipelines; + internal unsafe delegate* glCreateProgressFenceNVX; + internal unsafe delegate* glCreateQueries; + internal unsafe delegate* glCreateRenderbuffers; + internal unsafe delegate* glCreateSamplers; + internal unsafe delegate* glCreateSemaphoresNV; + internal unsafe delegate* glCreateShader; + internal unsafe delegate* glCreateShaderObjectARB; + internal unsafe delegate* glCreateShaderProgramEXT; + internal unsafe delegate* glCreateShaderProgramv; + internal unsafe delegate* glCreateStatesNV; + internal unsafe delegate* glCreateSyncFromCLeventARB; + internal unsafe delegate* glCreateTextures; + internal unsafe delegate* glCreateTransformFeedbacks; + internal unsafe delegate* glCreateVertexArrays; + internal unsafe delegate* glCullFace; + internal unsafe delegate* glCullParameterdvEXT; + internal unsafe delegate* glCullParameterfvEXT; + internal unsafe delegate* glCurrentPaletteMatrixARB; + internal unsafe delegate* glDebugMessageCallback; + internal unsafe delegate* glDebugMessageCallbackAMD; + internal unsafe delegate* glDebugMessageCallbackARB; + internal unsafe delegate* glDebugMessageControl; + internal unsafe delegate* glDebugMessageControlARB; + internal unsafe delegate* glDebugMessageEnableAMD; + internal unsafe delegate* glDebugMessageInsert; + internal unsafe delegate* glDebugMessageInsertAMD; + internal unsafe delegate* glDebugMessageInsertARB; + internal unsafe delegate* glDeformSGIX; + internal unsafe delegate* glDeformationMap3dSGIX; + internal unsafe delegate* glDeformationMap3fSGIX; + internal unsafe delegate* glDeleteAsyncMarkersSGIX; + internal unsafe delegate* glDeleteBuffers; + internal unsafe delegate* glDeleteBuffersARB; + internal unsafe delegate* glDeleteCommandListsNV; + internal unsafe delegate* glDeleteFencesAPPLE; + internal unsafe delegate* glDeleteFencesNV; + internal unsafe delegate* glDeleteFragmentShaderATI; + internal unsafe delegate* glDeleteFramebuffers; + internal unsafe delegate* glDeleteFramebuffersEXT; + internal unsafe delegate* glDeleteMemoryObjectsEXT; + internal unsafe delegate* glDeleteNamedStringARB; + internal unsafe delegate* glDeleteNamesAMD; + internal unsafe delegate* glDeleteObjectARB; + internal unsafe delegate* glDeleteOcclusionQueriesNV; + internal unsafe delegate* glDeletePathsNV; + internal unsafe delegate* glDeletePerfMonitorsAMD; + internal unsafe delegate* glDeletePerfQueryINTEL; + internal unsafe delegate* glDeleteProgram; + internal unsafe delegate* glDeleteProgramPipelines; + internal unsafe delegate* glDeleteProgramsARB; + internal unsafe delegate* glDeleteProgramsNV; + internal unsafe delegate* glDeleteQueries; + internal unsafe delegate* glDeleteQueriesARB; + internal unsafe delegate* glDeleteQueryResourceTagNV; + internal unsafe delegate* glDeleteRenderbuffers; + internal unsafe delegate* glDeleteRenderbuffersEXT; + internal unsafe delegate* glDeleteSamplers; + internal unsafe delegate* glDeleteSemaphoresEXT; + internal unsafe delegate* glDeleteShader; + internal unsafe delegate* glDeleteStatesNV; + internal unsafe delegate* glDeleteSync; + internal unsafe delegate* glDeleteTextures; + internal unsafe delegate* glDeleteTexturesEXT; + internal unsafe delegate* glDeleteTransformFeedbacks; + internal unsafe delegate* glDeleteTransformFeedbacksNV; + internal unsafe delegate* glDeleteVertexArrays; + internal unsafe delegate* glDeleteVertexArraysAPPLE; + internal unsafe delegate* glDeleteVertexShaderEXT; + internal unsafe delegate* glDepthBoundsEXT; + internal unsafe delegate* glDepthBoundsdNV; + internal unsafe delegate* glDepthFunc; + internal unsafe delegate* glDepthMask; + internal unsafe delegate* glDepthRange; + internal unsafe delegate* glDepthRangeArraydvNV; + internal unsafe delegate* glDepthRangeArrayv; + internal unsafe delegate* glDepthRangeIndexed; + internal unsafe delegate* glDepthRangeIndexeddNV; + internal unsafe delegate* glDepthRangedNV; + internal unsafe delegate* glDepthRangef; + internal unsafe delegate* glDepthRangefOES; + internal unsafe delegate* glDepthRangexOES; + internal unsafe delegate* glDetachObjectARB; + internal unsafe delegate* glDetachShader; + internal unsafe delegate* glDetailTexFuncSGIS; + internal unsafe delegate* glDisable; + internal unsafe delegate* glDisableClientStateIndexedEXT; + internal unsafe delegate* glDisableClientStateiEXT; + internal unsafe delegate* glDisableIndexedEXT; + internal unsafe delegate* glDisableVariantClientStateEXT; + internal unsafe delegate* glDisableVertexArrayAttrib; + internal unsafe delegate* glDisableVertexArrayAttribEXT; + internal unsafe delegate* glDisableVertexArrayEXT; + internal unsafe delegate* glDisableVertexAttribAPPLE; + internal unsafe delegate* glDisableVertexAttribArray; + internal unsafe delegate* glDisableVertexAttribArrayARB; + internal unsafe delegate* glDisablei; + internal unsafe delegate* glDispatchCompute; + internal unsafe delegate* glDispatchComputeGroupSizeARB; + internal unsafe delegate* glDispatchComputeIndirect; + internal unsafe delegate* glDrawArrays; + internal unsafe delegate* glDrawArraysEXT; + internal unsafe delegate* glDrawArraysIndirect; + internal unsafe delegate* glDrawArraysInstanced; + internal unsafe delegate* glDrawArraysInstancedARB; + internal unsafe delegate* glDrawArraysInstancedBaseInstance; + internal unsafe delegate* glDrawArraysInstancedEXT; + internal unsafe delegate* glDrawBuffer; + internal unsafe delegate* glDrawBuffers; + internal unsafe delegate* glDrawBuffersARB; + internal unsafe delegate* glDrawBuffersATI; + internal unsafe delegate* glDrawCommandsAddressNV; + internal unsafe delegate* glDrawCommandsNV; + internal unsafe delegate* glDrawCommandsStatesAddressNV; + internal unsafe delegate* glDrawCommandsStatesNV; + internal unsafe delegate* glDrawElementArrayAPPLE; + internal unsafe delegate* glDrawElementArrayATI; + internal unsafe delegate* glDrawElements; + internal unsafe delegate* glDrawElementsBaseVertex; + internal unsafe delegate* glDrawElementsIndirect; + internal unsafe delegate* glDrawElementsInstanced; + internal unsafe delegate* glDrawElementsInstancedARB; + internal unsafe delegate* glDrawElementsInstancedBaseInstance; + internal unsafe delegate* glDrawElementsInstancedBaseVertex; + internal unsafe delegate* glDrawElementsInstancedBaseVertexBaseInstance; + internal unsafe delegate* glDrawElementsInstancedEXT; + internal unsafe delegate* glDrawMeshArraysSUN; + internal unsafe delegate* glDrawMeshTasksIndirectNV; + internal unsafe delegate* glDrawMeshTasksNV; + internal unsafe delegate* glDrawRangeElementArrayAPPLE; + internal unsafe delegate* glDrawRangeElementArrayATI; + internal unsafe delegate* glDrawRangeElements; + internal unsafe delegate* glDrawRangeElementsBaseVertex; + internal unsafe delegate* glDrawRangeElementsEXT; + internal unsafe delegate* glDrawTextureNV; + internal unsafe delegate* glDrawTransformFeedback; + internal unsafe delegate* glDrawTransformFeedbackInstanced; + internal unsafe delegate* glDrawTransformFeedbackNV; + internal unsafe delegate* glDrawTransformFeedbackStream; + internal unsafe delegate* glDrawTransformFeedbackStreamInstanced; + internal unsafe delegate* glDrawVkImageNV; + internal unsafe delegate* glEGLImageTargetTexStorageEXT; + internal unsafe delegate* glEGLImageTargetTextureStorageEXT; + internal unsafe delegate* glEdgeFlagFormatNV; + internal unsafe delegate* glEdgeFlagPointerEXT; + internal unsafe delegate* glEdgeFlagPointerListIBM; + internal unsafe delegate* glElementPointerAPPLE; + internal unsafe delegate* glElementPointerATI; + internal unsafe delegate* glEnable; + internal unsafe delegate* glEnableClientStateIndexedEXT; + internal unsafe delegate* glEnableClientStateiEXT; + internal unsafe delegate* glEnableIndexedEXT; + internal unsafe delegate* glEnableVariantClientStateEXT; + internal unsafe delegate* glEnableVertexArrayAttrib; + internal unsafe delegate* glEnableVertexArrayAttribEXT; + internal unsafe delegate* glEnableVertexArrayEXT; + internal unsafe delegate* glEnableVertexAttribAPPLE; + internal unsafe delegate* glEnableVertexAttribArray; + internal unsafe delegate* glEnableVertexAttribArrayARB; + internal unsafe delegate* glEnablei; + internal unsafe delegate* glEndConditionalRender; + internal unsafe delegate* glEndConditionalRenderNV; + internal unsafe delegate* glEndConditionalRenderNVX; + internal unsafe delegate* glEndFragmentShaderATI; + internal unsafe delegate* glEndOcclusionQueryNV; + internal unsafe delegate* glEndPerfMonitorAMD; + internal unsafe delegate* glEndPerfQueryINTEL; + internal unsafe delegate* glEndQuery; + internal unsafe delegate* glEndQueryARB; + internal unsafe delegate* glEndQueryIndexed; + internal unsafe delegate* glEndTransformFeedback; + internal unsafe delegate* glEndTransformFeedbackEXT; + internal unsafe delegate* glEndTransformFeedbackNV; + internal unsafe delegate* glEndVertexShaderEXT; + internal unsafe delegate* glEndVideoCaptureNV; + internal unsafe delegate* glEvalCoord1xOES; + internal unsafe delegate* glEvalCoord1xvOES; + internal unsafe delegate* glEvalCoord2xOES; + internal unsafe delegate* glEvalCoord2xvOES; + internal unsafe delegate* glEvalMapsNV; + internal unsafe delegate* glEvaluateDepthValuesARB; + internal unsafe delegate* glExecuteProgramNV; + internal unsafe delegate* glExtractComponentEXT; + internal unsafe delegate* glFeedbackBufferxOES; + internal unsafe delegate* glFenceSync; + internal unsafe delegate* glFinalCombinerInputNV; + internal unsafe delegate* glFinish; + internal unsafe delegate* glFinishAsyncSGIX; + internal unsafe delegate* glFinishFenceAPPLE; + internal unsafe delegate* glFinishFenceNV; + internal unsafe delegate* glFinishObjectAPPLE; + internal unsafe delegate* glFinishTextureSUNX; + internal unsafe delegate* glFlush; + internal unsafe delegate* glFlushMappedBufferRange; + internal unsafe delegate* glFlushMappedBufferRangeAPPLE; + internal unsafe delegate* glFlushMappedNamedBufferRange; + internal unsafe delegate* glFlushMappedNamedBufferRangeEXT; + internal unsafe delegate* glFlushPixelDataRangeNV; + internal unsafe delegate* glFlushRasterSGIX; + internal unsafe delegate* glFlushStaticDataIBM; + internal unsafe delegate* glFlushVertexArrayRangeAPPLE; + internal unsafe delegate* glFlushVertexArrayRangeNV; + internal unsafe delegate* glFogCoordFormatNV; + internal unsafe delegate* glFogCoordPointerEXT; + internal unsafe delegate* glFogCoordPointerListIBM; + internal unsafe delegate* glFogCoorddEXT; + internal unsafe delegate* glFogCoorddvEXT; + internal unsafe delegate* glFogCoordfEXT; + internal unsafe delegate* glFogCoordfvEXT; + internal unsafe delegate* glFogCoordhNV; + internal unsafe delegate* glFogCoordhvNV; + internal unsafe delegate* glFogFuncSGIS; + internal unsafe delegate* glFogxOES; + internal unsafe delegate* glFogxvOES; + internal unsafe delegate* glFragmentColorMaterialSGIX; + internal unsafe delegate* glFragmentCoverageColorNV; + internal unsafe delegate* glFragmentLightModelfSGIX; + internal unsafe delegate* glFragmentLightModelfvSGIX; + internal unsafe delegate* glFragmentLightModeliSGIX; + internal unsafe delegate* glFragmentLightModelivSGIX; + internal unsafe delegate* glFragmentLightfSGIX; + internal unsafe delegate* glFragmentLightfvSGIX; + internal unsafe delegate* glFragmentLightiSGIX; + internal unsafe delegate* glFragmentLightivSGIX; + internal unsafe delegate* glFragmentMaterialfSGIX; + internal unsafe delegate* glFragmentMaterialfvSGIX; + internal unsafe delegate* glFragmentMaterialiSGIX; + internal unsafe delegate* glFragmentMaterialivSGIX; + internal unsafe delegate* glFrameTerminatorGREMEDY; + internal unsafe delegate* glFrameZoomSGIX; + internal unsafe delegate* glFramebufferDrawBufferEXT; + internal unsafe delegate* glFramebufferDrawBuffersEXT; + internal unsafe delegate* glFramebufferFetchBarrierEXT; + internal unsafe delegate* glFramebufferParameteri; + internal unsafe delegate* glFramebufferParameteriMESA; + internal unsafe delegate* glFramebufferReadBufferEXT; + internal unsafe delegate* glFramebufferRenderbuffer; + internal unsafe delegate* glFramebufferRenderbufferEXT; + internal unsafe delegate* glFramebufferSampleLocationsfvARB; + internal unsafe delegate* glFramebufferSampleLocationsfvNV; + internal unsafe delegate* glFramebufferSamplePositionsfvAMD; + internal unsafe delegate* glFramebufferTexture; + internal unsafe delegate* glFramebufferTexture1D; + internal unsafe delegate* glFramebufferTexture1DEXT; + internal unsafe delegate* glFramebufferTexture2D; + internal unsafe delegate* glFramebufferTexture2DEXT; + internal unsafe delegate* glFramebufferTexture3D; + internal unsafe delegate* glFramebufferTexture3DEXT; + internal unsafe delegate* glFramebufferTextureARB; + internal unsafe delegate* glFramebufferTextureEXT; + internal unsafe delegate* glFramebufferTextureFaceARB; + internal unsafe delegate* glFramebufferTextureFaceEXT; + internal unsafe delegate* glFramebufferTextureLayer; + internal unsafe delegate* glFramebufferTextureLayerARB; + internal unsafe delegate* glFramebufferTextureLayerEXT; + internal unsafe delegate* glFramebufferTextureMultiviewOVR; + internal unsafe delegate* glFreeObjectBufferATI; + internal unsafe delegate* glFrontFace; + internal unsafe delegate* glFrustumfOES; + internal unsafe delegate* glFrustumxOES; + internal unsafe delegate* glGenAsyncMarkersSGIX; + internal unsafe delegate* glGenBuffers; + internal unsafe delegate* glGenBuffersARB; + internal unsafe delegate* glGenFencesAPPLE; + internal unsafe delegate* glGenFencesNV; + internal unsafe delegate* glGenFragmentShadersATI; + internal unsafe delegate* glGenFramebuffers; + internal unsafe delegate* glGenFramebuffersEXT; + internal unsafe delegate* glGenNamesAMD; + internal unsafe delegate* glGenOcclusionQueriesNV; + internal unsafe delegate* glGenPathsNV; + internal unsafe delegate* glGenPerfMonitorsAMD; + internal unsafe delegate* glGenProgramPipelines; + internal unsafe delegate* glGenProgramsARB; + internal unsafe delegate* glGenProgramsNV; + internal unsafe delegate* glGenQueries; + internal unsafe delegate* glGenQueriesARB; + internal unsafe delegate* glGenQueryResourceTagNV; + internal unsafe delegate* glGenRenderbuffers; + internal unsafe delegate* glGenRenderbuffersEXT; + internal unsafe delegate* glGenSamplers; + internal unsafe delegate* glGenSemaphoresEXT; + internal unsafe delegate* glGenSymbolsEXT; + internal unsafe delegate* glGenTextures; + internal unsafe delegate* glGenTexturesEXT; + internal unsafe delegate* glGenTransformFeedbacks; + internal unsafe delegate* glGenTransformFeedbacksNV; + internal unsafe delegate* glGenVertexArrays; + internal unsafe delegate* glGenVertexArraysAPPLE; + internal unsafe delegate* glGenVertexShadersEXT; + internal unsafe delegate* glGenerateMipmap; + internal unsafe delegate* glGenerateMipmapEXT; + internal unsafe delegate* glGenerateMultiTexMipmapEXT; + internal unsafe delegate* glGenerateTextureMipmap; + internal unsafe delegate* glGenerateTextureMipmapEXT; + internal unsafe delegate* glGetActiveAtomicCounterBufferiv; + internal unsafe delegate* glGetActiveAttrib; + internal unsafe delegate* glGetActiveAttribARB; + internal unsafe delegate* glGetActiveSubroutineName; + internal unsafe delegate* glGetActiveSubroutineUniformName; + internal unsafe delegate* glGetActiveSubroutineUniformiv; + internal unsafe delegate* glGetActiveUniform; + internal unsafe delegate* glGetActiveUniformARB; + internal unsafe delegate* glGetActiveUniformBlockName; + internal unsafe delegate* glGetActiveUniformBlockiv; + internal unsafe delegate* glGetActiveUniformName; + internal unsafe delegate* glGetActiveUniformsiv; + internal unsafe delegate* glGetActiveVaryingNV; + internal unsafe delegate* glGetArrayObjectfvATI; + internal unsafe delegate* glGetArrayObjectivATI; + internal unsafe delegate* glGetAttachedObjectsARB; + internal unsafe delegate* glGetAttachedShaders; + internal unsafe delegate* glGetAttribLocation; + internal unsafe delegate* glGetAttribLocationARB; + internal unsafe delegate* glGetBooleanIndexedvEXT; + internal unsafe delegate* glGetBooleani_v; + internal unsafe delegate* glGetBooleanv; + internal unsafe delegate* glGetBufferParameteri64v; + internal unsafe delegate* glGetBufferParameteriv; + internal unsafe delegate* glGetBufferParameterivARB; + internal unsafe delegate* glGetBufferParameterui64vNV; + internal unsafe delegate* glGetBufferPointerv; + internal unsafe delegate* glGetBufferPointervARB; + internal unsafe delegate* glGetBufferSubData; + internal unsafe delegate* glGetBufferSubDataARB; + internal unsafe delegate* glGetClipPlanefOES; + internal unsafe delegate* glGetClipPlanexOES; + internal unsafe delegate* glGetColorTableEXT; + internal unsafe delegate* glGetColorTableParameterfvEXT; + internal unsafe delegate* glGetColorTableParameterfvSGI; + internal unsafe delegate* glGetColorTableParameterivEXT; + internal unsafe delegate* glGetColorTableParameterivSGI; + internal unsafe delegate* glGetColorTableSGI; + internal unsafe delegate* glGetCombinerInputParameterfvNV; + internal unsafe delegate* glGetCombinerInputParameterivNV; + internal unsafe delegate* glGetCombinerOutputParameterfvNV; + internal unsafe delegate* glGetCombinerOutputParameterivNV; + internal unsafe delegate* glGetCombinerStageParameterfvNV; + internal unsafe delegate* glGetCommandHeaderNV; + internal unsafe delegate* glGetCompressedMultiTexImageEXT; + internal unsafe delegate* glGetCompressedTexImage; + internal unsafe delegate* glGetCompressedTexImageARB; + internal unsafe delegate* glGetCompressedTextureImage; + internal unsafe delegate* glGetCompressedTextureImageEXT; + internal unsafe delegate* glGetCompressedTextureSubImage; + internal unsafe delegate* glGetConvolutionFilterEXT; + internal unsafe delegate* glGetConvolutionParameterfvEXT; + internal unsafe delegate* glGetConvolutionParameterivEXT; + internal unsafe delegate* glGetConvolutionParameterxvOES; + internal unsafe delegate* glGetCoverageModulationTableNV; + internal unsafe delegate* glGetDebugMessageLog; + internal unsafe delegate* glGetDebugMessageLogAMD; + internal unsafe delegate* glGetDebugMessageLogARB; + internal unsafe delegate* glGetDetailTexFuncSGIS; + internal unsafe delegate* glGetDoubleIndexedvEXT; + internal unsafe delegate* glGetDoublei_v; + internal unsafe delegate* glGetDoublei_vEXT; + internal unsafe delegate* glGetDoublev; + internal unsafe delegate* glGetError; + internal unsafe delegate* glGetFenceivNV; + internal unsafe delegate* glGetFinalCombinerInputParameterfvNV; + internal unsafe delegate* glGetFinalCombinerInputParameterivNV; + internal unsafe delegate* glGetFirstPerfQueryIdINTEL; + internal unsafe delegate* glGetFixedvOES; + internal unsafe delegate* glGetFloatIndexedvEXT; + internal unsafe delegate* glGetFloati_v; + internal unsafe delegate* glGetFloati_vEXT; + internal unsafe delegate* glGetFloatv; + internal unsafe delegate* glGetFogFuncSGIS; + internal unsafe delegate* glGetFragDataIndex; + internal unsafe delegate* glGetFragDataLocation; + internal unsafe delegate* glGetFragDataLocationEXT; + internal unsafe delegate* glGetFragmentLightfvSGIX; + internal unsafe delegate* glGetFragmentLightivSGIX; + internal unsafe delegate* glGetFragmentMaterialfvSGIX; + internal unsafe delegate* glGetFragmentMaterialivSGIX; + internal unsafe delegate* glGetFramebufferAttachmentParameteriv; + internal unsafe delegate* glGetFramebufferAttachmentParameterivEXT; + internal unsafe delegate* glGetFramebufferParameterfvAMD; + internal unsafe delegate* glGetFramebufferParameteriv; + internal unsafe delegate* glGetFramebufferParameterivEXT; + internal unsafe delegate* glGetFramebufferParameterivMESA; + internal unsafe delegate* glGetGraphicsResetStatus; + internal unsafe delegate* glGetGraphicsResetStatusARB; + internal unsafe delegate* glGetHandleARB; + internal unsafe delegate* glGetHistogramEXT; + internal unsafe delegate* glGetHistogramParameterfvEXT; + internal unsafe delegate* glGetHistogramParameterivEXT; + internal unsafe delegate* glGetHistogramParameterxvOES; + internal unsafe delegate* glGetImageHandleARB; + internal unsafe delegate* glGetImageHandleNV; + internal unsafe delegate* glGetImageTransformParameterfvHP; + internal unsafe delegate* glGetImageTransformParameterivHP; + internal unsafe delegate* glGetInfoLogARB; + internal unsafe delegate* glGetInstrumentsSGIX; + internal unsafe delegate* glGetInteger64i_v; + internal unsafe delegate* glGetInteger64v; + internal unsafe delegate* glGetIntegerIndexedvEXT; + internal unsafe delegate* glGetIntegeri_v; + internal unsafe delegate* glGetIntegerui64i_vNV; + internal unsafe delegate* glGetIntegerui64vNV; + internal unsafe delegate* glGetIntegerv; + internal unsafe delegate* glGetInternalformatSampleivNV; + internal unsafe delegate* glGetInternalformati64v; + internal unsafe delegate* glGetInternalformativ; + internal unsafe delegate* glGetInvariantBooleanvEXT; + internal unsafe delegate* glGetInvariantFloatvEXT; + internal unsafe delegate* glGetInvariantIntegervEXT; + internal unsafe delegate* glGetLightxOES; + internal unsafe delegate* glGetListParameterfvSGIX; + internal unsafe delegate* glGetListParameterivSGIX; + internal unsafe delegate* glGetLocalConstantBooleanvEXT; + internal unsafe delegate* glGetLocalConstantFloatvEXT; + internal unsafe delegate* glGetLocalConstantIntegervEXT; + internal unsafe delegate* glGetMapAttribParameterfvNV; + internal unsafe delegate* glGetMapAttribParameterivNV; + internal unsafe delegate* glGetMapControlPointsNV; + internal unsafe delegate* glGetMapParameterfvNV; + internal unsafe delegate* glGetMapParameterivNV; + internal unsafe delegate* glGetMapxvOES; + internal unsafe delegate* glGetMaterialxOES; + internal unsafe delegate* glGetMemoryObjectDetachedResourcesuivNV; + internal unsafe delegate* glGetMemoryObjectParameterivEXT; + internal unsafe delegate* glGetMinmaxEXT; + internal unsafe delegate* glGetMinmaxParameterfvEXT; + internal unsafe delegate* glGetMinmaxParameterivEXT; + internal unsafe delegate* glGetMultiTexEnvfvEXT; + internal unsafe delegate* glGetMultiTexEnvivEXT; + internal unsafe delegate* glGetMultiTexGendvEXT; + internal unsafe delegate* glGetMultiTexGenfvEXT; + internal unsafe delegate* glGetMultiTexGenivEXT; + internal unsafe delegate* glGetMultiTexImageEXT; + internal unsafe delegate* glGetMultiTexLevelParameterfvEXT; + internal unsafe delegate* glGetMultiTexLevelParameterivEXT; + internal unsafe delegate* glGetMultiTexParameterIivEXT; + internal unsafe delegate* glGetMultiTexParameterIuivEXT; + internal unsafe delegate* glGetMultiTexParameterfvEXT; + internal unsafe delegate* glGetMultiTexParameterivEXT; + internal unsafe delegate* glGetMultisamplefv; + internal unsafe delegate* glGetMultisamplefvNV; + internal unsafe delegate* glGetNamedBufferParameteri64v; + internal unsafe delegate* glGetNamedBufferParameteriv; + internal unsafe delegate* glGetNamedBufferParameterivEXT; + internal unsafe delegate* glGetNamedBufferParameterui64vNV; + internal unsafe delegate* glGetNamedBufferPointerv; + internal unsafe delegate* glGetNamedBufferPointervEXT; + internal unsafe delegate* glGetNamedBufferSubData; + internal unsafe delegate* glGetNamedBufferSubDataEXT; + internal unsafe delegate* glGetNamedFramebufferAttachmentParameteriv; + internal unsafe delegate* glGetNamedFramebufferAttachmentParameterivEXT; + internal unsafe delegate* glGetNamedFramebufferParameterfvAMD; + internal unsafe delegate* glGetNamedFramebufferParameteriv; + internal unsafe delegate* glGetNamedFramebufferParameterivEXT; + internal unsafe delegate* glGetNamedProgramLocalParameterIivEXT; + internal unsafe delegate* glGetNamedProgramLocalParameterIuivEXT; + internal unsafe delegate* glGetNamedProgramLocalParameterdvEXT; + internal unsafe delegate* glGetNamedProgramLocalParameterfvEXT; + internal unsafe delegate* glGetNamedProgramStringEXT; + internal unsafe delegate* glGetNamedProgramivEXT; + internal unsafe delegate* glGetNamedRenderbufferParameteriv; + internal unsafe delegate* glGetNamedRenderbufferParameterivEXT; + internal unsafe delegate* glGetNamedStringARB; + internal unsafe delegate* glGetNamedStringivARB; + internal unsafe delegate* glGetNextPerfQueryIdINTEL; + internal unsafe delegate* glGetObjectBufferfvATI; + internal unsafe delegate* glGetObjectBufferivATI; + internal unsafe delegate* glGetObjectLabel; + internal unsafe delegate* glGetObjectLabelEXT; + internal unsafe delegate* glGetObjectParameterfvARB; + internal unsafe delegate* glGetObjectParameterivAPPLE; + internal unsafe delegate* glGetObjectParameterivARB; + internal unsafe delegate* glGetObjectPtrLabel; + internal unsafe delegate* glGetOcclusionQueryivNV; + internal unsafe delegate* glGetOcclusionQueryuivNV; + internal unsafe delegate* glGetPathCommandsNV; + internal unsafe delegate* glGetPathCoordsNV; + internal unsafe delegate* glGetPathDashArrayNV; + internal unsafe delegate* glGetPathLengthNV; + internal unsafe delegate* glGetPathMetricRangeNV; + internal unsafe delegate* glGetPathMetricsNV; + internal unsafe delegate* glGetPathParameterfvNV; + internal unsafe delegate* glGetPathParameterivNV; + internal unsafe delegate* glGetPathSpacingNV; + internal unsafe delegate* glGetPerfCounterInfoINTEL; + internal unsafe delegate* glGetPerfMonitorCounterDataAMD; + internal unsafe delegate* glGetPerfMonitorCounterInfoAMD; + internal unsafe delegate* glGetPerfMonitorCounterStringAMD; + internal unsafe delegate* glGetPerfMonitorCountersAMD; + internal unsafe delegate* glGetPerfMonitorGroupStringAMD; + internal unsafe delegate* glGetPerfMonitorGroupsAMD; + internal unsafe delegate* glGetPerfQueryDataINTEL; + internal unsafe delegate* glGetPerfQueryIdByNameINTEL; + internal unsafe delegate* glGetPerfQueryInfoINTEL; + internal unsafe delegate* glGetPixelMapxv; + internal unsafe delegate* glGetPixelTexGenParameterfvSGIS; + internal unsafe delegate* glGetPixelTexGenParameterivSGIS; + internal unsafe delegate* glGetPixelTransformParameterfvEXT; + internal unsafe delegate* glGetPixelTransformParameterivEXT; + internal unsafe delegate* glGetPointerIndexedvEXT; + internal unsafe delegate* glGetPointeri_vEXT; + internal unsafe delegate* glGetPointerv; + internal unsafe delegate* glGetPointervEXT; + internal unsafe delegate* glGetProgramBinary; + internal unsafe delegate* glGetProgramEnvParameterIivNV; + internal unsafe delegate* glGetProgramEnvParameterIuivNV; + internal unsafe delegate* glGetProgramEnvParameterdvARB; + internal unsafe delegate* glGetProgramEnvParameterfvARB; + internal unsafe delegate* glGetProgramInfoLog; + internal unsafe delegate* glGetProgramInterfaceiv; + internal unsafe delegate* glGetProgramLocalParameterIivNV; + internal unsafe delegate* glGetProgramLocalParameterIuivNV; + internal unsafe delegate* glGetProgramLocalParameterdvARB; + internal unsafe delegate* glGetProgramLocalParameterfvARB; + internal unsafe delegate* glGetProgramNamedParameterdvNV; + internal unsafe delegate* glGetProgramNamedParameterfvNV; + internal unsafe delegate* glGetProgramParameterdvNV; + internal unsafe delegate* glGetProgramParameterfvNV; + internal unsafe delegate* glGetProgramPipelineInfoLog; + internal unsafe delegate* glGetProgramPipelineiv; + internal unsafe delegate* glGetProgramResourceIndex; + internal unsafe delegate* glGetProgramResourceLocation; + internal unsafe delegate* glGetProgramResourceLocationIndex; + internal unsafe delegate* glGetProgramResourceName; + internal unsafe delegate* glGetProgramResourcefvNV; + internal unsafe delegate* glGetProgramResourceiv; + internal unsafe delegate* glGetProgramStageiv; + internal unsafe delegate* glGetProgramStringARB; + internal unsafe delegate* glGetProgramStringNV; + internal unsafe delegate* glGetProgramSubroutineParameteruivNV; + internal unsafe delegate* glGetProgramiv; + internal unsafe delegate* glGetProgramivARB; + internal unsafe delegate* glGetProgramivNV; + internal unsafe delegate* glGetQueryBufferObjecti64v; + internal unsafe delegate* glGetQueryBufferObjectiv; + internal unsafe delegate* glGetQueryBufferObjectui64v; + internal unsafe delegate* glGetQueryBufferObjectuiv; + internal unsafe delegate* glGetQueryIndexediv; + internal unsafe delegate* glGetQueryObjecti64v; + internal unsafe delegate* glGetQueryObjecti64vEXT; + internal unsafe delegate* glGetQueryObjectiv; + internal unsafe delegate* glGetQueryObjectivARB; + internal unsafe delegate* glGetQueryObjectui64v; + internal unsafe delegate* glGetQueryObjectui64vEXT; + internal unsafe delegate* glGetQueryObjectuiv; + internal unsafe delegate* glGetQueryObjectuivARB; + internal unsafe delegate* glGetQueryiv; + internal unsafe delegate* glGetQueryivARB; + internal unsafe delegate* glGetRenderbufferParameteriv; + internal unsafe delegate* glGetRenderbufferParameterivEXT; + internal unsafe delegate* glGetSamplerParameterIiv; + internal unsafe delegate* glGetSamplerParameterIuiv; + internal unsafe delegate* glGetSamplerParameterfv; + internal unsafe delegate* glGetSamplerParameteriv; + internal unsafe delegate* glGetSemaphoreParameterivNV; + internal unsafe delegate* glGetSemaphoreParameterui64vEXT; + internal unsafe delegate* glGetSeparableFilterEXT; + internal unsafe delegate* glGetShaderInfoLog; + internal unsafe delegate* glGetShaderPrecisionFormat; + internal unsafe delegate* glGetShaderSource; + internal unsafe delegate* glGetShaderSourceARB; + internal unsafe delegate* glGetShaderiv; + internal unsafe delegate* glGetShadingRateImagePaletteNV; + internal unsafe delegate* glGetShadingRateSampleLocationivNV; + internal unsafe delegate* glGetSharpenTexFuncSGIS; + internal unsafe delegate* glGetStageIndexNV; + internal unsafe delegate* glGetString; + internal unsafe delegate* glGetStringi; + internal unsafe delegate* glGetSubroutineIndex; + internal unsafe delegate* glGetSubroutineUniformLocation; + internal unsafe delegate* glGetSynciv; + internal unsafe delegate* glGetTexBumpParameterfvATI; + internal unsafe delegate* glGetTexBumpParameterivATI; + internal unsafe delegate* glGetTexEnvxvOES; + internal unsafe delegate* glGetTexFilterFuncSGIS; + internal unsafe delegate* glGetTexGenxvOES; + internal unsafe delegate* glGetTexImage; + internal unsafe delegate* glGetTexLevelParameterfv; + internal unsafe delegate* glGetTexLevelParameteriv; + internal unsafe delegate* glGetTexLevelParameterxvOES; + internal unsafe delegate* glGetTexParameterIiv; + internal unsafe delegate* glGetTexParameterIivEXT; + internal unsafe delegate* glGetTexParameterIuiv; + internal unsafe delegate* glGetTexParameterIuivEXT; + internal unsafe delegate* glGetTexParameterPointervAPPLE; + internal unsafe delegate* glGetTexParameterfv; + internal unsafe delegate* glGetTexParameteriv; + internal unsafe delegate* glGetTexParameterxvOES; + internal unsafe delegate* glGetTextureHandleARB; + internal unsafe delegate* glGetTextureHandleNV; + internal unsafe delegate* glGetTextureImage; + internal unsafe delegate* glGetTextureImageEXT; + internal unsafe delegate* glGetTextureLevelParameterfv; + internal unsafe delegate* glGetTextureLevelParameterfvEXT; + internal unsafe delegate* glGetTextureLevelParameteriv; + internal unsafe delegate* glGetTextureLevelParameterivEXT; + internal unsafe delegate* glGetTextureParameterIiv; + internal unsafe delegate* glGetTextureParameterIivEXT; + internal unsafe delegate* glGetTextureParameterIuiv; + internal unsafe delegate* glGetTextureParameterIuivEXT; + internal unsafe delegate* glGetTextureParameterfv; + internal unsafe delegate* glGetTextureParameterfvEXT; + internal unsafe delegate* glGetTextureParameteriv; + internal unsafe delegate* glGetTextureParameterivEXT; + internal unsafe delegate* glGetTextureSamplerHandleARB; + internal unsafe delegate* glGetTextureSamplerHandleNV; + internal unsafe delegate* glGetTextureSubImage; + internal unsafe delegate* glGetTrackMatrixivNV; + internal unsafe delegate* glGetTransformFeedbackVarying; + internal unsafe delegate* glGetTransformFeedbackVaryingEXT; + internal unsafe delegate* glGetTransformFeedbackVaryingNV; + internal unsafe delegate* glGetTransformFeedbacki64_v; + internal unsafe delegate* glGetTransformFeedbacki_v; + internal unsafe delegate* glGetTransformFeedbackiv; + internal unsafe delegate* glGetUniformBlockIndex; + internal unsafe delegate* glGetUniformBufferSizeEXT; + internal unsafe delegate* glGetUniformIndices; + internal unsafe delegate* glGetUniformLocation; + internal unsafe delegate* glGetUniformLocationARB; + internal unsafe delegate* glGetUniformOffsetEXT; + internal unsafe delegate* glGetUniformSubroutineuiv; + internal unsafe delegate* glGetUniformdv; + internal unsafe delegate* glGetUniformfv; + internal unsafe delegate* glGetUniformfvARB; + internal unsafe delegate* glGetUniformi64vARB; + internal unsafe delegate* glGetUniformi64vNV; + internal unsafe delegate* glGetUniformiv; + internal unsafe delegate* glGetUniformivARB; + internal unsafe delegate* glGetUniformui64vARB; + internal unsafe delegate* glGetUniformui64vNV; + internal unsafe delegate* glGetUniformuiv; + internal unsafe delegate* glGetUniformuivEXT; + internal unsafe delegate* glGetUnsignedBytei_vEXT; + internal unsafe delegate* glGetUnsignedBytevEXT; + internal unsafe delegate* glGetVariantArrayObjectfvATI; + internal unsafe delegate* glGetVariantArrayObjectivATI; + internal unsafe delegate* glGetVariantBooleanvEXT; + internal unsafe delegate* glGetVariantFloatvEXT; + internal unsafe delegate* glGetVariantIntegervEXT; + internal unsafe delegate* glGetVariantPointervEXT; + internal unsafe delegate* glGetVaryingLocationNV; + internal unsafe delegate* glGetVertexArrayIndexed64iv; + internal unsafe delegate* glGetVertexArrayIndexediv; + internal unsafe delegate* glGetVertexArrayIntegeri_vEXT; + internal unsafe delegate* glGetVertexArrayIntegervEXT; + internal unsafe delegate* glGetVertexArrayPointeri_vEXT; + internal unsafe delegate* glGetVertexArrayPointervEXT; + internal unsafe delegate* glGetVertexArrayiv; + internal unsafe delegate* glGetVertexAttribArrayObjectfvATI; + internal unsafe delegate* glGetVertexAttribArrayObjectivATI; + internal unsafe delegate* glGetVertexAttribIiv; + internal unsafe delegate* glGetVertexAttribIivEXT; + internal unsafe delegate* glGetVertexAttribIuiv; + internal unsafe delegate* glGetVertexAttribIuivEXT; + internal unsafe delegate* glGetVertexAttribLdv; + internal unsafe delegate* glGetVertexAttribLdvEXT; + internal unsafe delegate* glGetVertexAttribLi64vNV; + internal unsafe delegate* glGetVertexAttribLui64vARB; + internal unsafe delegate* glGetVertexAttribLui64vNV; + internal unsafe delegate* glGetVertexAttribPointerv; + internal unsafe delegate* glGetVertexAttribPointervARB; + internal unsafe delegate* glGetVertexAttribPointervNV; + internal unsafe delegate* glGetVertexAttribdv; + internal unsafe delegate* glGetVertexAttribdvARB; + internal unsafe delegate* glGetVertexAttribdvNV; + internal unsafe delegate* glGetVertexAttribfv; + internal unsafe delegate* glGetVertexAttribfvARB; + internal unsafe delegate* glGetVertexAttribfvNV; + internal unsafe delegate* glGetVertexAttribiv; + internal unsafe delegate* glGetVertexAttribivARB; + internal unsafe delegate* glGetVertexAttribivNV; + internal unsafe delegate* glGetVideoCaptureStreamdvNV; + internal unsafe delegate* glGetVideoCaptureStreamfvNV; + internal unsafe delegate* glGetVideoCaptureStreamivNV; + internal unsafe delegate* glGetVideoCaptureivNV; + internal unsafe delegate* glGetVideoi64vNV; + internal unsafe delegate* glGetVideoivNV; + internal unsafe delegate* glGetVideoui64vNV; + internal unsafe delegate* glGetVideouivNV; + internal unsafe delegate* glGetVkProcAddrNV; + internal unsafe delegate* glGetnCompressedTexImage; + internal unsafe delegate* glGetnCompressedTexImageARB; + internal unsafe delegate* glGetnTexImage; + internal unsafe delegate* glGetnTexImageARB; + internal unsafe delegate* glGetnUniformdv; + internal unsafe delegate* glGetnUniformdvARB; + internal unsafe delegate* glGetnUniformfv; + internal unsafe delegate* glGetnUniformfvARB; + internal unsafe delegate* glGetnUniformi64vARB; + internal unsafe delegate* glGetnUniformiv; + internal unsafe delegate* glGetnUniformivARB; + internal unsafe delegate* glGetnUniformui64vARB; + internal unsafe delegate* glGetnUniformuiv; + internal unsafe delegate* glGetnUniformuivARB; + internal unsafe delegate* glGlobalAlphaFactorbSUN; + internal unsafe delegate* glGlobalAlphaFactordSUN; + internal unsafe delegate* glGlobalAlphaFactorfSUN; + internal unsafe delegate* glGlobalAlphaFactoriSUN; + internal unsafe delegate* glGlobalAlphaFactorsSUN; + internal unsafe delegate* glGlobalAlphaFactorubSUN; + internal unsafe delegate* glGlobalAlphaFactoruiSUN; + internal unsafe delegate* glGlobalAlphaFactorusSUN; + internal unsafe delegate* glHint; + internal unsafe delegate* glHintPGI; + internal unsafe delegate* glHistogramEXT; + internal unsafe delegate* glIglooInterfaceSGIX; + internal unsafe delegate* glImageTransformParameterfHP; + internal unsafe delegate* glImageTransformParameterfvHP; + internal unsafe delegate* glImageTransformParameteriHP; + internal unsafe delegate* glImageTransformParameterivHP; + internal unsafe delegate* glImportMemoryFdEXT; + internal unsafe delegate* glImportMemoryWin32HandleEXT; + internal unsafe delegate* glImportMemoryWin32NameEXT; + internal unsafe delegate* glImportSemaphoreFdEXT; + internal unsafe delegate* glImportSemaphoreWin32HandleEXT; + internal unsafe delegate* glImportSemaphoreWin32NameEXT; + internal unsafe delegate* glImportSyncEXT; + internal unsafe delegate* glIndexFormatNV; + internal unsafe delegate* glIndexFuncEXT; + internal unsafe delegate* glIndexMaterialEXT; + internal unsafe delegate* glIndexPointerEXT; + internal unsafe delegate* glIndexPointerListIBM; + internal unsafe delegate* glIndexxOES; + internal unsafe delegate* glIndexxvOES; + internal unsafe delegate* glInsertComponentEXT; + internal unsafe delegate* glInsertEventMarkerEXT; + internal unsafe delegate* glInstrumentsBufferSGIX; + internal unsafe delegate* glInterpolatePathsNV; + internal unsafe delegate* glInvalidateBufferData; + internal unsafe delegate* glInvalidateBufferSubData; + internal unsafe delegate* glInvalidateFramebuffer; + internal unsafe delegate* glInvalidateNamedFramebufferData; + internal unsafe delegate* glInvalidateNamedFramebufferSubData; + internal unsafe delegate* glInvalidateSubFramebuffer; + internal unsafe delegate* glInvalidateTexImage; + internal unsafe delegate* glInvalidateTexSubImage; + internal unsafe delegate* glIsAsyncMarkerSGIX; + internal unsafe delegate* glIsBuffer; + internal unsafe delegate* glIsBufferARB; + internal unsafe delegate* glIsBufferResidentNV; + internal unsafe delegate* glIsCommandListNV; + internal unsafe delegate* glIsEnabled; + internal unsafe delegate* glIsEnabledIndexedEXT; + internal unsafe delegate* glIsEnabledi; + internal unsafe delegate* glIsFenceAPPLE; + internal unsafe delegate* glIsFenceNV; + internal unsafe delegate* glIsFramebuffer; + internal unsafe delegate* glIsFramebufferEXT; + internal unsafe delegate* glIsImageHandleResidentARB; + internal unsafe delegate* glIsImageHandleResidentNV; + internal unsafe delegate* glIsMemoryObjectEXT; + internal unsafe delegate* glIsNameAMD; + internal unsafe delegate* glIsNamedBufferResidentNV; + internal unsafe delegate* glIsNamedStringARB; + internal unsafe delegate* glIsObjectBufferATI; + internal unsafe delegate* glIsOcclusionQueryNV; + internal unsafe delegate* glIsPathNV; + internal unsafe delegate* glIsPointInFillPathNV; + internal unsafe delegate* glIsPointInStrokePathNV; + internal unsafe delegate* glIsProgram; + internal unsafe delegate* glIsProgramARB; + internal unsafe delegate* glIsProgramNV; + internal unsafe delegate* glIsProgramPipeline; + internal unsafe delegate* glIsQuery; + internal unsafe delegate* glIsQueryARB; + internal unsafe delegate* glIsRenderbuffer; + internal unsafe delegate* glIsRenderbufferEXT; + internal unsafe delegate* glIsSampler; + internal unsafe delegate* glIsSemaphoreEXT; + internal unsafe delegate* glIsShader; + internal unsafe delegate* glIsStateNV; + internal unsafe delegate* glIsSync; + internal unsafe delegate* glIsTexture; + internal unsafe delegate* glIsTextureEXT; + internal unsafe delegate* glIsTextureHandleResidentARB; + internal unsafe delegate* glIsTextureHandleResidentNV; + internal unsafe delegate* glIsTransformFeedback; + internal unsafe delegate* glIsTransformFeedbackNV; + internal unsafe delegate* glIsVariantEnabledEXT; + internal unsafe delegate* glIsVertexArray; + internal unsafe delegate* glIsVertexArrayAPPLE; + internal unsafe delegate* glIsVertexAttribEnabledAPPLE; + internal unsafe delegate* glLGPUCopyImageSubDataNVX; + internal unsafe delegate* glLGPUInterlockNVX; + internal unsafe delegate* glLGPUNamedBufferSubDataNVX; + internal unsafe delegate* glLabelObjectEXT; + internal unsafe delegate* glLightEnviSGIX; + internal unsafe delegate* glLightModelxOES; + internal unsafe delegate* glLightModelxvOES; + internal unsafe delegate* glLightxOES; + internal unsafe delegate* glLightxvOES; + internal unsafe delegate* glLineWidth; + internal unsafe delegate* glLineWidthxOES; + internal unsafe delegate* glLinkProgram; + internal unsafe delegate* glLinkProgramARB; + internal unsafe delegate* glListDrawCommandsStatesClientNV; + internal unsafe delegate* glListParameterfSGIX; + internal unsafe delegate* glListParameterfvSGIX; + internal unsafe delegate* glListParameteriSGIX; + internal unsafe delegate* glListParameterivSGIX; + internal unsafe delegate* glLoadIdentityDeformationMapSGIX; + internal unsafe delegate* glLoadMatrixxOES; + internal unsafe delegate* glLoadProgramNV; + internal unsafe delegate* glLoadTransposeMatrixdARB; + internal unsafe delegate* glLoadTransposeMatrixfARB; + internal unsafe delegate* glLoadTransposeMatrixxOES; + internal unsafe delegate* glLockArraysEXT; + internal unsafe delegate* glLogicOp; + internal unsafe delegate* glMakeBufferNonResidentNV; + internal unsafe delegate* glMakeBufferResidentNV; + internal unsafe delegate* glMakeImageHandleNonResidentARB; + internal unsafe delegate* glMakeImageHandleNonResidentNV; + internal unsafe delegate* glMakeImageHandleResidentARB; + internal unsafe delegate* glMakeImageHandleResidentNV; + internal unsafe delegate* glMakeNamedBufferNonResidentNV; + internal unsafe delegate* glMakeNamedBufferResidentNV; + internal unsafe delegate* glMakeTextureHandleNonResidentARB; + internal unsafe delegate* glMakeTextureHandleNonResidentNV; + internal unsafe delegate* glMakeTextureHandleResidentARB; + internal unsafe delegate* glMakeTextureHandleResidentNV; + internal unsafe delegate* glMap1xOES; + internal unsafe delegate* glMap2xOES; + internal unsafe delegate* glMapBuffer; + internal unsafe delegate* glMapBufferARB; + internal unsafe delegate* glMapBufferRange; + internal unsafe delegate* glMapControlPointsNV; + internal unsafe delegate* glMapGrid1xOES; + internal unsafe delegate* glMapGrid2xOES; + internal unsafe delegate* glMapNamedBuffer; + internal unsafe delegate* glMapNamedBufferEXT; + internal unsafe delegate* glMapNamedBufferRange; + internal unsafe delegate* glMapNamedBufferRangeEXT; + internal unsafe delegate* glMapObjectBufferATI; + internal unsafe delegate* glMapParameterfvNV; + internal unsafe delegate* glMapParameterivNV; + internal unsafe delegate* glMapTexture2DINTEL; + internal unsafe delegate* glMapVertexAttrib1dAPPLE; + internal unsafe delegate* glMapVertexAttrib1fAPPLE; + internal unsafe delegate* glMapVertexAttrib2dAPPLE; + internal unsafe delegate* glMapVertexAttrib2fAPPLE; + internal unsafe delegate* glMaterialxOES; + internal unsafe delegate* glMaterialxvOES; + internal unsafe delegate* glMatrixFrustumEXT; + internal unsafe delegate* glMatrixIndexPointerARB; + internal unsafe delegate* glMatrixIndexubvARB; + internal unsafe delegate* glMatrixIndexuivARB; + internal unsafe delegate* glMatrixIndexusvARB; + internal unsafe delegate* glMatrixLoad3x2fNV; + internal unsafe delegate* glMatrixLoad3x3fNV; + internal unsafe delegate* glMatrixLoadIdentityEXT; + internal unsafe delegate* glMatrixLoadTranspose3x3fNV; + internal unsafe delegate* glMatrixLoadTransposedEXT; + internal unsafe delegate* glMatrixLoadTransposefEXT; + internal unsafe delegate* glMatrixLoaddEXT; + internal unsafe delegate* glMatrixLoadfEXT; + internal unsafe delegate* glMatrixMult3x2fNV; + internal unsafe delegate* glMatrixMult3x3fNV; + internal unsafe delegate* glMatrixMultTranspose3x3fNV; + internal unsafe delegate* glMatrixMultTransposedEXT; + internal unsafe delegate* glMatrixMultTransposefEXT; + internal unsafe delegate* glMatrixMultdEXT; + internal unsafe delegate* glMatrixMultfEXT; + internal unsafe delegate* glMatrixOrthoEXT; + internal unsafe delegate* glMatrixPopEXT; + internal unsafe delegate* glMatrixPushEXT; + internal unsafe delegate* glMatrixRotatedEXT; + internal unsafe delegate* glMatrixRotatefEXT; + internal unsafe delegate* glMatrixScaledEXT; + internal unsafe delegate* glMatrixScalefEXT; + internal unsafe delegate* glMatrixTranslatedEXT; + internal unsafe delegate* glMatrixTranslatefEXT; + internal unsafe delegate* glMaxShaderCompilerThreadsARB; + internal unsafe delegate* glMaxShaderCompilerThreadsKHR; + internal unsafe delegate* glMemoryBarrier; + internal unsafe delegate* glMemoryBarrierByRegion; + internal unsafe delegate* glMemoryBarrierEXT; + internal unsafe delegate* glMemoryObjectParameterivEXT; + internal unsafe delegate* glMinSampleShading; + internal unsafe delegate* glMinSampleShadingARB; + internal unsafe delegate* glMinmaxEXT; + internal unsafe delegate* glMultMatrixxOES; + internal unsafe delegate* glMultTransposeMatrixdARB; + internal unsafe delegate* glMultTransposeMatrixfARB; + internal unsafe delegate* glMultTransposeMatrixxOES; + internal unsafe delegate* glMultiDrawArrays; + internal unsafe delegate* glMultiDrawArraysEXT; + internal unsafe delegate* glMultiDrawArraysIndirect; + internal unsafe delegate* glMultiDrawArraysIndirectAMD; + internal unsafe delegate* glMultiDrawArraysIndirectBindlessCountNV; + internal unsafe delegate* glMultiDrawArraysIndirectBindlessNV; + internal unsafe delegate* glMultiDrawArraysIndirectCount; + internal unsafe delegate* glMultiDrawArraysIndirectCountARB; + internal unsafe delegate* glMultiDrawElementArrayAPPLE; + internal unsafe delegate* glMultiDrawElements; + internal unsafe delegate* glMultiDrawElementsBaseVertex; + internal unsafe delegate* glMultiDrawElementsEXT; + internal unsafe delegate* glMultiDrawElementsIndirect; + internal unsafe delegate* glMultiDrawElementsIndirectAMD; + internal unsafe delegate* glMultiDrawElementsIndirectBindlessCountNV; + internal unsafe delegate* glMultiDrawElementsIndirectBindlessNV; + internal unsafe delegate* glMultiDrawElementsIndirectCount; + internal unsafe delegate* glMultiDrawElementsIndirectCountARB; + internal unsafe delegate* glMultiDrawMeshTasksIndirectCountNV; + internal unsafe delegate* glMultiDrawMeshTasksIndirectNV; + internal unsafe delegate* glMultiDrawRangeElementArrayAPPLE; + internal unsafe delegate* glMultiModeDrawArraysIBM; + internal unsafe delegate* glMultiModeDrawElementsIBM; + internal unsafe delegate* glMultiTexBufferEXT; + internal unsafe delegate* glMultiTexCoord1bOES; + internal unsafe delegate* glMultiTexCoord1bvOES; + internal unsafe delegate* glMultiTexCoord1dARB; + internal unsafe delegate* glMultiTexCoord1dvARB; + internal unsafe delegate* glMultiTexCoord1fARB; + internal unsafe delegate* glMultiTexCoord1fvARB; + internal unsafe delegate* glMultiTexCoord1hNV; + internal unsafe delegate* glMultiTexCoord1hvNV; + internal unsafe delegate* glMultiTexCoord1iARB; + internal unsafe delegate* glMultiTexCoord1ivARB; + internal unsafe delegate* glMultiTexCoord1sARB; + internal unsafe delegate* glMultiTexCoord1svARB; + internal unsafe delegate* glMultiTexCoord1xOES; + internal unsafe delegate* glMultiTexCoord1xvOES; + internal unsafe delegate* glMultiTexCoord2bOES; + internal unsafe delegate* glMultiTexCoord2bvOES; + internal unsafe delegate* glMultiTexCoord2dARB; + internal unsafe delegate* glMultiTexCoord2dvARB; + internal unsafe delegate* glMultiTexCoord2fARB; + internal unsafe delegate* glMultiTexCoord2fvARB; + internal unsafe delegate* glMultiTexCoord2hNV; + internal unsafe delegate* glMultiTexCoord2hvNV; + internal unsafe delegate* glMultiTexCoord2iARB; + internal unsafe delegate* glMultiTexCoord2ivARB; + internal unsafe delegate* glMultiTexCoord2sARB; + internal unsafe delegate* glMultiTexCoord2svARB; + internal unsafe delegate* glMultiTexCoord2xOES; + internal unsafe delegate* glMultiTexCoord2xvOES; + internal unsafe delegate* glMultiTexCoord3bOES; + internal unsafe delegate* glMultiTexCoord3bvOES; + internal unsafe delegate* glMultiTexCoord3dARB; + internal unsafe delegate* glMultiTexCoord3dvARB; + internal unsafe delegate* glMultiTexCoord3fARB; + internal unsafe delegate* glMultiTexCoord3fvARB; + internal unsafe delegate* glMultiTexCoord3hNV; + internal unsafe delegate* glMultiTexCoord3hvNV; + internal unsafe delegate* glMultiTexCoord3iARB; + internal unsafe delegate* glMultiTexCoord3ivARB; + internal unsafe delegate* glMultiTexCoord3sARB; + internal unsafe delegate* glMultiTexCoord3svARB; + internal unsafe delegate* glMultiTexCoord3xOES; + internal unsafe delegate* glMultiTexCoord3xvOES; + internal unsafe delegate* glMultiTexCoord4bOES; + internal unsafe delegate* glMultiTexCoord4bvOES; + internal unsafe delegate* glMultiTexCoord4dARB; + internal unsafe delegate* glMultiTexCoord4dvARB; + internal unsafe delegate* glMultiTexCoord4fARB; + internal unsafe delegate* glMultiTexCoord4fvARB; + internal unsafe delegate* glMultiTexCoord4hNV; + internal unsafe delegate* glMultiTexCoord4hvNV; + internal unsafe delegate* glMultiTexCoord4iARB; + internal unsafe delegate* glMultiTexCoord4ivARB; + internal unsafe delegate* glMultiTexCoord4sARB; + internal unsafe delegate* glMultiTexCoord4svARB; + internal unsafe delegate* glMultiTexCoord4xOES; + internal unsafe delegate* glMultiTexCoord4xvOES; + internal unsafe delegate* glMultiTexCoordPointerEXT; + internal unsafe delegate* glMultiTexEnvfEXT; + internal unsafe delegate* glMultiTexEnvfvEXT; + internal unsafe delegate* glMultiTexEnviEXT; + internal unsafe delegate* glMultiTexEnvivEXT; + internal unsafe delegate* glMultiTexGendEXT; + internal unsafe delegate* glMultiTexGendvEXT; + internal unsafe delegate* glMultiTexGenfEXT; + internal unsafe delegate* glMultiTexGenfvEXT; + internal unsafe delegate* glMultiTexGeniEXT; + internal unsafe delegate* glMultiTexGenivEXT; + internal unsafe delegate* glMultiTexImage1DEXT; + internal unsafe delegate* glMultiTexImage2DEXT; + internal unsafe delegate* glMultiTexImage3DEXT; + internal unsafe delegate* glMultiTexParameterIivEXT; + internal unsafe delegate* glMultiTexParameterIuivEXT; + internal unsafe delegate* glMultiTexParameterfEXT; + internal unsafe delegate* glMultiTexParameterfvEXT; + internal unsafe delegate* glMultiTexParameteriEXT; + internal unsafe delegate* glMultiTexParameterivEXT; + internal unsafe delegate* glMultiTexRenderbufferEXT; + internal unsafe delegate* glMultiTexSubImage1DEXT; + internal unsafe delegate* glMultiTexSubImage2DEXT; + internal unsafe delegate* glMultiTexSubImage3DEXT; + internal unsafe delegate* glMulticastBarrierNV; + internal unsafe delegate* glMulticastBlitFramebufferNV; + internal unsafe delegate* glMulticastBufferSubDataNV; + internal unsafe delegate* glMulticastCopyBufferSubDataNV; + internal unsafe delegate* glMulticastCopyImageSubDataNV; + internal unsafe delegate* glMulticastFramebufferSampleLocationsfvNV; + internal unsafe delegate* glMulticastGetQueryObjecti64vNV; + internal unsafe delegate* glMulticastGetQueryObjectivNV; + internal unsafe delegate* glMulticastGetQueryObjectui64vNV; + internal unsafe delegate* glMulticastGetQueryObjectuivNV; + internal unsafe delegate* glMulticastScissorArrayvNVX; + internal unsafe delegate* glMulticastViewportArrayvNVX; + internal unsafe delegate* glMulticastViewportPositionWScaleNVX; + internal unsafe delegate* glMulticastWaitSyncNV; + internal unsafe delegate* glNamedBufferAttachMemoryNV; + internal unsafe delegate* glNamedBufferData; + internal unsafe delegate* glNamedBufferDataEXT; + internal unsafe delegate* glNamedBufferPageCommitmentARB; + internal unsafe delegate* glNamedBufferPageCommitmentEXT; + internal unsafe delegate* glNamedBufferPageCommitmentMemNV; + internal unsafe delegate* glNamedBufferStorage; + internal unsafe delegate* glNamedBufferStorageEXT; + [Obsolete("Param type uncertain", true)] internal unsafe delegate* glNamedBufferStorageExternalEXT; + internal unsafe delegate* glNamedBufferStorageMemEXT; + internal unsafe delegate* glNamedBufferSubData; + internal unsafe delegate* glNamedBufferSubDataEXT; + internal unsafe delegate* glNamedCopyBufferSubDataEXT; + internal unsafe delegate* glNamedFramebufferDrawBuffer; + internal unsafe delegate* glNamedFramebufferDrawBuffers; + internal unsafe delegate* glNamedFramebufferParameteri; + internal unsafe delegate* glNamedFramebufferParameteriEXT; + internal unsafe delegate* glNamedFramebufferReadBuffer; + internal unsafe delegate* glNamedFramebufferRenderbuffer; + internal unsafe delegate* glNamedFramebufferRenderbufferEXT; + internal unsafe delegate* glNamedFramebufferSampleLocationsfvARB; + internal unsafe delegate* glNamedFramebufferSampleLocationsfvNV; + internal unsafe delegate* glNamedFramebufferSamplePositionsfvAMD; + internal unsafe delegate* glNamedFramebufferTexture; + internal unsafe delegate* glNamedFramebufferTexture1DEXT; + internal unsafe delegate* glNamedFramebufferTexture2DEXT; + internal unsafe delegate* glNamedFramebufferTexture3DEXT; + internal unsafe delegate* glNamedFramebufferTextureEXT; + internal unsafe delegate* glNamedFramebufferTextureFaceEXT; + internal unsafe delegate* glNamedFramebufferTextureLayer; + internal unsafe delegate* glNamedFramebufferTextureLayerEXT; + internal unsafe delegate* glNamedProgramLocalParameter4dEXT; + internal unsafe delegate* glNamedProgramLocalParameter4dvEXT; + internal unsafe delegate* glNamedProgramLocalParameter4fEXT; + internal unsafe delegate* glNamedProgramLocalParameter4fvEXT; + internal unsafe delegate* glNamedProgramLocalParameterI4iEXT; + internal unsafe delegate* glNamedProgramLocalParameterI4ivEXT; + internal unsafe delegate* glNamedProgramLocalParameterI4uiEXT; + internal unsafe delegate* glNamedProgramLocalParameterI4uivEXT; + internal unsafe delegate* glNamedProgramLocalParameters4fvEXT; + internal unsafe delegate* glNamedProgramLocalParametersI4ivEXT; + internal unsafe delegate* glNamedProgramLocalParametersI4uivEXT; + internal unsafe delegate* glNamedProgramStringEXT; + internal unsafe delegate* glNamedRenderbufferStorage; + internal unsafe delegate* glNamedRenderbufferStorageEXT; + internal unsafe delegate* glNamedRenderbufferStorageMultisample; + internal unsafe delegate* glNamedRenderbufferStorageMultisampleAdvancedAMD; + internal unsafe delegate* glNamedRenderbufferStorageMultisampleCoverageEXT; + internal unsafe delegate* glNamedRenderbufferStorageMultisampleEXT; + internal unsafe delegate* glNamedStringARB; + internal unsafe delegate* glNewObjectBufferATI; + internal unsafe delegate* glNormal3fVertex3fSUN; + internal unsafe delegate* glNormal3fVertex3fvSUN; + internal unsafe delegate* glNormal3hNV; + internal unsafe delegate* glNormal3hvNV; + internal unsafe delegate* glNormal3xOES; + internal unsafe delegate* glNormal3xvOES; + internal unsafe delegate* glNormalFormatNV; + internal unsafe delegate* glNormalPointerEXT; + internal unsafe delegate* glNormalPointerListIBM; + internal unsafe delegate* glNormalPointervINTEL; + internal unsafe delegate* glNormalStream3bATI; + internal unsafe delegate* glNormalStream3bvATI; + internal unsafe delegate* glNormalStream3dATI; + internal unsafe delegate* glNormalStream3dvATI; + internal unsafe delegate* glNormalStream3fATI; + internal unsafe delegate* glNormalStream3fvATI; + internal unsafe delegate* glNormalStream3iATI; + internal unsafe delegate* glNormalStream3ivATI; + internal unsafe delegate* glNormalStream3sATI; + internal unsafe delegate* glNormalStream3svATI; + internal unsafe delegate* glObjectLabel; + internal unsafe delegate* glObjectPtrLabel; + internal unsafe delegate* glObjectPurgeableAPPLE; + internal unsafe delegate* glObjectUnpurgeableAPPLE; + internal unsafe delegate* glOrthofOES; + internal unsafe delegate* glOrthoxOES; + internal unsafe delegate* glPNTrianglesfATI; + internal unsafe delegate* glPNTrianglesiATI; + internal unsafe delegate* glPassTexCoordATI; + internal unsafe delegate* glPassThroughxOES; + internal unsafe delegate* glPatchParameterfv; + internal unsafe delegate* glPatchParameteri; + internal unsafe delegate* glPathCommandsNV; + internal unsafe delegate* glPathCoordsNV; + internal unsafe delegate* glPathCoverDepthFuncNV; + internal unsafe delegate* glPathDashArrayNV; + internal unsafe delegate* glPathGlyphIndexArrayNV; + internal unsafe delegate* glPathGlyphIndexRangeNV; + internal unsafe delegate* glPathGlyphRangeNV; + internal unsafe delegate* glPathGlyphsNV; + internal unsafe delegate* glPathMemoryGlyphIndexArrayNV; + internal unsafe delegate* glPathParameterfNV; + internal unsafe delegate* glPathParameterfvNV; + internal unsafe delegate* glPathParameteriNV; + internal unsafe delegate* glPathParameterivNV; + internal unsafe delegate* glPathStencilDepthOffsetNV; + internal unsafe delegate* glPathStencilFuncNV; + internal unsafe delegate* glPathStringNV; + internal unsafe delegate* glPathSubCommandsNV; + internal unsafe delegate* glPathSubCoordsNV; + internal unsafe delegate* glPauseTransformFeedback; + internal unsafe delegate* glPauseTransformFeedbackNV; + internal unsafe delegate* glPixelDataRangeNV; + internal unsafe delegate* glPixelMapx; + internal unsafe delegate* glPixelStoref; + internal unsafe delegate* glPixelStorei; + internal unsafe delegate* glPixelStorex; + internal unsafe delegate* glPixelTexGenParameterfSGIS; + internal unsafe delegate* glPixelTexGenParameterfvSGIS; + internal unsafe delegate* glPixelTexGenParameteriSGIS; + internal unsafe delegate* glPixelTexGenParameterivSGIS; + internal unsafe delegate* glPixelTexGenSGIX; + internal unsafe delegate* glPixelTransferxOES; + internal unsafe delegate* glPixelTransformParameterfEXT; + internal unsafe delegate* glPixelTransformParameterfvEXT; + internal unsafe delegate* glPixelTransformParameteriEXT; + internal unsafe delegate* glPixelTransformParameterivEXT; + internal unsafe delegate* glPixelZoomxOES; + internal unsafe delegate* glPointAlongPathNV; + internal unsafe delegate* glPointParameterf; + internal unsafe delegate* glPointParameterfARB; + internal unsafe delegate* glPointParameterfEXT; + internal unsafe delegate* glPointParameterfSGIS; + internal unsafe delegate* glPointParameterfv; + internal unsafe delegate* glPointParameterfvARB; + internal unsafe delegate* glPointParameterfvEXT; + internal unsafe delegate* glPointParameterfvSGIS; + internal unsafe delegate* glPointParameteri; + internal unsafe delegate* glPointParameteriNV; + internal unsafe delegate* glPointParameteriv; + internal unsafe delegate* glPointParameterivNV; + internal unsafe delegate* glPointParameterxvOES; + internal unsafe delegate* glPointSize; + internal unsafe delegate* glPointSizexOES; + internal unsafe delegate* glPollAsyncSGIX; + internal unsafe delegate* glPollInstrumentsSGIX; + internal unsafe delegate* glPolygonMode; + internal unsafe delegate* glPolygonOffset; + internal unsafe delegate* glPolygonOffsetClamp; + internal unsafe delegate* glPolygonOffsetClampEXT; + internal unsafe delegate* glPolygonOffsetEXT; + internal unsafe delegate* glPolygonOffsetxOES; + internal unsafe delegate* glPopDebugGroup; + internal unsafe delegate* glPopGroupMarkerEXT; + internal unsafe delegate* glPresentFrameDualFillNV; + internal unsafe delegate* glPresentFrameKeyedNV; + internal unsafe delegate* glPrimitiveBoundingBoxARB; + internal unsafe delegate* glPrimitiveRestartIndex; + internal unsafe delegate* glPrimitiveRestartIndexNV; + internal unsafe delegate* glPrimitiveRestartNV; + internal unsafe delegate* glPrioritizeTexturesEXT; + internal unsafe delegate* glPrioritizeTexturesxOES; + internal unsafe delegate* glProgramBinary; + internal unsafe delegate* glProgramBufferParametersIivNV; + internal unsafe delegate* glProgramBufferParametersIuivNV; + internal unsafe delegate* glProgramBufferParametersfvNV; + internal unsafe delegate* glProgramEnvParameter4dARB; + internal unsafe delegate* glProgramEnvParameter4dvARB; + internal unsafe delegate* glProgramEnvParameter4fARB; + internal unsafe delegate* glProgramEnvParameter4fvARB; + internal unsafe delegate* glProgramEnvParameterI4iNV; + internal unsafe delegate* glProgramEnvParameterI4ivNV; + internal unsafe delegate* glProgramEnvParameterI4uiNV; + internal unsafe delegate* glProgramEnvParameterI4uivNV; + internal unsafe delegate* glProgramEnvParameters4fvEXT; + internal unsafe delegate* glProgramEnvParametersI4ivNV; + internal unsafe delegate* glProgramEnvParametersI4uivNV; + internal unsafe delegate* glProgramLocalParameter4dARB; + internal unsafe delegate* glProgramLocalParameter4dvARB; + internal unsafe delegate* glProgramLocalParameter4fARB; + internal unsafe delegate* glProgramLocalParameter4fvARB; + internal unsafe delegate* glProgramLocalParameterI4iNV; + internal unsafe delegate* glProgramLocalParameterI4ivNV; + internal unsafe delegate* glProgramLocalParameterI4uiNV; + internal unsafe delegate* glProgramLocalParameterI4uivNV; + internal unsafe delegate* glProgramLocalParameters4fvEXT; + internal unsafe delegate* glProgramLocalParametersI4ivNV; + internal unsafe delegate* glProgramLocalParametersI4uivNV; + internal unsafe delegate* glProgramNamedParameter4dNV; + internal unsafe delegate* glProgramNamedParameter4dvNV; + internal unsafe delegate* glProgramNamedParameter4fNV; + internal unsafe delegate* glProgramNamedParameter4fvNV; + internal unsafe delegate* glProgramParameter4dNV; + internal unsafe delegate* glProgramParameter4dvNV; + internal unsafe delegate* glProgramParameter4fNV; + internal unsafe delegate* glProgramParameter4fvNV; + internal unsafe delegate* glProgramParameteri; + internal unsafe delegate* glProgramParameteriARB; + internal unsafe delegate* glProgramParameteriEXT; + internal unsafe delegate* glProgramParameters4dvNV; + internal unsafe delegate* glProgramParameters4fvNV; + internal unsafe delegate* glProgramPathFragmentInputGenNV; + internal unsafe delegate* glProgramStringARB; + internal unsafe delegate* glProgramSubroutineParametersuivNV; + internal unsafe delegate* glProgramUniform1d; + internal unsafe delegate* glProgramUniform1dEXT; + internal unsafe delegate* glProgramUniform1dv; + internal unsafe delegate* glProgramUniform1dvEXT; + internal unsafe delegate* glProgramUniform1f; + internal unsafe delegate* glProgramUniform1fEXT; + internal unsafe delegate* glProgramUniform1fv; + internal unsafe delegate* glProgramUniform1fvEXT; + internal unsafe delegate* glProgramUniform1i; + internal unsafe delegate* glProgramUniform1i64ARB; + internal unsafe delegate* glProgramUniform1i64NV; + internal unsafe delegate* glProgramUniform1i64vARB; + internal unsafe delegate* glProgramUniform1i64vNV; + internal unsafe delegate* glProgramUniform1iEXT; + internal unsafe delegate* glProgramUniform1iv; + internal unsafe delegate* glProgramUniform1ivEXT; + internal unsafe delegate* glProgramUniform1ui; + internal unsafe delegate* glProgramUniform1ui64ARB; + internal unsafe delegate* glProgramUniform1ui64NV; + internal unsafe delegate* glProgramUniform1ui64vARB; + internal unsafe delegate* glProgramUniform1ui64vNV; + internal unsafe delegate* glProgramUniform1uiEXT; + internal unsafe delegate* glProgramUniform1uiv; + internal unsafe delegate* glProgramUniform1uivEXT; + internal unsafe delegate* glProgramUniform2d; + internal unsafe delegate* glProgramUniform2dEXT; + internal unsafe delegate* glProgramUniform2dv; + internal unsafe delegate* glProgramUniform2dvEXT; + internal unsafe delegate* glProgramUniform2f; + internal unsafe delegate* glProgramUniform2fEXT; + internal unsafe delegate* glProgramUniform2fv; + internal unsafe delegate* glProgramUniform2fvEXT; + internal unsafe delegate* glProgramUniform2i; + internal unsafe delegate* glProgramUniform2i64ARB; + internal unsafe delegate* glProgramUniform2i64NV; + internal unsafe delegate* glProgramUniform2i64vARB; + internal unsafe delegate* glProgramUniform2i64vNV; + internal unsafe delegate* glProgramUniform2iEXT; + internal unsafe delegate* glProgramUniform2iv; + internal unsafe delegate* glProgramUniform2ivEXT; + internal unsafe delegate* glProgramUniform2ui; + internal unsafe delegate* glProgramUniform2ui64ARB; + internal unsafe delegate* glProgramUniform2ui64NV; + internal unsafe delegate* glProgramUniform2ui64vARB; + internal unsafe delegate* glProgramUniform2ui64vNV; + internal unsafe delegate* glProgramUniform2uiEXT; + internal unsafe delegate* glProgramUniform2uiv; + internal unsafe delegate* glProgramUniform2uivEXT; + internal unsafe delegate* glProgramUniform3d; + internal unsafe delegate* glProgramUniform3dEXT; + internal unsafe delegate* glProgramUniform3dv; + internal unsafe delegate* glProgramUniform3dvEXT; + internal unsafe delegate* glProgramUniform3f; + internal unsafe delegate* glProgramUniform3fEXT; + internal unsafe delegate* glProgramUniform3fv; + internal unsafe delegate* glProgramUniform3fvEXT; + internal unsafe delegate* glProgramUniform3i; + internal unsafe delegate* glProgramUniform3i64ARB; + internal unsafe delegate* glProgramUniform3i64NV; + internal unsafe delegate* glProgramUniform3i64vARB; + internal unsafe delegate* glProgramUniform3i64vNV; + internal unsafe delegate* glProgramUniform3iEXT; + internal unsafe delegate* glProgramUniform3iv; + internal unsafe delegate* glProgramUniform3ivEXT; + internal unsafe delegate* glProgramUniform3ui; + internal unsafe delegate* glProgramUniform3ui64ARB; + internal unsafe delegate* glProgramUniform3ui64NV; + internal unsafe delegate* glProgramUniform3ui64vARB; + internal unsafe delegate* glProgramUniform3ui64vNV; + internal unsafe delegate* glProgramUniform3uiEXT; + internal unsafe delegate* glProgramUniform3uiv; + internal unsafe delegate* glProgramUniform3uivEXT; + internal unsafe delegate* glProgramUniform4d; + internal unsafe delegate* glProgramUniform4dEXT; + internal unsafe delegate* glProgramUniform4dv; + internal unsafe delegate* glProgramUniform4dvEXT; + internal unsafe delegate* glProgramUniform4f; + internal unsafe delegate* glProgramUniform4fEXT; + internal unsafe delegate* glProgramUniform4fv; + internal unsafe delegate* glProgramUniform4fvEXT; + internal unsafe delegate* glProgramUniform4i; + internal unsafe delegate* glProgramUniform4i64ARB; + internal unsafe delegate* glProgramUniform4i64NV; + internal unsafe delegate* glProgramUniform4i64vARB; + internal unsafe delegate* glProgramUniform4i64vNV; + internal unsafe delegate* glProgramUniform4iEXT; + internal unsafe delegate* glProgramUniform4iv; + internal unsafe delegate* glProgramUniform4ivEXT; + internal unsafe delegate* glProgramUniform4ui; + internal unsafe delegate* glProgramUniform4ui64ARB; + internal unsafe delegate* glProgramUniform4ui64NV; + internal unsafe delegate* glProgramUniform4ui64vARB; + internal unsafe delegate* glProgramUniform4ui64vNV; + internal unsafe delegate* glProgramUniform4uiEXT; + internal unsafe delegate* glProgramUniform4uiv; + internal unsafe delegate* glProgramUniform4uivEXT; + internal unsafe delegate* glProgramUniformHandleui64ARB; + internal unsafe delegate* glProgramUniformHandleui64NV; + internal unsafe delegate* glProgramUniformHandleui64vARB; + internal unsafe delegate* glProgramUniformHandleui64vNV; + internal unsafe delegate* glProgramUniformMatrix2dv; + internal unsafe delegate* glProgramUniformMatrix2dvEXT; + internal unsafe delegate* glProgramUniformMatrix2fv; + internal unsafe delegate* glProgramUniformMatrix2fvEXT; + internal unsafe delegate* glProgramUniformMatrix2x3dv; + internal unsafe delegate* glProgramUniformMatrix2x3dvEXT; + internal unsafe delegate* glProgramUniformMatrix2x3fv; + internal unsafe delegate* glProgramUniformMatrix2x3fvEXT; + internal unsafe delegate* glProgramUniformMatrix2x4dv; + internal unsafe delegate* glProgramUniformMatrix2x4dvEXT; + internal unsafe delegate* glProgramUniformMatrix2x4fv; + internal unsafe delegate* glProgramUniformMatrix2x4fvEXT; + internal unsafe delegate* glProgramUniformMatrix3dv; + internal unsafe delegate* glProgramUniformMatrix3dvEXT; + internal unsafe delegate* glProgramUniformMatrix3fv; + internal unsafe delegate* glProgramUniformMatrix3fvEXT; + internal unsafe delegate* glProgramUniformMatrix3x2dv; + internal unsafe delegate* glProgramUniformMatrix3x2dvEXT; + internal unsafe delegate* glProgramUniformMatrix3x2fv; + internal unsafe delegate* glProgramUniformMatrix3x2fvEXT; + internal unsafe delegate* glProgramUniformMatrix3x4dv; + internal unsafe delegate* glProgramUniformMatrix3x4dvEXT; + internal unsafe delegate* glProgramUniformMatrix3x4fv; + internal unsafe delegate* glProgramUniformMatrix3x4fvEXT; + internal unsafe delegate* glProgramUniformMatrix4dv; + internal unsafe delegate* glProgramUniformMatrix4dvEXT; + internal unsafe delegate* glProgramUniformMatrix4fv; + internal unsafe delegate* glProgramUniformMatrix4fvEXT; + internal unsafe delegate* glProgramUniformMatrix4x2dv; + internal unsafe delegate* glProgramUniformMatrix4x2dvEXT; + internal unsafe delegate* glProgramUniformMatrix4x2fv; + internal unsafe delegate* glProgramUniformMatrix4x2fvEXT; + internal unsafe delegate* glProgramUniformMatrix4x3dv; + internal unsafe delegate* glProgramUniformMatrix4x3dvEXT; + internal unsafe delegate* glProgramUniformMatrix4x3fv; + internal unsafe delegate* glProgramUniformMatrix4x3fvEXT; + internal unsafe delegate* glProgramUniformui64NV; + internal unsafe delegate* glProgramUniformui64vNV; + internal unsafe delegate* glProgramVertexLimitNV; + internal unsafe delegate* glProvokingVertex; + internal unsafe delegate* glProvokingVertexEXT; + internal unsafe delegate* glPushClientAttribDefaultEXT; + internal unsafe delegate* glPushDebugGroup; + internal unsafe delegate* glPushGroupMarkerEXT; + internal unsafe delegate* glQueryCounter; + internal unsafe delegate* glQueryMatrixxOES; + internal unsafe delegate* glQueryObjectParameteruiAMD; + internal unsafe delegate* glQueryResourceNV; + internal unsafe delegate* glQueryResourceTagNV; + internal unsafe delegate* glRasterPos2xOES; + internal unsafe delegate* glRasterPos2xvOES; + internal unsafe delegate* glRasterPos3xOES; + internal unsafe delegate* glRasterPos3xvOES; + internal unsafe delegate* glRasterPos4xOES; + internal unsafe delegate* glRasterPos4xvOES; + internal unsafe delegate* glRasterSamplesEXT; + internal unsafe delegate* glReadBuffer; + internal unsafe delegate* glReadInstrumentsSGIX; + internal unsafe delegate* glReadPixels; + internal unsafe delegate* glReadnPixels; + internal unsafe delegate* glReadnPixelsARB; + internal unsafe delegate* glRectxOES; + internal unsafe delegate* glRectxvOES; + internal unsafe delegate* glReferencePlaneSGIX; + internal unsafe delegate* glReleaseKeyedMutexWin32EXT; + internal unsafe delegate* glReleaseShaderCompiler; + internal unsafe delegate* glRenderGpuMaskNV; + internal unsafe delegate* glRenderbufferStorage; + internal unsafe delegate* glRenderbufferStorageEXT; + internal unsafe delegate* glRenderbufferStorageMultisample; + internal unsafe delegate* glRenderbufferStorageMultisampleAdvancedAMD; + internal unsafe delegate* glRenderbufferStorageMultisampleCoverageNV; + internal unsafe delegate* glRenderbufferStorageMultisampleEXT; + internal unsafe delegate* glReplacementCodePointerSUN; + internal unsafe delegate* glReplacementCodeubSUN; + internal unsafe delegate* glReplacementCodeubvSUN; + internal unsafe delegate* glReplacementCodeuiColor3fVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiColor3fVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiColor4fNormal3fVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiColor4fNormal3fVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiColor4ubVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiColor4ubVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiNormal3fVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiNormal3fVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiSUN; + internal unsafe delegate* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiTexCoord2fVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiTexCoord2fVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuiVertex3fSUN; + internal unsafe delegate* glReplacementCodeuiVertex3fvSUN; + internal unsafe delegate* glReplacementCodeuivSUN; + internal unsafe delegate* glReplacementCodeusSUN; + internal unsafe delegate* glReplacementCodeusvSUN; + internal unsafe delegate* glRequestResidentProgramsNV; + internal unsafe delegate* glResetHistogramEXT; + internal unsafe delegate* glResetMemoryObjectParameterNV; + internal unsafe delegate* glResetMinmaxEXT; + internal unsafe delegate* glResizeBuffersMESA; + internal unsafe delegate* glResolveDepthValuesNV; + internal unsafe delegate* glResumeTransformFeedback; + internal unsafe delegate* glResumeTransformFeedbackNV; + internal unsafe delegate* glRotatexOES; + internal unsafe delegate* glSampleCoverage; + internal unsafe delegate* glSampleCoverageARB; + internal unsafe delegate* glSampleMapATI; + internal unsafe delegate* glSampleMaskEXT; + internal unsafe delegate* glSampleMaskIndexedNV; + internal unsafe delegate* glSampleMaskSGIS; + internal unsafe delegate* glSampleMaski; + internal unsafe delegate* glSamplePatternEXT; + internal unsafe delegate* glSamplePatternSGIS; + internal unsafe delegate* glSamplerParameterIiv; + internal unsafe delegate* glSamplerParameterIuiv; + internal unsafe delegate* glSamplerParameterf; + internal unsafe delegate* glSamplerParameterfv; + internal unsafe delegate* glSamplerParameteri; + internal unsafe delegate* glSamplerParameteriv; + internal unsafe delegate* glScalexOES; + internal unsafe delegate* glScissor; + internal unsafe delegate* glScissorArrayv; + internal unsafe delegate* glScissorExclusiveArrayvNV; + internal unsafe delegate* glScissorExclusiveNV; + internal unsafe delegate* glScissorIndexed; + internal unsafe delegate* glScissorIndexedv; + internal unsafe delegate* glSecondaryColor3bEXT; + internal unsafe delegate* glSecondaryColor3bvEXT; + internal unsafe delegate* glSecondaryColor3dEXT; + internal unsafe delegate* glSecondaryColor3dvEXT; + internal unsafe delegate* glSecondaryColor3fEXT; + internal unsafe delegate* glSecondaryColor3fvEXT; + internal unsafe delegate* glSecondaryColor3hNV; + internal unsafe delegate* glSecondaryColor3hvNV; + internal unsafe delegate* glSecondaryColor3iEXT; + internal unsafe delegate* glSecondaryColor3ivEXT; + internal unsafe delegate* glSecondaryColor3sEXT; + internal unsafe delegate* glSecondaryColor3svEXT; + internal unsafe delegate* glSecondaryColor3ubEXT; + internal unsafe delegate* glSecondaryColor3ubvEXT; + internal unsafe delegate* glSecondaryColor3uiEXT; + internal unsafe delegate* glSecondaryColor3uivEXT; + internal unsafe delegate* glSecondaryColor3usEXT; + internal unsafe delegate* glSecondaryColor3usvEXT; + internal unsafe delegate* glSecondaryColorFormatNV; + internal unsafe delegate* glSecondaryColorPointerEXT; + internal unsafe delegate* glSecondaryColorPointerListIBM; + internal unsafe delegate* glSelectPerfMonitorCountersAMD; + internal unsafe delegate* glSemaphoreParameterivNV; + internal unsafe delegate* glSemaphoreParameterui64vEXT; + internal unsafe delegate* glSeparableFilter2DEXT; + internal unsafe delegate* glSetFenceAPPLE; + internal unsafe delegate* glSetFenceNV; + internal unsafe delegate* glSetFragmentShaderConstantATI; + internal unsafe delegate* glSetInvariantEXT; + internal unsafe delegate* glSetLocalConstantEXT; + internal unsafe delegate* glSetMultisamplefvAMD; + internal unsafe delegate* glShaderBinary; + internal unsafe delegate* glShaderOp1EXT; + internal unsafe delegate* glShaderOp2EXT; + internal unsafe delegate* glShaderOp3EXT; + internal unsafe delegate* unmanaged[Stdcall] glShaderSource; + internal unsafe delegate* glShaderSourceARB; + internal unsafe delegate* glShaderStorageBlockBinding; + internal unsafe delegate* glShadingRateImageBarrierNV; + internal unsafe delegate* glShadingRateImagePaletteNV; + internal unsafe delegate* glShadingRateSampleOrderCustomNV; + internal unsafe delegate* glShadingRateSampleOrderNV; + internal unsafe delegate* glSharpenTexFuncSGIS; + internal unsafe delegate* glSignalSemaphoreEXT; + internal unsafe delegate* glSignalSemaphoreui64NVX; + internal unsafe delegate* glSignalVkFenceNV; + internal unsafe delegate* glSignalVkSemaphoreNV; + internal unsafe delegate* glSpecializeShader; + internal unsafe delegate* glSpecializeShaderARB; + internal unsafe delegate* glSpriteParameterfSGIX; + internal unsafe delegate* glSpriteParameterfvSGIX; + internal unsafe delegate* glSpriteParameteriSGIX; + internal unsafe delegate* glSpriteParameterivSGIX; + internal unsafe delegate* glStartInstrumentsSGIX; + internal unsafe delegate* glStateCaptureNV; + internal unsafe delegate* glStencilClearTagEXT; + internal unsafe delegate* glStencilFillPathInstancedNV; + internal unsafe delegate* glStencilFillPathNV; + internal unsafe delegate* glStencilFunc; + internal unsafe delegate* glStencilFuncSeparate; + internal unsafe delegate* glStencilFuncSeparateATI; + internal unsafe delegate* glStencilMask; + internal unsafe delegate* glStencilMaskSeparate; + internal unsafe delegate* glStencilOp; + internal unsafe delegate* glStencilOpSeparate; + internal unsafe delegate* glStencilOpSeparateATI; + internal unsafe delegate* glStencilOpValueAMD; + internal unsafe delegate* glStencilStrokePathInstancedNV; + internal unsafe delegate* glStencilStrokePathNV; + internal unsafe delegate* glStencilThenCoverFillPathInstancedNV; + internal unsafe delegate* glStencilThenCoverFillPathNV; + internal unsafe delegate* glStencilThenCoverStrokePathInstancedNV; + internal unsafe delegate* glStencilThenCoverStrokePathNV; + internal unsafe delegate* glStopInstrumentsSGIX; + internal unsafe delegate* glStringMarkerGREMEDY; + internal unsafe delegate* glSubpixelPrecisionBiasNV; + internal unsafe delegate* glSwizzleEXT; + internal unsafe delegate* glSyncTextureINTEL; + internal unsafe delegate* glTagSampleBufferSGIX; + internal unsafe delegate* glTangent3bEXT; + internal unsafe delegate* glTangent3bvEXT; + internal unsafe delegate* glTangent3dEXT; + internal unsafe delegate* glTangent3dvEXT; + internal unsafe delegate* glTangent3fEXT; + internal unsafe delegate* glTangent3fvEXT; + internal unsafe delegate* glTangent3iEXT; + internal unsafe delegate* glTangent3ivEXT; + internal unsafe delegate* glTangent3sEXT; + internal unsafe delegate* glTangent3svEXT; + internal unsafe delegate* glTangentPointerEXT; + internal unsafe delegate* glTbufferMask3DFX; + internal unsafe delegate* glTessellationFactorAMD; + internal unsafe delegate* glTessellationModeAMD; + internal unsafe delegate* glTestFenceAPPLE; + internal unsafe delegate* glTestFenceNV; + internal unsafe delegate* glTestObjectAPPLE; + internal unsafe delegate* glTexAttachMemoryNV; + internal unsafe delegate* glTexBuffer; + internal unsafe delegate* glTexBufferARB; + internal unsafe delegate* glTexBufferEXT; + internal unsafe delegate* glTexBufferRange; + internal unsafe delegate* glTexBumpParameterfvATI; + internal unsafe delegate* glTexBumpParameterivATI; + internal unsafe delegate* glTexCoord1bOES; + internal unsafe delegate* glTexCoord1bvOES; + internal unsafe delegate* glTexCoord1hNV; + internal unsafe delegate* glTexCoord1hvNV; + internal unsafe delegate* glTexCoord1xOES; + internal unsafe delegate* glTexCoord1xvOES; + internal unsafe delegate* glTexCoord2bOES; + internal unsafe delegate* glTexCoord2bvOES; + internal unsafe delegate* glTexCoord2fColor3fVertex3fSUN; + internal unsafe delegate* glTexCoord2fColor3fVertex3fvSUN; + internal unsafe delegate* glTexCoord2fColor4fNormal3fVertex3fSUN; + internal unsafe delegate* glTexCoord2fColor4fNormal3fVertex3fvSUN; + internal unsafe delegate* glTexCoord2fColor4ubVertex3fSUN; + internal unsafe delegate* glTexCoord2fColor4ubVertex3fvSUN; + internal unsafe delegate* glTexCoord2fNormal3fVertex3fSUN; + internal unsafe delegate* glTexCoord2fNormal3fVertex3fvSUN; + internal unsafe delegate* glTexCoord2fVertex3fSUN; + internal unsafe delegate* glTexCoord2fVertex3fvSUN; + internal unsafe delegate* glTexCoord2hNV; + internal unsafe delegate* glTexCoord2hvNV; + internal unsafe delegate* glTexCoord2xOES; + internal unsafe delegate* glTexCoord2xvOES; + internal unsafe delegate* glTexCoord3bOES; + internal unsafe delegate* glTexCoord3bvOES; + internal unsafe delegate* glTexCoord3hNV; + internal unsafe delegate* glTexCoord3hvNV; + internal unsafe delegate* glTexCoord3xOES; + internal unsafe delegate* glTexCoord3xvOES; + internal unsafe delegate* glTexCoord4bOES; + internal unsafe delegate* glTexCoord4bvOES; + internal unsafe delegate* glTexCoord4fColor4fNormal3fVertex4fSUN; + internal unsafe delegate* glTexCoord4fColor4fNormal3fVertex4fvSUN; + internal unsafe delegate* glTexCoord4fVertex4fSUN; + internal unsafe delegate* glTexCoord4fVertex4fvSUN; + internal unsafe delegate* glTexCoord4hNV; + internal unsafe delegate* glTexCoord4hvNV; + internal unsafe delegate* glTexCoord4xOES; + internal unsafe delegate* glTexCoord4xvOES; + internal unsafe delegate* glTexCoordFormatNV; + internal unsafe delegate* glTexCoordPointerEXT; + internal unsafe delegate* glTexCoordPointerListIBM; + internal unsafe delegate* glTexCoordPointervINTEL; + internal unsafe delegate* glTexEnvxOES; + internal unsafe delegate* glTexEnvxvOES; + internal unsafe delegate* glTexFilterFuncSGIS; + internal unsafe delegate* glTexGenxOES; + internal unsafe delegate* glTexGenxvOES; + internal unsafe delegate* glTexImage1D; + internal unsafe delegate* glTexImage2D; + internal unsafe delegate* glTexImage2DMultisample; + internal unsafe delegate* glTexImage2DMultisampleCoverageNV; + internal unsafe delegate* glTexImage3D; + internal unsafe delegate* glTexImage3DEXT; + internal unsafe delegate* glTexImage3DMultisample; + internal unsafe delegate* glTexImage3DMultisampleCoverageNV; + internal unsafe delegate* glTexImage4DSGIS; + internal unsafe delegate* glTexPageCommitmentARB; + internal unsafe delegate* glTexPageCommitmentMemNV; + internal unsafe delegate* glTexParameterIiv; + internal unsafe delegate* glTexParameterIivEXT; + internal unsafe delegate* glTexParameterIuiv; + internal unsafe delegate* glTexParameterIuivEXT; + internal unsafe delegate* glTexParameterf; + internal unsafe delegate* glTexParameterfv; + internal unsafe delegate* glTexParameteri; + internal unsafe delegate* glTexParameteriv; + internal unsafe delegate* glTexParameterxOES; + internal unsafe delegate* glTexParameterxvOES; + internal unsafe delegate* glTexRenderbufferNV; + internal unsafe delegate* glTexStorage1D; + internal unsafe delegate* glTexStorage1DEXT; + internal unsafe delegate* glTexStorage2D; + internal unsafe delegate* glTexStorage2DEXT; + internal unsafe delegate* glTexStorage2DMultisample; + internal unsafe delegate* glTexStorage3D; + internal unsafe delegate* glTexStorage3DEXT; + internal unsafe delegate* glTexStorage3DMultisample; + internal unsafe delegate* glTexStorageMem1DEXT; + internal unsafe delegate* glTexStorageMem2DEXT; + internal unsafe delegate* glTexStorageMem2DMultisampleEXT; + internal unsafe delegate* glTexStorageMem3DEXT; + internal unsafe delegate* glTexStorageMem3DMultisampleEXT; + internal unsafe delegate* glTexStorageSparseAMD; + internal unsafe delegate* glTexSubImage1D; + internal unsafe delegate* glTexSubImage1DEXT; + internal unsafe delegate* glTexSubImage2D; + internal unsafe delegate* glTexSubImage2DEXT; + internal unsafe delegate* glTexSubImage3D; + internal unsafe delegate* glTexSubImage3DEXT; + internal unsafe delegate* glTexSubImage4DSGIS; + internal unsafe delegate* glTextureAttachMemoryNV; + internal unsafe delegate* glTextureBarrier; + internal unsafe delegate* glTextureBarrierNV; + internal unsafe delegate* glTextureBuffer; + internal unsafe delegate* glTextureBufferEXT; + internal unsafe delegate* glTextureBufferRange; + internal unsafe delegate* glTextureBufferRangeEXT; + internal unsafe delegate* glTextureColorMaskSGIS; + internal unsafe delegate* glTextureImage1DEXT; + internal unsafe delegate* glTextureImage2DEXT; + internal unsafe delegate* glTextureImage2DMultisampleCoverageNV; + internal unsafe delegate* glTextureImage2DMultisampleNV; + internal unsafe delegate* glTextureImage3DEXT; + internal unsafe delegate* glTextureImage3DMultisampleCoverageNV; + internal unsafe delegate* glTextureImage3DMultisampleNV; + internal unsafe delegate* glTextureLightEXT; + internal unsafe delegate* glTextureMaterialEXT; + internal unsafe delegate* glTextureNormalEXT; + internal unsafe delegate* glTexturePageCommitmentEXT; + internal unsafe delegate* glTexturePageCommitmentMemNV; + internal unsafe delegate* glTextureParameterIiv; + internal unsafe delegate* glTextureParameterIivEXT; + internal unsafe delegate* glTextureParameterIuiv; + internal unsafe delegate* glTextureParameterIuivEXT; + internal unsafe delegate* glTextureParameterf; + internal unsafe delegate* glTextureParameterfEXT; + internal unsafe delegate* glTextureParameterfv; + internal unsafe delegate* glTextureParameterfvEXT; + internal unsafe delegate* glTextureParameteri; + internal unsafe delegate* glTextureParameteriEXT; + internal unsafe delegate* glTextureParameteriv; + internal unsafe delegate* glTextureParameterivEXT; + internal unsafe delegate* glTextureRangeAPPLE; + internal unsafe delegate* glTextureRenderbufferEXT; + internal unsafe delegate* glTextureStorage1D; + internal unsafe delegate* glTextureStorage1DEXT; + internal unsafe delegate* glTextureStorage2D; + internal unsafe delegate* glTextureStorage2DEXT; + internal unsafe delegate* glTextureStorage2DMultisample; + internal unsafe delegate* glTextureStorage2DMultisampleEXT; + internal unsafe delegate* glTextureStorage3D; + internal unsafe delegate* glTextureStorage3DEXT; + internal unsafe delegate* glTextureStorage3DMultisample; + internal unsafe delegate* glTextureStorage3DMultisampleEXT; + internal unsafe delegate* glTextureStorageMem1DEXT; + internal unsafe delegate* glTextureStorageMem2DEXT; + internal unsafe delegate* glTextureStorageMem2DMultisampleEXT; + internal unsafe delegate* glTextureStorageMem3DEXT; + internal unsafe delegate* glTextureStorageMem3DMultisampleEXT; + internal unsafe delegate* glTextureStorageSparseAMD; + internal unsafe delegate* glTextureSubImage1D; + internal unsafe delegate* glTextureSubImage1DEXT; + internal unsafe delegate* glTextureSubImage2D; + internal unsafe delegate* glTextureSubImage2DEXT; + internal unsafe delegate* glTextureSubImage3D; + internal unsafe delegate* glTextureSubImage3DEXT; + internal unsafe delegate* glTextureView; + internal unsafe delegate* glTrackMatrixNV; + internal unsafe delegate* glTransformFeedbackAttribsNV; + internal unsafe delegate* glTransformFeedbackBufferBase; + internal unsafe delegate* glTransformFeedbackBufferRange; + internal unsafe delegate* glTransformFeedbackStreamAttribsNV; + internal unsafe delegate* glTransformFeedbackVaryings; + internal unsafe delegate* glTransformFeedbackVaryingsEXT; + internal unsafe delegate* glTransformFeedbackVaryingsNV; + internal unsafe delegate* glTransformPathNV; + internal unsafe delegate* glTranslatexOES; + internal unsafe delegate* glUniform1d; + internal unsafe delegate* glUniform1dv; + internal unsafe delegate* glUniform1f; + internal unsafe delegate* glUniform1fARB; + internal unsafe delegate* glUniform1fv; + internal unsafe delegate* glUniform1fvARB; + internal unsafe delegate* glUniform1i; + internal unsafe delegate* glUniform1i64ARB; + internal unsafe delegate* glUniform1i64NV; + internal unsafe delegate* glUniform1i64vARB; + internal unsafe delegate* glUniform1i64vNV; + internal unsafe delegate* glUniform1iARB; + internal unsafe delegate* glUniform1iv; + internal unsafe delegate* glUniform1ivARB; + internal unsafe delegate* glUniform1ui; + internal unsafe delegate* glUniform1ui64ARB; + internal unsafe delegate* glUniform1ui64NV; + internal unsafe delegate* glUniform1ui64vARB; + internal unsafe delegate* glUniform1ui64vNV; + internal unsafe delegate* glUniform1uiEXT; + internal unsafe delegate* glUniform1uiv; + internal unsafe delegate* glUniform1uivEXT; + internal unsafe delegate* glUniform2d; + internal unsafe delegate* glUniform2dv; + internal unsafe delegate* glUniform2f; + internal unsafe delegate* glUniform2fARB; + internal unsafe delegate* glUniform2fv; + internal unsafe delegate* glUniform2fvARB; + internal unsafe delegate* glUniform2i; + internal unsafe delegate* glUniform2i64ARB; + internal unsafe delegate* glUniform2i64NV; + internal unsafe delegate* glUniform2i64vARB; + internal unsafe delegate* glUniform2i64vNV; + internal unsafe delegate* glUniform2iARB; + internal unsafe delegate* glUniform2iv; + internal unsafe delegate* glUniform2ivARB; + internal unsafe delegate* glUniform2ui; + internal unsafe delegate* glUniform2ui64ARB; + internal unsafe delegate* glUniform2ui64NV; + internal unsafe delegate* glUniform2ui64vARB; + internal unsafe delegate* glUniform2ui64vNV; + internal unsafe delegate* glUniform2uiEXT; + internal unsafe delegate* glUniform2uiv; + internal unsafe delegate* glUniform2uivEXT; + internal unsafe delegate* glUniform3d; + internal unsafe delegate* glUniform3dv; + internal unsafe delegate* glUniform3f; + internal unsafe delegate* glUniform3fARB; + internal unsafe delegate* glUniform3fv; + internal unsafe delegate* glUniform3fvARB; + internal unsafe delegate* glUniform3i; + internal unsafe delegate* glUniform3i64ARB; + internal unsafe delegate* glUniform3i64NV; + internal unsafe delegate* glUniform3i64vARB; + internal unsafe delegate* glUniform3i64vNV; + internal unsafe delegate* glUniform3iARB; + internal unsafe delegate* glUniform3iv; + internal unsafe delegate* glUniform3ivARB; + internal unsafe delegate* glUniform3ui; + internal unsafe delegate* glUniform3ui64ARB; + internal unsafe delegate* glUniform3ui64NV; + internal unsafe delegate* glUniform3ui64vARB; + internal unsafe delegate* glUniform3ui64vNV; + internal unsafe delegate* glUniform3uiEXT; + internal unsafe delegate* glUniform3uiv; + internal unsafe delegate* glUniform3uivEXT; + internal unsafe delegate* glUniform4d; + internal unsafe delegate* glUniform4dv; + internal unsafe delegate* glUniform4f; + internal unsafe delegate* glUniform4fARB; + internal unsafe delegate* glUniform4fv; + internal unsafe delegate* glUniform4fvARB; + internal unsafe delegate* glUniform4i; + internal unsafe delegate* glUniform4i64ARB; + internal unsafe delegate* glUniform4i64NV; + internal unsafe delegate* glUniform4i64vARB; + internal unsafe delegate* glUniform4i64vNV; + internal unsafe delegate* glUniform4iARB; + internal unsafe delegate* glUniform4iv; + internal unsafe delegate* glUniform4ivARB; + internal unsafe delegate* glUniform4ui; + internal unsafe delegate* glUniform4ui64ARB; + internal unsafe delegate* glUniform4ui64NV; + internal unsafe delegate* glUniform4ui64vARB; + internal unsafe delegate* glUniform4ui64vNV; + internal unsafe delegate* glUniform4uiEXT; + internal unsafe delegate* glUniform4uiv; + internal unsafe delegate* glUniform4uivEXT; + internal unsafe delegate* glUniformBlockBinding; + internal unsafe delegate* glUniformBufferEXT; + internal unsafe delegate* glUniformHandleui64ARB; + internal unsafe delegate* glUniformHandleui64NV; + internal unsafe delegate* glUniformHandleui64vARB; + internal unsafe delegate* glUniformHandleui64vNV; + internal unsafe delegate* glUniformMatrix2dv; + internal unsafe delegate* glUniformMatrix2fv; + internal unsafe delegate* glUniformMatrix2fvARB; + internal unsafe delegate* glUniformMatrix2x3dv; + internal unsafe delegate* glUniformMatrix2x3fv; + internal unsafe delegate* glUniformMatrix2x4dv; + internal unsafe delegate* glUniformMatrix2x4fv; + internal unsafe delegate* glUniformMatrix3dv; + internal unsafe delegate* glUniformMatrix3fv; + internal unsafe delegate* glUniformMatrix3fvARB; + internal unsafe delegate* glUniformMatrix3x2dv; + internal unsafe delegate* glUniformMatrix3x2fv; + internal unsafe delegate* glUniformMatrix3x4dv; + internal unsafe delegate* glUniformMatrix3x4fv; + internal unsafe delegate* glUniformMatrix4dv; + internal unsafe delegate* glUniformMatrix4fv; + internal unsafe delegate* glUniformMatrix4fvARB; + internal unsafe delegate* glUniformMatrix4x2dv; + internal unsafe delegate* glUniformMatrix4x2fv; + internal unsafe delegate* glUniformMatrix4x3dv; + internal unsafe delegate* glUniformMatrix4x3fv; + internal unsafe delegate* glUniformSubroutinesuiv; + internal unsafe delegate* glUniformui64NV; + internal unsafe delegate* glUniformui64vNV; + internal unsafe delegate* glUnlockArraysEXT; + internal unsafe delegate* glUnmapBuffer; + internal unsafe delegate* glUnmapBufferARB; + internal unsafe delegate* glUnmapNamedBuffer; + internal unsafe delegate* glUnmapNamedBufferEXT; + internal unsafe delegate* glUnmapObjectBufferATI; + internal unsafe delegate* glUnmapTexture2DINTEL; + internal unsafe delegate* glUpdateObjectBufferATI; + internal unsafe delegate* glUploadGpuMaskNVX; + internal unsafe delegate* glUseProgram; + internal unsafe delegate* glUseProgramObjectARB; + internal unsafe delegate* glUseProgramStages; + internal unsafe delegate* glUseShaderProgramEXT; + internal unsafe delegate* glVDPAUFiniNV; + internal unsafe delegate* glVDPAUGetSurfaceivNV; + internal unsafe delegate* glVDPAUInitNV; + internal unsafe delegate* glVDPAUIsSurfaceNV; + internal unsafe delegate* glVDPAUMapSurfacesNV; + internal unsafe delegate* glVDPAURegisterOutputSurfaceNV; + internal unsafe delegate* glVDPAURegisterVideoSurfaceNV; + internal unsafe delegate* glVDPAURegisterVideoSurfaceWithPictureStructureNV; + internal unsafe delegate* glVDPAUSurfaceAccessNV; + internal unsafe delegate* glVDPAUUnmapSurfacesNV; + internal unsafe delegate* glVDPAUUnregisterSurfaceNV; + internal unsafe delegate* glValidateProgram; + internal unsafe delegate* glValidateProgramARB; + internal unsafe delegate* glValidateProgramPipeline; + internal unsafe delegate* glVariantArrayObjectATI; + internal unsafe delegate* glVariantPointerEXT; + internal unsafe delegate* glVariantbvEXT; + internal unsafe delegate* glVariantdvEXT; + internal unsafe delegate* glVariantfvEXT; + internal unsafe delegate* glVariantivEXT; + internal unsafe delegate* glVariantsvEXT; + internal unsafe delegate* glVariantubvEXT; + internal unsafe delegate* glVariantuivEXT; + internal unsafe delegate* glVariantusvEXT; + internal unsafe delegate* glVertex2bOES; + internal unsafe delegate* glVertex2bvOES; + internal unsafe delegate* glVertex2hNV; + internal unsafe delegate* glVertex2hvNV; + internal unsafe delegate* glVertex2xOES; + internal unsafe delegate* glVertex2xvOES; + internal unsafe delegate* glVertex3bOES; + internal unsafe delegate* glVertex3bvOES; + internal unsafe delegate* glVertex3hNV; + internal unsafe delegate* glVertex3hvNV; + internal unsafe delegate* glVertex3xOES; + internal unsafe delegate* glVertex3xvOES; + internal unsafe delegate* glVertex4bOES; + internal unsafe delegate* glVertex4bvOES; + internal unsafe delegate* glVertex4hNV; + internal unsafe delegate* glVertex4hvNV; + internal unsafe delegate* glVertex4xOES; + internal unsafe delegate* glVertex4xvOES; + internal unsafe delegate* glVertexArrayAttribBinding; + internal unsafe delegate* glVertexArrayAttribFormat; + internal unsafe delegate* glVertexArrayAttribIFormat; + internal unsafe delegate* glVertexArrayAttribLFormat; + internal unsafe delegate* glVertexArrayBindVertexBufferEXT; + internal unsafe delegate* glVertexArrayBindingDivisor; + internal unsafe delegate* glVertexArrayColorOffsetEXT; + internal unsafe delegate* glVertexArrayEdgeFlagOffsetEXT; + internal unsafe delegate* glVertexArrayElementBuffer; + internal unsafe delegate* glVertexArrayFogCoordOffsetEXT; + internal unsafe delegate* glVertexArrayIndexOffsetEXT; + internal unsafe delegate* glVertexArrayMultiTexCoordOffsetEXT; + internal unsafe delegate* glVertexArrayNormalOffsetEXT; + internal unsafe delegate* glVertexArrayParameteriAPPLE; + internal unsafe delegate* glVertexArrayRangeAPPLE; + internal unsafe delegate* glVertexArrayRangeNV; + internal unsafe delegate* glVertexArraySecondaryColorOffsetEXT; + internal unsafe delegate* glVertexArrayTexCoordOffsetEXT; + internal unsafe delegate* glVertexArrayVertexAttribBindingEXT; + internal unsafe delegate* glVertexArrayVertexAttribDivisorEXT; + internal unsafe delegate* glVertexArrayVertexAttribFormatEXT; + internal unsafe delegate* glVertexArrayVertexAttribIFormatEXT; + internal unsafe delegate* glVertexArrayVertexAttribIOffsetEXT; + internal unsafe delegate* glVertexArrayVertexAttribLFormatEXT; + internal unsafe delegate* glVertexArrayVertexAttribLOffsetEXT; + internal unsafe delegate* glVertexArrayVertexAttribOffsetEXT; + internal unsafe delegate* glVertexArrayVertexBindingDivisorEXT; + internal unsafe delegate* glVertexArrayVertexBuffer; + internal unsafe delegate* glVertexArrayVertexBuffers; + internal unsafe delegate* glVertexArrayVertexOffsetEXT; + internal unsafe delegate* glVertexAttrib1d; + internal unsafe delegate* glVertexAttrib1dARB; + internal unsafe delegate* glVertexAttrib1dNV; + internal unsafe delegate* glVertexAttrib1dv; + internal unsafe delegate* glVertexAttrib1dvARB; + internal unsafe delegate* glVertexAttrib1dvNV; + internal unsafe delegate* glVertexAttrib1f; + internal unsafe delegate* glVertexAttrib1fARB; + internal unsafe delegate* glVertexAttrib1fNV; + internal unsafe delegate* glVertexAttrib1fv; + internal unsafe delegate* glVertexAttrib1fvARB; + internal unsafe delegate* glVertexAttrib1fvNV; + internal unsafe delegate* glVertexAttrib1hNV; + internal unsafe delegate* glVertexAttrib1hvNV; + internal unsafe delegate* glVertexAttrib1s; + internal unsafe delegate* glVertexAttrib1sARB; + internal unsafe delegate* glVertexAttrib1sNV; + internal unsafe delegate* glVertexAttrib1sv; + internal unsafe delegate* glVertexAttrib1svARB; + internal unsafe delegate* glVertexAttrib1svNV; + internal unsafe delegate* glVertexAttrib2d; + internal unsafe delegate* glVertexAttrib2dARB; + internal unsafe delegate* glVertexAttrib2dNV; + internal unsafe delegate* glVertexAttrib2dv; + internal unsafe delegate* glVertexAttrib2dvARB; + internal unsafe delegate* glVertexAttrib2dvNV; + internal unsafe delegate* glVertexAttrib2f; + internal unsafe delegate* glVertexAttrib2fARB; + internal unsafe delegate* glVertexAttrib2fNV; + internal unsafe delegate* glVertexAttrib2fv; + internal unsafe delegate* glVertexAttrib2fvARB; + internal unsafe delegate* glVertexAttrib2fvNV; + internal unsafe delegate* glVertexAttrib2hNV; + internal unsafe delegate* glVertexAttrib2hvNV; + internal unsafe delegate* glVertexAttrib2s; + internal unsafe delegate* glVertexAttrib2sARB; + internal unsafe delegate* glVertexAttrib2sNV; + internal unsafe delegate* glVertexAttrib2sv; + internal unsafe delegate* glVertexAttrib2svARB; + internal unsafe delegate* glVertexAttrib2svNV; + internal unsafe delegate* glVertexAttrib3d; + internal unsafe delegate* glVertexAttrib3dARB; + internal unsafe delegate* glVertexAttrib3dNV; + internal unsafe delegate* glVertexAttrib3dv; + internal unsafe delegate* glVertexAttrib3dvARB; + internal unsafe delegate* glVertexAttrib3dvNV; + internal unsafe delegate* glVertexAttrib3f; + internal unsafe delegate* glVertexAttrib3fARB; + internal unsafe delegate* glVertexAttrib3fNV; + internal unsafe delegate* glVertexAttrib3fv; + internal unsafe delegate* glVertexAttrib3fvARB; + internal unsafe delegate* glVertexAttrib3fvNV; + internal unsafe delegate* glVertexAttrib3hNV; + internal unsafe delegate* glVertexAttrib3hvNV; + internal unsafe delegate* glVertexAttrib3s; + internal unsafe delegate* glVertexAttrib3sARB; + internal unsafe delegate* glVertexAttrib3sNV; + internal unsafe delegate* glVertexAttrib3sv; + internal unsafe delegate* glVertexAttrib3svARB; + internal unsafe delegate* glVertexAttrib3svNV; + internal unsafe delegate* glVertexAttrib4Nbv; + internal unsafe delegate* glVertexAttrib4NbvARB; + internal unsafe delegate* glVertexAttrib4Niv; + internal unsafe delegate* glVertexAttrib4NivARB; + internal unsafe delegate* glVertexAttrib4Nsv; + internal unsafe delegate* glVertexAttrib4NsvARB; + internal unsafe delegate* glVertexAttrib4Nub; + internal unsafe delegate* glVertexAttrib4NubARB; + internal unsafe delegate* glVertexAttrib4Nubv; + internal unsafe delegate* glVertexAttrib4NubvARB; + internal unsafe delegate* glVertexAttrib4Nuiv; + internal unsafe delegate* glVertexAttrib4NuivARB; + internal unsafe delegate* glVertexAttrib4Nusv; + internal unsafe delegate* glVertexAttrib4NusvARB; + internal unsafe delegate* glVertexAttrib4bv; + internal unsafe delegate* glVertexAttrib4bvARB; + internal unsafe delegate* glVertexAttrib4d; + internal unsafe delegate* glVertexAttrib4dARB; + internal unsafe delegate* glVertexAttrib4dNV; + internal unsafe delegate* glVertexAttrib4dv; + internal unsafe delegate* glVertexAttrib4dvARB; + internal unsafe delegate* glVertexAttrib4dvNV; + internal unsafe delegate* glVertexAttrib4f; + internal unsafe delegate* glVertexAttrib4fARB; + internal unsafe delegate* glVertexAttrib4fNV; + internal unsafe delegate* glVertexAttrib4fv; + internal unsafe delegate* glVertexAttrib4fvARB; + internal unsafe delegate* glVertexAttrib4fvNV; + internal unsafe delegate* glVertexAttrib4hNV; + internal unsafe delegate* glVertexAttrib4hvNV; + internal unsafe delegate* glVertexAttrib4iv; + internal unsafe delegate* glVertexAttrib4ivARB; + internal unsafe delegate* glVertexAttrib4s; + internal unsafe delegate* glVertexAttrib4sARB; + internal unsafe delegate* glVertexAttrib4sNV; + internal unsafe delegate* glVertexAttrib4sv; + internal unsafe delegate* glVertexAttrib4svARB; + internal unsafe delegate* glVertexAttrib4svNV; + internal unsafe delegate* glVertexAttrib4ubNV; + internal unsafe delegate* glVertexAttrib4ubv; + internal unsafe delegate* glVertexAttrib4ubvARB; + internal unsafe delegate* glVertexAttrib4ubvNV; + internal unsafe delegate* glVertexAttrib4uiv; + internal unsafe delegate* glVertexAttrib4uivARB; + internal unsafe delegate* glVertexAttrib4usv; + internal unsafe delegate* glVertexAttrib4usvARB; + internal unsafe delegate* glVertexAttribArrayObjectATI; + internal unsafe delegate* glVertexAttribBinding; + internal unsafe delegate* glVertexAttribDivisor; + internal unsafe delegate* glVertexAttribDivisorARB; + internal unsafe delegate* glVertexAttribFormat; + internal unsafe delegate* glVertexAttribFormatNV; + internal unsafe delegate* glVertexAttribI1i; + internal unsafe delegate* glVertexAttribI1iEXT; + internal unsafe delegate* glVertexAttribI1iv; + internal unsafe delegate* glVertexAttribI1ivEXT; + internal unsafe delegate* glVertexAttribI1ui; + internal unsafe delegate* glVertexAttribI1uiEXT; + internal unsafe delegate* glVertexAttribI1uiv; + internal unsafe delegate* glVertexAttribI1uivEXT; + internal unsafe delegate* glVertexAttribI2i; + internal unsafe delegate* glVertexAttribI2iEXT; + internal unsafe delegate* glVertexAttribI2iv; + internal unsafe delegate* glVertexAttribI2ivEXT; + internal unsafe delegate* glVertexAttribI2ui; + internal unsafe delegate* glVertexAttribI2uiEXT; + internal unsafe delegate* glVertexAttribI2uiv; + internal unsafe delegate* glVertexAttribI2uivEXT; + internal unsafe delegate* glVertexAttribI3i; + internal unsafe delegate* glVertexAttribI3iEXT; + internal unsafe delegate* glVertexAttribI3iv; + internal unsafe delegate* glVertexAttribI3ivEXT; + internal unsafe delegate* glVertexAttribI3ui; + internal unsafe delegate* glVertexAttribI3uiEXT; + internal unsafe delegate* glVertexAttribI3uiv; + internal unsafe delegate* glVertexAttribI3uivEXT; + internal unsafe delegate* glVertexAttribI4bv; + internal unsafe delegate* glVertexAttribI4bvEXT; + internal unsafe delegate* glVertexAttribI4i; + internal unsafe delegate* glVertexAttribI4iEXT; + internal unsafe delegate* glVertexAttribI4iv; + internal unsafe delegate* glVertexAttribI4ivEXT; + internal unsafe delegate* glVertexAttribI4sv; + internal unsafe delegate* glVertexAttribI4svEXT; + internal unsafe delegate* glVertexAttribI4ubv; + internal unsafe delegate* glVertexAttribI4ubvEXT; + internal unsafe delegate* glVertexAttribI4ui; + internal unsafe delegate* glVertexAttribI4uiEXT; + internal unsafe delegate* glVertexAttribI4uiv; + internal unsafe delegate* glVertexAttribI4uivEXT; + internal unsafe delegate* glVertexAttribI4usv; + internal unsafe delegate* glVertexAttribI4usvEXT; + internal unsafe delegate* glVertexAttribIFormat; + internal unsafe delegate* glVertexAttribIFormatNV; + internal unsafe delegate* glVertexAttribIPointer; + internal unsafe delegate* glVertexAttribIPointerEXT; + internal unsafe delegate* glVertexAttribL1d; + internal unsafe delegate* glVertexAttribL1dEXT; + internal unsafe delegate* glVertexAttribL1dv; + internal unsafe delegate* glVertexAttribL1dvEXT; + internal unsafe delegate* glVertexAttribL1i64NV; + internal unsafe delegate* glVertexAttribL1i64vNV; + internal unsafe delegate* glVertexAttribL1ui64ARB; + internal unsafe delegate* glVertexAttribL1ui64NV; + internal unsafe delegate* glVertexAttribL1ui64vARB; + internal unsafe delegate* glVertexAttribL1ui64vNV; + internal unsafe delegate* glVertexAttribL2d; + internal unsafe delegate* glVertexAttribL2dEXT; + internal unsafe delegate* glVertexAttribL2dv; + internal unsafe delegate* glVertexAttribL2dvEXT; + internal unsafe delegate* glVertexAttribL2i64NV; + internal unsafe delegate* glVertexAttribL2i64vNV; + internal unsafe delegate* glVertexAttribL2ui64NV; + internal unsafe delegate* glVertexAttribL2ui64vNV; + internal unsafe delegate* glVertexAttribL3d; + internal unsafe delegate* glVertexAttribL3dEXT; + internal unsafe delegate* glVertexAttribL3dv; + internal unsafe delegate* glVertexAttribL3dvEXT; + internal unsafe delegate* glVertexAttribL3i64NV; + internal unsafe delegate* glVertexAttribL3i64vNV; + internal unsafe delegate* glVertexAttribL3ui64NV; + internal unsafe delegate* glVertexAttribL3ui64vNV; + internal unsafe delegate* glVertexAttribL4d; + internal unsafe delegate* glVertexAttribL4dEXT; + internal unsafe delegate* glVertexAttribL4dv; + internal unsafe delegate* glVertexAttribL4dvEXT; + internal unsafe delegate* glVertexAttribL4i64NV; + internal unsafe delegate* glVertexAttribL4i64vNV; + internal unsafe delegate* glVertexAttribL4ui64NV; + internal unsafe delegate* glVertexAttribL4ui64vNV; + internal unsafe delegate* glVertexAttribLFormat; + internal unsafe delegate* glVertexAttribLFormatNV; + internal unsafe delegate* glVertexAttribLPointer; + internal unsafe delegate* glVertexAttribLPointerEXT; + internal unsafe delegate* glVertexAttribP1ui; + internal unsafe delegate* glVertexAttribP1uiv; + internal unsafe delegate* glVertexAttribP2ui; + internal unsafe delegate* glVertexAttribP2uiv; + internal unsafe delegate* glVertexAttribP3ui; + internal unsafe delegate* glVertexAttribP3uiv; + internal unsafe delegate* glVertexAttribP4ui; + internal unsafe delegate* glVertexAttribP4uiv; + internal unsafe delegate* glVertexAttribParameteriAMD; + internal unsafe delegate* glVertexAttribPointer; + internal unsafe delegate* glVertexAttribPointerARB; + internal unsafe delegate* glVertexAttribPointerNV; + internal unsafe delegate* glVertexAttribs1dvNV; + internal unsafe delegate* glVertexAttribs1fvNV; + internal unsafe delegate* glVertexAttribs1hvNV; + internal unsafe delegate* glVertexAttribs1svNV; + internal unsafe delegate* glVertexAttribs2dvNV; + internal unsafe delegate* glVertexAttribs2fvNV; + internal unsafe delegate* glVertexAttribs2hvNV; + internal unsafe delegate* glVertexAttribs2svNV; + internal unsafe delegate* glVertexAttribs3dvNV; + internal unsafe delegate* glVertexAttribs3fvNV; + internal unsafe delegate* glVertexAttribs3hvNV; + internal unsafe delegate* glVertexAttribs3svNV; + internal unsafe delegate* glVertexAttribs4dvNV; + internal unsafe delegate* glVertexAttribs4fvNV; + internal unsafe delegate* glVertexAttribs4hvNV; + internal unsafe delegate* glVertexAttribs4svNV; + internal unsafe delegate* glVertexAttribs4ubvNV; + internal unsafe delegate* glVertexBindingDivisor; + internal unsafe delegate* glVertexBlendARB; + internal unsafe delegate* glVertexBlendEnvfATI; + internal unsafe delegate* glVertexBlendEnviATI; + internal unsafe delegate* glVertexFormatNV; + internal unsafe delegate* glVertexPointerEXT; + internal unsafe delegate* glVertexPointerListIBM; + internal unsafe delegate* glVertexPointervINTEL; + internal unsafe delegate* glVertexStream1dATI; + internal unsafe delegate* glVertexStream1dvATI; + internal unsafe delegate* glVertexStream1fATI; + internal unsafe delegate* glVertexStream1fvATI; + internal unsafe delegate* glVertexStream1iATI; + internal unsafe delegate* glVertexStream1ivATI; + internal unsafe delegate* glVertexStream1sATI; + internal unsafe delegate* glVertexStream1svATI; + internal unsafe delegate* glVertexStream2dATI; + internal unsafe delegate* glVertexStream2dvATI; + internal unsafe delegate* glVertexStream2fATI; + internal unsafe delegate* glVertexStream2fvATI; + internal unsafe delegate* glVertexStream2iATI; + internal unsafe delegate* glVertexStream2ivATI; + internal unsafe delegate* glVertexStream2sATI; + internal unsafe delegate* glVertexStream2svATI; + internal unsafe delegate* glVertexStream3dATI; + internal unsafe delegate* glVertexStream3dvATI; + internal unsafe delegate* glVertexStream3fATI; + internal unsafe delegate* glVertexStream3fvATI; + internal unsafe delegate* glVertexStream3iATI; + internal unsafe delegate* glVertexStream3ivATI; + internal unsafe delegate* glVertexStream3sATI; + internal unsafe delegate* glVertexStream3svATI; + internal unsafe delegate* glVertexStream4dATI; + internal unsafe delegate* glVertexStream4dvATI; + internal unsafe delegate* glVertexStream4fATI; + internal unsafe delegate* glVertexStream4fvATI; + internal unsafe delegate* glVertexStream4iATI; + internal unsafe delegate* glVertexStream4ivATI; + internal unsafe delegate* glVertexStream4sATI; + internal unsafe delegate* glVertexStream4svATI; + internal unsafe delegate* glVertexWeightPointerEXT; + internal unsafe delegate* glVertexWeightfEXT; + internal unsafe delegate* glVertexWeightfvEXT; + internal unsafe delegate* glVertexWeighthNV; + internal unsafe delegate* glVertexWeighthvNV; + internal unsafe delegate* glVideoCaptureNV; + internal unsafe delegate* glVideoCaptureStreamParameterdvNV; + internal unsafe delegate* glVideoCaptureStreamParameterfvNV; + internal unsafe delegate* glVideoCaptureStreamParameterivNV; + internal unsafe delegate* glViewport; + internal unsafe delegate* glViewportArrayv; + internal unsafe delegate* glViewportIndexedf; + internal unsafe delegate* glViewportIndexedfv; + internal unsafe delegate* glViewportPositionWScaleNV; + internal unsafe delegate* glViewportSwizzleNV; + internal unsafe delegate* glWaitSemaphoreEXT; + internal unsafe delegate* glWaitSemaphoreui64NVX; + internal unsafe delegate* glWaitSync; + internal unsafe delegate* glWaitVkSemaphoreNV; + internal unsafe delegate* glWeightPathsNV; + internal unsafe delegate* glWeightPointerARB; + internal unsafe delegate* glWeightbvARB; + internal unsafe delegate* glWeightdvARB; + internal unsafe delegate* glWeightfvARB; + internal unsafe delegate* glWeightivARB; + internal unsafe delegate* glWeightsvARB; + internal unsafe delegate* glWeightubvARB; + internal unsafe delegate* glWeightuivARB; + internal unsafe delegate* glWeightusvARB; + internal unsafe delegate* glWindowPos2dARB; + internal unsafe delegate* glWindowPos2dMESA; + internal unsafe delegate* glWindowPos2dvARB; + internal unsafe delegate* glWindowPos2dvMESA; + internal unsafe delegate* glWindowPos2fARB; + internal unsafe delegate* glWindowPos2fMESA; + internal unsafe delegate* glWindowPos2fvARB; + internal unsafe delegate* glWindowPos2fvMESA; + internal unsafe delegate* glWindowPos2iARB; + internal unsafe delegate* glWindowPos2iMESA; + internal unsafe delegate* glWindowPos2ivARB; + internal unsafe delegate* glWindowPos2ivMESA; + internal unsafe delegate* glWindowPos2sARB; + internal unsafe delegate* glWindowPos2sMESA; + internal unsafe delegate* glWindowPos2svARB; + internal unsafe delegate* glWindowPos2svMESA; + internal unsafe delegate* glWindowPos3dARB; + internal unsafe delegate* glWindowPos3dMESA; + internal unsafe delegate* glWindowPos3dvARB; + internal unsafe delegate* glWindowPos3dvMESA; + internal unsafe delegate* glWindowPos3fARB; + internal unsafe delegate* glWindowPos3fMESA; + internal unsafe delegate* glWindowPos3fvARB; + internal unsafe delegate* glWindowPos3fvMESA; + internal unsafe delegate* glWindowPos3iARB; + internal unsafe delegate* glWindowPos3iMESA; + internal unsafe delegate* glWindowPos3ivARB; + internal unsafe delegate* glWindowPos3ivMESA; + internal unsafe delegate* glWindowPos3sARB; + internal unsafe delegate* glWindowPos3sMESA; + internal unsafe delegate* glWindowPos3svARB; + internal unsafe delegate* glWindowPos3svMESA; + internal unsafe delegate* glWindowPos4dMESA; + internal unsafe delegate* glWindowPos4dvMESA; + internal unsafe delegate* glWindowPos4fMESA; + internal unsafe delegate* glWindowPos4fvMESA; + internal unsafe delegate* glWindowPos4iMESA; + internal unsafe delegate* glWindowPos4ivMESA; + internal unsafe delegate* glWindowPos4sMESA; + internal unsafe delegate* glWindowPos4svMESA; + internal unsafe delegate* glWindowRectanglesEXT; + internal unsafe delegate* glWriteMaskEXT; + + #endregion glapi + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/glEnum.cs b/StgSharp.Common/Graphics/OpenGL/glEnum.cs new file mode 100644 index 00000000..9ab945b4 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glEnum.cs @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glEnum" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System.Runtime.CompilerServices; + +namespace StgSharp.Graphics.OpenGL +{ + public enum PixelChannelLayout + { + + UByte = glConst.UNSIGNED_BYTE, + Byte = glConst.BYTE, + UShort = glConst.UNSIGNED_SHORT, + Short = glConst.SHORT, + UInt = glConst.UNSIGNED_INT, + Int = glConst.INT, + Float = glConst.FLOAT, + UByte332 = glConst.UNSIGNED_BYTE_3_3_2, + UByte233Rev = glConst.UNSIGNED_BYTE_2_3_3_REV, + UShort565 = glConst.UNSIGNED_SHORT_5_6_5, + UShort565Rev = glConst.UNSIGNED_SHORT_5_6_5_REV, + UShort4444 = glConst.UNSIGNED_SHORT_4_4_4_4, + UShort4444Rev = glConst.UNSIGNED_SHORT_4_4_4_4_REV, + UShort5551 = glConst.UNSIGNED_SHORT_5_5_5_1, + UShort1555Rev = glConst.UNSIGNED_SHORT_1_5_5_5_REV, + UInt8888 = glConst.UNSIGNED_INT_8_8_8_8, + UInt8888Rev = glConst.UNSIGNED_INT_8_8_8_8_REV, + UInt1010102 = glConst.UNSIGNED_INT_10_10_10_2, + UInt2101010Rev = glConst.UNSIGNED_INT_2_10_10_10_REV + + } + + public enum FaceMode + { + + Point = glConst.POINT, + Line = glConst.LINE, + Fill = glConst.FILL + + } + + public enum FrameBufferStatus + { + + Complete = glConst.FRAMEBUFFER_COMPLETE, // GL_FRAMEBUFFER_COMPLETE + IncompleteAttachment = glConst.FRAMEBUFFER_INCOMPLETE_ATTACHMENT, // GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT + IncompleteMissingAttachment = glConst.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, // GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT + IncompleteDrawBuffer = glConst.FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER, // GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER + IncompleteReadBuffer = glConst.FRAMEBUFFER_INCOMPLETE_READ_BUFFER, // GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER + Unsupported = glConst.FRAMEBUFFER_UNSUPPORTED, // GL_FRAMEBUFFER_UNSUPPORTED + IncompleteMultiSample = glConst.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE, // GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE + IncompleteLayerTargets = glConst.FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS // GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS + + } + + public enum FrameBufferChannel + { + + STENCIL_INDEX = glConst.STENCIL_INDEX, + DEPTH_COMPONENT = glConst.DEPTH_COMPONENT, + DEPTH_STENCIL = glConst.DEPTH_STENCIL, + RED = glConst.RED, + GREEN = glConst.GREEN, + BLUE = glConst.BLUE, + RGB = glConst.RGB, + BGR = glConst.BGR, + RGBA = glConst.RGBA, + BGRA = glConst.BGRA + + } + + public enum FrameBufferAttachment + { + + Color = glConst.COLOR_ATTACHMENT0, + Depth = glConst.DEPTH_ATTACHMENT, + Stencil = glConst.STENCIL_ATTACHMENT, + DepthAndStencil = glConst.DEPTH_STENCIL_ATTACHMENT, + + } + + public enum Texture2DTarget + { + + Texture2D = glConst.TEXTURE_2D, + ProxyTexture2D = glConst.PROXY_TEXTURE_2D, + Texture1DArray = glConst.TEXTURE_1D_ARRAY, + ProxyTexture1DArray = glConst.PROXY_TEXTURE_1D_ARRAY, + TextureRectangle = glConst.TEXTURE_RECTANGLE, + ProxyTextureRectangle = glConst.PROXY_TEXTURE_RECTANGLE, + TextureCubeMapPositiveX = glConst.TEXTURE_CUBE_MAP_POSITIVE_X, + TextureCubeMapNegativeX = glConst.TEXTURE_CUBE_MAP_NEGATIVE_X, + TextureCubeMapPositiveY = glConst.TEXTURE_CUBE_MAP_POSITIVE_Y, + TextureCubeMapNegativeY = glConst.TEXTURE_CUBE_MAP_NEGATIVE_Y, + TextureCubeMapPositiveZ = glConst.TEXTURE_CUBE_MAP_POSITIVE_Z, + TextureCubeMapNegativeZ = glConst.TEXTURE_CUBE_MAP_NEGATIVE_Z, + ProxyTextureCubeMap = glConst.PROXY_TEXTURE_CUBE_MAP + + } + + public enum RenderBufferInternalFormat : uint + { + + RGBA8 = glConst.RGBA8, + Depth24_Stencil8 = glConst.DEPTH24_STENCIL8, + + } + + public enum glOperation : uint + { + + StencilTest = glConst.STENCIL_TEST, + DepthTest = glConst.DEPTH_TEST, + PolygonOffsetFill = glConst.POLYGON_OFFSET_FILL, + PolygonOffsetLine = glConst.POLYGON_OFFSET_LINE, + PolygonOffsetPoint = glConst.POLYGON_OFFSET_POINT, + + } + + #pragma warning disable CA1008 + public enum ShaderType : int + #pragma warning restore CA1008 + { + + Fragment = glConst.FRAGMENT_SHADER, + Vertex = glConst.VERTEX_SHADER, + Compute = glConst.COMPUTE_SHADER, + Geometry = glConst.GEOMETRY_SHADER, + + } + + #pragma warning disable CA1008 + public enum BufferType : int + #pragma warning restore CA1008 + { + + ArrayBuffer = glConst.ARRAY_BUFFER, + ElementArrayBuffer = glConst.ELEMENT_ARRAY_BUFFER, + AtomicCounterBuffer = glConst.ATOMIC_COUNTER_BUFFER, + CopyHeadBuffer = glConst.COPY_READ_BUFFER, + COPY_WRITE_BUFFER = glConst.COPY_WRITE_BUFFER, + DISPATCH_INDIRECT_BUFFER = glConst.DISPATCH_INDIRECT_BUFFER, + DRAW_INDIRECT_BUFFER = glConst.DRAW_INDIRECT_BUFFER, + PIXEL_PACK_BUFFER = glConst.PIXEL_PACK_BUFFER, + PIXEL_UNPACK_BUFFER = glConst.PIXEL_UNPACK_BUFFER, + QUERY_BUFFER = glConst.QUERY_BUFFER, + ShaderStorageBuffer = glConst.SHADER_STORAGE_BUFFER, + TEXTURE_BUFFER = glConst.TEXTURE_BUFFER, + TRANSFORM_FEEDBACK_BUFFER = glConst.TRANSFORM_FEEDBACK_BUFFER, + UNIFORM_BUFFER = glConst.UNIFORM_BUFFER, + + } + + #pragma warning disable CA1008 + public enum BufferUsage : int + #pragma warning restore CA1008 + { + + StreamDraw = 0x88E0, + StreamRead = 0x88E1, + StreamCopy = 0x88E2, + StaticDraw = 0x88E4, + StaticRead = 0x88E5, + StaticCopy = 0x88E6, + DynamicDraw = 0x88E8, + DynamicRead = 0x88E9, + DynamicCopy = 0x88EA + + } + + public enum MaskBufferBit + { + + COLOR = glConst.COLOR_BUFFER_BIT, + DEPTH = glConst.DEPTH_BUFFER_BIT, + STENCIL = glConst.STENCIL_BUFFER_BIT, + + } + + public enum GeometryType : uint + { + + POINTS = 0x0000, + LINES = 0x0001, + LINE_LOOP = 0x0002, + LINE_STRIP = 0x0003, + TRIANGLES = 0x0004, + TRIANGLE_STRIP = 0x0005, + TRIANGLE_FAN = 0x0006 + + } + + public enum TextureFiltering + { + + Nearest = 0x2600, + Linear = 0x2601 + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/glException.cs b/StgSharp.Common/Graphics/OpenGL/glException.cs new file mode 100644 index 00000000..2cf1906b --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glException.cs @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glException" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + public sealed class GlErrorOverflowException : Exception + { + + public GlErrorOverflowException(int errorCount, uint errorCode) + : base( + "Too many opengl error detected at certain position. " + $"The amount of errors exceeds {errorCount}. " + $"Code of the last error is {errorCode}") { } + + } + + public sealed class GlExecutionException : Exception + { + + public GlExecutionException(uint errorCode) : base($"Critical OpenGL error: {errorCode}") { } + + } + + public sealed class GlArrayFormatException : Exception + { + + internal GlArrayFormatException(string message) : base(message) { } + + internal GlArrayFormatException(SerializationInfo info, StreamingContext context) : base(info, context) { } + + internal GlArrayFormatException(string message, Exception innerException) : base(message, innerException) { } + + public GlArrayFormatException(PixelChannelLayout layout, string arrayname) + : base($"{arrayname} cannot be used as layout of {layout}") { } + + } + + public static partial class GlHelper + { + + public static bool CheckArrayFormat(this Array array, PixelChannelLayout layout) + { + return layout switch + { + PixelChannelLayout.Byte or PixelChannelLayout.UByte332 or PixelChannelLayout.UByte233Rev => (array is byte[]) || + (array is sbyte[]), + PixelChannelLayout.Short => array is short[], + PixelChannelLayout.UShort => array is ushort[], + PixelChannelLayout.Int => array is int[], + PixelChannelLayout.Float => array is float[], + PixelChannelLayout.UShort4444 => (array is ushort[]) || (array is byte[]), + PixelChannelLayout.UByte => (array is byte[]) || (array is sbyte[]), + PixelChannelLayout.UInt => array is uint[], + PixelChannelLayout.UShort565 or + PixelChannelLayout.UShort565Rev or + PixelChannelLayout.UShort4444Rev or + PixelChannelLayout.UShort5551 or + PixelChannelLayout.UShort1555Rev => array is ushort[], + PixelChannelLayout.UInt8888Rev or + PixelChannelLayout.UInt1010102 or + PixelChannelLayout.UInt2101010Rev => array is int[], + PixelChannelLayout.UInt8888 => array is uint[] or byte[], + _ => false, + }; + } + + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/glFucntionSourceManager.cs b/StgSharp.Common/Graphics/OpenGL/glFucntionSourceManager.cs new file mode 100644 index 00000000..5d967a96 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glFucntionSourceManager.cs @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glFucntionSourceManager" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace StgSharp.Graphics.OpenGL +{ + public partial class OpenGLFunction + { + + private readonly int textureUnitCountGetter; + + public int TextureUnitCount + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => textureUnitCountGetter; + } + + private ConcurrentQueue UnusedTextureImageUint + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = []; + + internal void ReturnAvailableUnit(IEnumerable source) + { + int v = glConst.TEXTURE0 + TextureUnitCount; + foreach (TextureUnit unit in source) + { + if ((int)unit > v) { + throw new InvalidOperationException( + "Source contains texture unit beyond context support."); + } + } + } + + internal int TryGetAvailableTextureUnit(int count, out IEnumerable result) + { + result = new Queue(); + for (int i = 0; i < count; i++) + { + if (UnusedTextureImageUint.TryDequeue(out TextureUnit unit)) + { + (result as Queue)!.Enqueue(unit); + } else + { + return i; + } + } + return count; + } + + private ConcurrentQueue InitializeUnusedTextureImageUint() + { + ConcurrentQueue result = new ConcurrentQueue(); + for (int index = 0; index < TextureUnitCount; index++) { + result.Enqueue((TextureUnit)(glConst.TEXTURE0 + index)); + } + return result; + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/glFunction.cs b/StgSharp.Common/Graphics/OpenGL/glFunction.cs new file mode 100644 index 00000000..947e13db --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glFunction.cs @@ -0,0 +1,761 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glFunction" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics; +using StgSharp.Internal; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Numeric; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.ExceptionServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; + +namespace StgSharp.Graphics.OpenGL +{ + public unsafe partial class OpenGLFunction + { + + private static readonly Dictionary contextToGLMap = []; + private static readonly ThreadLocal _currentGL = new ThreadLocal(); + private OpenglContext* _context; + + private Lazy _attachmentColorRange; + + private OpenGLFunction() + { + textureUnitCountGetter = glConst.MAX_TEXTURE_IMAGE_UNITS; + UnusedTextureImageUint = []; + _attachmentColorRange = new Lazy( + () => { return GetMaskInteger((uint)glConst.MAX_COLOR_ATTACHMENTS); }); + } + + public int AttachmentColorRange + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _attachmentColorRange.Value; + } + + public static OpenGLFunction CurrentGL + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _currentGL.Value!; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal set => _currentGL.Value = value; + } + + internal IntPtr ContextHandle => (IntPtr)_context; + + protected ref OpenglContext Context + { + get + { + #if DEBUG + if ((IntPtr)_context == IntPtr.Zero) + { + throw new NullReferenceException(); + } + #endif + return ref (*_context); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void ActiveTextureUnit(uint type) + { + Context.glActiveTexture(type); + } + + [Conditional("DEBUG")] + public void Assert(bool shouldReportWhenNormal) + { + uint code = Context.glGetError(); + if (code != glConst.NO_ERROR) { + throw new GlExecutionException(code); + } + if (shouldReportWhenNormal) { + Console.WriteLine("OpenGL runs normally"); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AttachShader(GlHandle program, GlHandle shader) + { + Context.glAttachShader(program.Value, shader.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void BindBuffer(BufferType bufferType, GlHandle handle) + { + Context.glBindBuffer((uint)bufferType, handle.Value); + } + + /// + /// Bind a frame BufferHandle to a frame BufferHandle target Same function as glBindFramebuffer. + /// + /// + /// The frame BufferHandle target of the binding operation. + /// + /// + /// The handle of the frame BufferHandle object to bind. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void BindFrameBuffer(FrameBufferTarget target, GlHandle handle) + { + Context.glBindFramebuffer((uint)target, handle.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void BindRenderBuffer(GlHandle handle) + { + Context.glBindRenderbuffer(glConst.RENDERBUFFER, handle.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void BindTexture(uint type, GlHandle texture) + { + Context.glBindTexture(type, texture.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void BindVertexArray(GlHandle handle) + { + Context.glBindVertexArray(handle.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public FrameBufferStatus CheckFrameBufferStatus(FrameBufferTarget target) + { + return (FrameBufferStatus)Context.glCheckFramebufferStatus((uint)target); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Clear(MaskBufferBit mask) + { + Context.glClear((uint)mask); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void ClearColor(float R, float G, float B, float A) + { + Context.glClearColor(R, G, B, A); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void ClearError() + { + uint code = 0; + for (int i = 0; i < 1024; i++) + { + code = Context.glGetError(); + if (code == 0) { + return; + } + + // Console.WriteLine(code); + } + foreach (ProcessThread thread in Process.GetCurrentProcess().Threads) { + Debugger.Break(); + } + throw new GlErrorOverflowException(1024, code); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void ClearGraphicError() + { + while (Context.glGetError() != 0) { } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CombineFrameBufferRenderBuffer(FrameBufferAttachment attachment, GlHandle rboHandle) + { + Context.glFramebufferRenderbuffer(glConst.FRAMEBUFFER, (uint)attachment, glConst.RENDERBUFFER, + rboHandle.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CompileShader(GlHandle shaderhandle) + { + Context.glCompileShader(shaderhandle.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe GlHandle CreateGraphicProgram() + { + return GlHandle.Create(Context.glCreateProgram()); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public GlHandle CreateProgram() + { + return GlHandle.Create(Context.glCreateProgram()); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe GlHandle[] CreateProgram(int count) + { + GlHandle[] h = new GlHandle[count]; + for (int i = 0; i < count; i++) { + h.SetValue(i, Context.glCreateProgram()); + } + return h; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public GlHandle[] CreateShaderSet(int count, ShaderType type) + { + GlHandle[] ret = new GlHandle[count]; + uint t = (uint)type; + for (int i = 0; i < count; i++) + { + uint id = Context.glCreateShader(t); + if (id == 0) + { + uint error = Context.glGetError(); + throw new InvalidOperationException($"Failed in creating shader: {error}"); + } + ret[i] = GlHandle.Create(id); + } + return ret; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void DeleteBuffer(GlHandle handle) + { + Context.glDeleteBuffers(1, (uint*)&handle); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void DeleteBuffers(GlHandle[] handle) + { + if ((handle == null) || (handle.Length == 0)) { + throw new ArgumentNullException(nameof(handle)); + } + fixed (GlHandle* hptr = handle) + { + uint* iptr = (uint*)hptr; + for (int i = 0; i < handle.Length; i++) { + Context.glDeleteBuffers(1, iptr + i); + } + } + } + + /// + /// Delete a render BufferHandle object Very simlilar function as glDeleteRenderbuffers. The only + /// deifference is that this mehtod can only delete one renderbuffer at the same time. + /// + /// + /// Handle to BufferHandle to delete. + /// + public unsafe void DeleteRenderBuffer(GlHandle bufferHandle) + { + Context.glDeleteRenderbuffers(1, &bufferHandle.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void DeleteVertexArrays(GlHandle[] arrays) + { + fixed (GlHandle* hptr = arrays) + { + uint* iptr = (uint*)hptr; + for (int i = 0; i < arrays.Length; i++) { + Context.glDeleteVertexArrays(1, iptr + i); + } + } + } + + public void DepthMaskAccess(bool isWrite) + { + Context.glDepthMask(isWrite); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Disable(glOperation operation) + { + Context.glDisable((uint)operation); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void DrawArrays(GeometryType mode, int first, uint count) + { + Context.glDrawArrays((uint)mode, first, count); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void DrawElements(GeometryType mode, uint count, TypeCode type, IntPtr ptr) + { + uint a; + a = type switch + { + TypeCode.UInt32 => glConst.UNSIGNED_INT, + TypeCode.UInt16 => glConst.UNSIGNED_SHORT, + TypeCode.Byte => glConst.UNSIGNED_BYTE, + _ => throw new ArgumentException( + $"{$"{$"Parameter error in parameter {nameof(type)} method DrawElements. "}"}{$"{$"Only {typeof(uint).Name},{typeof(ushort).Name},{typeof(byte).Name} types are supported."}"}") + }; + Context.glDrawElements((uint)mode, count, a, (void*)ptr); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void DrawElementsInstanced(GeometryType mode, uint count, TypeCode type, IntPtr ptr, uint amount) + { + uint a; + switch (type) + { + case TypeCode.UInt32: + a = glConst.UNSIGNED_INT; + break; + + case TypeCode.UInt16: + a = glConst.UNSIGNED_SHORT; + break; + + case TypeCode.Byte: + a = glConst.UNSIGNED_BYTE; + break; + default: + DefaultLog.InternalWriteLog( + $"{$"Parameter error in parameter {nameof(type)} method DrawElements. "}{$"Only {typeof(uint).Name},{typeof(ushort).Name},{typeof(byte).Name} types are supported."}", + LogType.Error); + return; + } + Context.glDrawElementsInstanced((uint)mode, count, a, (void*)ptr, amount); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Enable(glOperation operation) + { + Context.glEnable((uint)operation); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void FrameBufferTexture2d( + FrameBufferTarget target, + uint attachment, + Texture2DTarget texTarget, + GlHandle textureHandle, + int level) + { + Context.glFramebufferTexture2D((uint)target, attachment, (uint)texTarget, textureHandle.Value, level); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe GlHandle[] GenBuffers(int count) + { + GlHandle[] h = new GlHandle[count]; + fixed (GlHandle* hptr = h) + { + for (int i = 0; i < count; i++) { + Context.glGenBuffers(count, ((uint*)hptr) + i); + } + } + return h; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void GenerateMipmap(Texture2DTarget target) + { + Context.glGenerateMipmap((uint)target); + } + + public unsafe GlHandle[] GenFrameBuffers(int count) + { + GlHandle[] h = new GlHandle[count]; + fixed (GlHandle* hptr = h) { + Context.glGenFramebuffers(1, (uint*)hptr); + } + return h; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe GlHandle[] GenRenderBuffer(int count) + { + GlHandle[] h = new GlHandle[count]; + fixed (GlHandle* hptr = h) { + Context.glGenRenderbuffers(count, (uint*)hptr); + } + return h; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe GlHandle[] GenTextures(int count) + { + GlHandle[] h = new GlHandle[count]; + fixed (GlHandle* hptr = h) { + Context.glGenTextures(count, (uint*)hptr); + } + return h; + } + + public unsafe GlHandle[] GenVertexArrays(int count) + { + GlHandle[] h = new GlHandle[count]; + fixed (GlHandle* hptr = h) { + Context.glGenVertexArrays(count, (uint*)hptr); + } + return h; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public uint GetError() + { + return Context.glGetError(); + } + + public unsafe int GetMaskInteger(uint statusCode) + { + int ret = 0; + Context.glGetIntegerv(statusCode, &ret); + return ret; + } + + public string GetShaderStatus(Shader s, int index, int key) + { + IntPtr sptr = IntPtr.Zero; + if (GraphicFramework.glCheckShaderStatus(ref Context, s.handle[index].Value, key, ref sptr) == 0) { + return Marshal.PtrToStringAnsi(sptr); + } + return string.Empty; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void GetTextureImage( + Texture2DTarget target, + int level, + ImageChannel channel, + PixelChannelLayout channelLayout, + T[] dataStream) + where T: unmanaged,INumber + { + fixed (T* tptr = dataStream) { + Context.glGetTexImage((uint)target, level, (uint)channel, (uint)channelLayout, tptr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void GetTextureLevelProperty(uint textureTypeMask, int level, uint propertyMask, out int propertyValue) + { + fixed (int* iptr = &propertyValue) { + Context.glGetTexLevelParameteriv(textureTypeMask, level, propertyMask, iptr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe GlHandle GetUniformLocation(GlHandle program, string name) + { + byte[] code = Encoding.UTF8.GetBytes(name); + fixed (byte* ptr = code) + { + int ret = Context.glGetUniformLocation(program.Value, ptr); + #if DEBUG + if ((ret == glConst.INVALID_OPERATION) || (ret == glConst.INVALID_VALUE)) + { + throw new InvalidOperationException(); + } + if (ret == -1) { + throw new UniformEmptyReferenceException(nameof(program), name); + } + #endif + return GlHandle.CreateSigned(ret); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void LoadShaderSource(GlHandle shaderHandle, byte[] codeStream) + { + fixed (byte* streamPtr = codeStream) { + Context.glShaderSource(shaderHandle.Value, 1, &streamPtr, (void*)0); + } + } + + public unsafe void LoadShaderSource(GlHandle shaderHandle, ReadOnlySpan codeStream) + { + fixed (char* streamPtr = codeStream) + { + byte* bptr = (byte*)streamPtr; + Context.glShaderSource(shaderHandle.Value, 1, &bptr, (void*)0); + } + } + + public unsafe void LoadShaderSource(GlHandle shaderHandle, ReadOnlySpan codeStream) + { + fixed (byte* streamPtr = codeStream) + { + byte* bptr = streamPtr; + Context.glShaderSource(shaderHandle.Value, 1, &bptr, (void*)0); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void PolygonMode(FaceMode mode) + { + Context.glPolygonMode(glConst.FRONT_AND_BACK, (uint)mode); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void PolygonOffset(float factor, float unit) + { + Context.glPolygonOffset(factor, unit); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void ReadPixels( + (int X, int Y) beginPosition, + (int width, int height) size, + FrameBufferChannel format, + PixelChannelLayout dataType, + ref byte[] stream) + { + fixed (byte* bptr = stream) { + Context.glReadPixels(beginPosition.X, beginPosition.Y, size.width, size.height, (uint)format, + (uint)dataType, bptr); + } + } + + public void RereadImage( + in Image i, + (int X, int Y) beginPosition, + FrameBufferChannel format, + PixelChannelLayout dataType) + { + byte[] pixels = i.PixelBuffer; + if (!pixels.CheckArrayFormat(dataType)) { + throw new GlArrayFormatException(dataType, "i.PixelArray"); + } + fixed (byte* bptr = pixels) { + Context.glReadPixels(beginPosition.X, beginPosition.Y, i.Width, i.Height, (uint)format, (uint)dataType, + bptr); + } + i.PixelUpdateCount++; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetBufferData(BufferType bufferType, T bufferData, BufferUsage usage) + where T: unmanaged,INumber + { + int size = Marshal.SizeOf(); + + T* p = &bufferData; + + Context.glBufferData((uint)bufferType, (IntPtr)size, (IntPtr)p, (uint)usage); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetBufferData(BufferType bufferType, T[] bufferArray, BufferUsage usage) + where T: unmanaged,INumber + { + int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); + if (bufferArray == null) { + return; + } + + fixed (void* bufferPtr = bufferArray) { + Context.glBufferData((uint)bufferType, (IntPtr)size, (IntPtr)bufferPtr, (uint)usage); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetBufferData(BufferType bufferType, ReadOnlySpan bufferSpan, BufferUsage usage) + where T: unmanaged,INumber + { + int size = bufferSpan.Length * Marshal.SizeOf(typeof(T)); + if (bufferSpan == null) { + return; + } + + fixed (void* bufferPtr = bufferSpan) { + Context.glBufferData((uint)bufferType, (IntPtr)size, (IntPtr)bufferPtr, (uint)usage); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetBufferData(BufferType bufferType, Span bufferArray, BufferUsage usage) + where T: unmanaged, INumber + { + int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); + if (bufferArray == null) { + return; + } + + + fixed (void* bufferPtr = bufferArray) { + Context.glBufferData((uint)bufferType, (IntPtr)size, (IntPtr)bufferPtr, (uint)usage); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetBufferVectorData(BufferType bufferType, ReadOnlySpan bufferSpan, BufferUsage usage) + where T: unmanaged, IUnmanagedVector + { + int size = bufferSpan.Length * Marshal.SizeOf(typeof(T)); + + fixed (void* bufferPtr = bufferSpan) { + Context.glBufferData((uint)bufferType, (IntPtr)size, (IntPtr)bufferPtr, (uint)usage); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetBufferVectorData(BufferType bufferType, T[] bufferArray, BufferUsage usage) + where T: unmanaged, IUnmanagedVector + { + int size = bufferArray.Length * Marshal.SizeOf(typeof(T)); + if (bufferArray == null) { + return; + } + fixed (void* bufferPtr = bufferArray) { + Context.glBufferData((uint)bufferType, (IntPtr)size, (IntPtr)bufferPtr, (uint)usage); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetRenderBufferStorage( + RenderBufferInternalFormat internalFormat, + (int width, int height) size) + { + Context.glRenderbufferStorage(glConst.RENDERBUFFER, (uint)internalFormat, size.width, size.height); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void SetRenderBufferStorage( + RenderBufferInternalFormat internalFormat, + (uint width, uint height) size) + { + Context.glRenderbufferStorage(glConst.RENDERBUFFER, (uint)internalFormat, (int)size.width, + (int)size.height); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetVertexAttribute(uint index, int size, TypeCode t, bool normalized, uint stride, int pointer) + { + uint type = GraphicFramework.GLtype[(int)t]; + Context.glVertexAttribPointer(index, size, type, normalized ? 1 : 0, stride, (void*)pointer); + Context.glEnableVertexAttribArray(index); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void TextureImage2d( + Texture2DTarget target, + int level, + ImageChannel sourceChannel, + uint width, + uint height, + ImageChannel targetChannel, + PixelChannelLayout type, + T[] pixels) + where T: unmanaged, INumber + { + fixed (T* tptr = pixels) + { + T* ptr = ((pixels == null) || (pixels.Length == 0)) ? (T*)IntPtr.Zero : tptr; + Context.glTexImage2D((uint)target, level, (uint)sourceChannel, width, height, 0, (uint)targetChannel, + (uint)type, tptr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void TextureImage2d( + Texture2DTarget target, + int level, + ImageChannel sourceChannel, + uint width, + uint height, + ImageChannel targetChannel, + PixelChannelLayout type, + Span pixelSpan) + where T: unmanaged, INumber + { + fixed (T* tPtr = pixelSpan) { + Context.glTexImage2D((uint)target, level, (uint)sourceChannel, width, height, 0, (uint)targetChannel, + (uint)type, tPtr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void TextureParameter(int target, uint pname, int param) + { + Context.glTexParameteri((uint)target, pname, param); + } + + public static bool TryGetFunctionPackage(IntPtr handle, out OpenGLFunction functionPackage) + { + return contextToGLMap.TryGetValue(handle, out functionPackage); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void UseProgram(GlHandle program) + { + Context.glUseProgram(program.Value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void VertexAttributeDivisor(uint layoutIndex, uint divisor) + { + Context.glVertexAttribDivisor(layoutIndex, divisor); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Viewport(int x, int y, uint width, uint height) + { + Context.glViewport(x, y, width, height); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void WaitAccomplishment() + { + Context.glFinish(); + } + + internal static OpenGLFunction BuildGlFunctionPackage(IntPtr handle) + { + if (contextToGLMap.TryGetValue(handle, out OpenGLFunction pack)) { + return pack; + } + pack = new OpenGLFunction + { + _context = (OpenglContext*)handle + }; + contextToGLMap.Add(handle, pack); + return pack; + } + + ~OpenGLFunction() + { + _ = contextToGLMap.Remove(ContextHandle); + } + + } +} + diff --git a/StgSharp.Common/Graphics/OpenGL/glHandle.cs b/StgSharp.Common/Graphics/OpenGL/glHandle.cs new file mode 100644 index 00000000..4f0c2f7f --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glHandle.cs @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glHandle" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; +using System.Security.AccessControl; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + [StructLayout(LayoutKind.Explicit, Size = 4)] + public struct GlHandle + { + + [FieldOffset(0)] internal int SignedValue; + [FieldOffset(0)] internal uint Value; + + public GlHandle() + { + Unsafe.SkipInit(out Value); + Unsafe.SkipInit(out SignedValue); + Unsafe.SkipInit(out this); + } + + public static GlHandle Zero + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => new GlHandle + { + Value = 0 + }; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static GlHandle Create(uint value) + { + return new GlHandle + { + Value = value + }; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static GlHandle CreateSigned(int value) + { + return new GlHandle + { + SignedValue = value + }; + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/glRenderObjectGenrator.cs b/StgSharp.Common/Graphics/OpenGL/glRenderObjectGenrator.cs new file mode 100644 index 00000000..7e5eb4d8 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glRenderObjectGenrator.cs @@ -0,0 +1,120 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glRenderObjectGenrator" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + public partial class glRender + { + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected AutoTextureGL CreateAutoTexture(int count) + { + return new AutoTextureGL(count, this); + } + + /// + /// Create a set of . + /// + /// + /// Amount of EBO to be created. + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected ElementBuffer CreateElementBuffer(int count) + { + return new ElementBuffer(count, this); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected FrameBuffer CreateFrameBuffer(int count) + { + return new FrameBuffer(count, this); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected RenderBuffer CreateRenderBuffer(int count) + { + return new RenderBuffer(count, this); + } + + /// + /// Create a sets of + /// + /// + /// Amount of textures to be created. + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected TextureGL CreateTexture(int count) + { + return new TextureGL(count, this); + } + + /// + /// Create a set of . + /// + /// + /// Amount of VAO to be created. + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected VertexArray CreateVertexArray(int count) + { + return new VertexArray(count, this); + } + + /// + /// Create a set of . + /// + /// + /// Amount of Object to be created. + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected VertexBuffer CreateVertexBuffer(int count) + { + return new VertexBuffer(count, this); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/OpenGL/glRenderStream.cs b/StgSharp.Common/Graphics/OpenGL/glRenderStream.cs new file mode 100644 index 00000000..e499df32 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glRenderStream.cs @@ -0,0 +1,178 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glRenderStream" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.Threading; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.OpenGL +{ + public abstract partial class glRender : RenderStream + { + + private protected static readonly ConcurrentDictionary renderToThread + = new ConcurrentDictionary(); + + private OpenGLFunction _context; + + protected internal OpenGLFunction GL + { + get { return _context; } + } + + /// + /// Initialize an opengl context and load all opengl functions. + /// + public unsafe void InitializeContext() + { + if (ContextHandle == default) + { + ContextHandle = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(OpenglContext))); + OpenglContext* contextID = (OpenglContext*)ContextHandle; + contextID->glGetString = (delegate*)IntPtr.Zero; + } + if (GL == null) { + _context = OpenGLFunction.BuildGlFunctionPackage(ContextHandle); + } + } + + /// + /// Initialize an OpenGl viewPortDisplay if current form has not been binded to any + /// viewPortDisplay. and set the viewPortDisplay binded to current form as current OpenGL + /// viewPortDisplay. + /// + /// + /// Something goes wrong and World fails in creating a new OpenGL viewPortDisplay. + /// + public unsafe void MakeAsCurrentContext() + { + GraphicFramework.glfwMakeContextCurrent(CanvasHandle); + OpenGLFunction.CurrentGL = this.GL; + } + + /// + public override void RenderEnd() + { + if (!renderToThread.TryGetValue(this, out Thread t) || t != Thread.CurrentThread) { + throw new InvalidOperationException( + $"Current render has had been binded to thread {t!.ManagedThreadId}"); + } + SwapBuffers(); + renderToThread[this] = ThreadHelper.EmptyThread; + GraphicFramework.glfwMakeContextCurrent(IntPtr.Zero); + OpenGLFunction.CurrentGL = null; + } + + /// + public override void RenderStart() + { + Thread current = Thread.CurrentThread; + if (!renderToThread.TryGetValue(this, out Thread t) || t == ThreadHelper.EmptyThread) + { + renderToThread[this] = current; + MakeAsCurrentContext(); + return; + } + if (t != current) { + throw new InvalidOperationException( + $"Current render has had been binded to thread {t!.ManagedThreadId}"); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight) + { + GraphicFramework.glfwSetWindowSizeLimits( + this.CanvasHandle, minWidth, minHeight, maxWidth, maxHeight); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal sealed override void PlatformSpecifiedInitialize() + { + InitializeContext(); + MakeAsCurrentContext(); + glManager.LoadOpenGLApiTo(BindedViewPortContext.GraphicHandle); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal sealed override void Terminate() + { + CustomizeDeinit(); + } + + protected sealed override Uniform NativeCameraUniform(ShaderProgram source, string name) + { + NativeCamera.GainAllUniforms(source, name); + return NativeCamera.convertedUniform; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected sealed override void NativeCameraViewRange( + Radius fieldOfRange, + Vec2 offset, + (float frontDepth, float backDepth) viewDepth) + { + NativeCamera.SetViewRange(fieldOfRange, this.Size, offset, viewDepth); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected sealed override void NativeCameraViewTarget(Vec3 position, Vec3 direction, Vec3 up) + { + NativeCamera.SetViewDirection(position, direction, up); + } + + #region Key Control + + protected KeyStatus CheckKey(KeyboardKey key) + { + return GraphicFramework.glfwGetKey(this.CanvasHandle, (int)key); + } + + protected KeyStatus CheckKey(Mouse key) + { + return GraphicFramework.glfwGetKey(this.CanvasHandle, (int)key); + } + + protected KeyStatus CheckKey(Joystick key) + { + return GraphicFramework.glfwGetKey(this.CanvasHandle, (int)key); + } + + #endregion + } +} diff --git a/StgSharp.Common/Graphics/OpenGL/glType.cs b/StgSharp.Common/Graphics/OpenGL/glType.cs new file mode 100644 index 00000000..2f180a06 --- /dev/null +++ b/StgSharp.Common/Graphics/OpenGL/glType.cs @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="glType" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics.OpenGL +{ + internal delegate void GLVULKANPROCNV(); + + public unsafe struct glHandleARB(IntPtr value) { } + + /// + /// OpenGL numeric type. An IEEE-754 floating-point value, clamped to the range [0,1]. + /// + [StructLayout(LayoutKind.Sequential)] + public struct GlClampF + { + + public float value; + + public GlClampF(float a) + { + value = a; + } + + } + + [StructLayout(LayoutKind.Explicit, Size = 16)] + public struct glHalfNv(Half bin) + { + + [FieldOffset(0)] public Half binary = bin; + + public float ToSingle() + { + return (float)binary; + } + + } + + [StructLayout(LayoutKind.Explicit, Size = 8)] + public struct GlFixed + { + + [FieldOffset(0)] public int All; + [FieldOffset(0)] public short Decimals; + [FieldOffset(4)] public short Integer; + + } + + /// + /// OpenGL numeric type. An IEEE-754 double precision floating-point value, clamped to the + /// range [0,1]. + /// + [StructLayout(LayoutKind.Sequential)] + public struct GlClampD + { + + public double value; + + public GlClampD(double a) + { + value = a; + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/Pixels.cs b/StgSharp.Common/Graphics/Pixels.cs new file mode 100644 index 00000000..12c5318d --- /dev/null +++ b/StgSharp.Common/Graphics/Pixels.cs @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Pixels" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics +{ + public interface IPixel + { + + public float Red { get; set; } + + public float Green { get; set; } + + public float Blue { get; set; } + + public float Alpha { get; set; } + + internal int Size { get; } + + } + + [StructLayout(LayoutKind.Explicit, Size = 32)] + public unsafe struct Pixel32RGBA : IPixel + { + + [FieldOffset(0)] private unsafe fixed byte data[4]; + + public int Size => 4; + + float IPixel.Alpha + { + get => data[3] / 256 ; + set => data[3] = (byte)(value * 256); + } + + float IPixel.Blue + { + get => data[2] / 256 ; + set => data[2] = (byte)(value * 256); + } + + float IPixel.Green + { + get => data[1] / 256 ; + set => data[1] = (byte)(value * 256); + } + + float IPixel.Red + { + get => data[0] / 256 ; + set => data[0] = (byte)(value * 256); + } + + } +} diff --git a/StgSharp.Common/Graphics/PlainGeometryMesh.cs b/StgSharp.Common/Graphics/PlainGeometryMesh.cs new file mode 100644 index 00000000..2c6fffe9 --- /dev/null +++ b/StgSharp.Common/Graphics/PlainGeometryMesh.cs @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PlainGeometryMesh" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Graphics +{ + public class PlainGeometryMesh + { + + private PlainGeometry _shape; + private TextureProvider _texture; + + public PlainGeometryMesh([NotNull] PlainGeometry shape, [NotNull] TextureProvider texture) + { + if (shape.VertexCount > texture.TextureCoordinate.Length) { + throw new ArgumentException( + paramName:nameof(texture), + message:"Amount of texture coordination is too less"); + } + _texture = texture; + _shape = shape; + } + + // private Image _texture; + + public PlainGeometryMesh(PlainGeometry shape, Image texture, Vec2[] texCoord) + { + ArgumentNullException.ThrowIfNull(shape); + ArgumentNullException.ThrowIfNull(texCoord); + + if (shape.VertexCount > texCoord.Length) { + throw new ArgumentException( + paramName:nameof(texCoord), + message:"Amount of texture coordination is too less"); + } + _texture = new TextureProvider(texture, texCoord); + } + + public Vec4[] VertexArray => _shape.VertexStream; + + public Image TextureImage + { + get => _texture.ProvideImage(); + internal set => _texture.ReadImage(value); + } + + public ReadOnlySpan MeshIndices => _shape.VertexIndices; + + public ReadOnlySpan TextureCoord => MemoryMarshal.Cast( + _texture.TextureCoordinate); + + public PlainGeometryMesh Resize(PlainGeometry newShape) + { + return new PlainGeometryMesh(newShape, _texture); + } + + } +} diff --git a/StgSharp.Common/Graphics/RenderStream.cs b/StgSharp.Common/Graphics/RenderStream.cs new file mode 100644 index 00000000..a63585f1 --- /dev/null +++ b/StgSharp.Common/Graphics/RenderStream.cs @@ -0,0 +1,249 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="RenderStream" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.OpenGL; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.MVVM; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics +{ + public abstract class RenderStream + { + + private Camera nativeCamera; + + private protected ViewPort primeArgs; + internal TimeSpanProvider _timeProvider; + + public (int width, int height) Size + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => (Width, Height); + } + + public abstract bool IsContextSharable { get; } + + public int Height + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => primeArgs.Height; + } + + public int Width + { + get => primeArgs.Width; + } + + public IntPtr Monitor + { + get => primeArgs.Monitor; + internal set => primeArgs.Monitor = value; + } + + public string Name + { + get => primeArgs.Name; + } + + public ViewPort BindedViewPortContext + { + get => primeArgs; + internal set => primeArgs = value; + } + + internal IntPtr CanvasHandle + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => primeArgs.ViewPortHandle; + } + + internal IntPtr ContextHandle + { + get => primeArgs.GraphicHandle; + private protected set => primeArgs.GraphicHandle = value; + } + + protected internal Camera NativeCamera + { + get => nativeCamera; + internal set => nativeCamera = value; + } + + protected float FramePassed + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _timeProvider.CurrentSpan; + } + + protected int PassedFrames + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _timeProvider.CurrentSpan; + } + + protected float TimePassed + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => (float)_timeProvider.CurrentSecond; + } + + protected TimeSpanProvider TimeProvider + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _timeProvider; + } + + /// + /// Set the Size limit of current form + /// + /// + /// Minimum width of current form + /// + /// + /// Minimum height of current form + /// + /// + /// Maximum width of current form + /// + /// + /// Maximum height of current form + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public abstract void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight); + + public static TTarget ShareContextFrom([NotNull]TSource source) where TSource : RenderStream + where TTarget : RenderStream, new() + { + TTarget target = new TTarget(); + target.Initialize(source.BindedViewPortContext, source._timeProvider); + return target; + } + + /**/ + protected internal static void PollEvents() + { + GraphicFramework.glfwPollEvents(); + } + + private protected void SwapBuffers() + { + GraphicFramework.glfwSwapBuffers(CanvasHandle); + } + + /**/ + + #region native camera operation + + protected abstract void NativeCameraViewRange( + Radius fieldOfRange, + Vec2 offset, + (float frontDepth, float backDepth) viewDepth); + + protected abstract void NativeCameraViewTarget(Vec3 position, Vec3 direction, Vec3 up); + + /// + /// Get (TView is ) uniform from a shader. + /// This uniform will be used as projection matrix of this camera. Additionally, for + /// multi- shader rendering, each shader requires a uniform, so do not ignore return + /// value of this method. + /// + /// + /// Shader using this camera + /// + /// + /// ContextName of projection camera named in shader + /// + /// + /// (TView is ) representing projection + /// matrix in shader program. + /// + protected abstract Uniform NativeCameraUniform(ShaderProgram source, string name); + + #endregion + + #region internal operation + + public void Initialize(ViewPort v, TimeSpanProvider timeProvider) + { + if (v == null) { + throw new ArgumentNullException(nameof(v)); + } + primeArgs = v; + this._timeProvider = timeProvider; + nativeCamera = new Camera(); + PlatformSpecifiedInitialize(); + CustomizeInit(); + GraphicFramework.glfwMakeContextCurrent(IntPtr.Zero); + } + + internal abstract void PlatformSpecifiedInitialize(); + + internal abstract void Terminate(); + + #endregion + + #region public operation + + protected abstract void CustomizeDeinit(); + + protected abstract void CustomizeInit(); + + /// + /// Marking the start of current render operations, and set this renser context as + /// current. + /// + public abstract void RenderStart(); + + /// + /// Marking the end of current render operations, and release the binding of this renser + /// context to current, making it available for another thread as current. + /// + public abstract void RenderEnd(); + + #endregion + + #region public resource generator + + protected abstract Shader CreateShaderSegment(ShaderType type, int count); + + protected abstract ShaderProgram CreateShaderProgram(); + + #endregion + } +} diff --git a/StgSharp.Common/Graphics/ShaderEdit/ShaderGenerator.cs b/StgSharp.Common/Graphics/ShaderEdit/ShaderGenerator.cs new file mode 100644 index 00000000..4850604f --- /dev/null +++ b/StgSharp.Common/Graphics/ShaderEdit/ShaderGenerator.cs @@ -0,0 +1,203 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ShaderGenerator" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.ShaderEdit +{ + public class ShaderGenerator + { + + private Dictionary uniformDefine; + private List codeList; + private List usedShaderFunctions; + + public Uniform DefineUniform(string name, int index) where T: unmanaged + { + ShaderParameter p = new ShaderParameter(name, ShaderParameter.TypeMarshal()); + uniformDefine.Add(index, p); + + // return new Uniform(); + throw new NotImplementedException(); + } + + } + + public class ShaderFunction + { + + private List codeList; + private List inputList; + private ShaderParameter outPut; + private string name; + + public int ParameterCount => inputList.Count; + + public void EmitCall(ShaderFunction function, ShaderParameter outPut, params ShaderParameter[] inputParams) + { + if (inputParams.Length != function.ParameterCount) + { + // Param list length not equal + throw new ArgumentException( + "Provided parameters does not match function's parameter list."); + } + if (!ShaderParameter.IsSameType(outPut, function.outPut)) + { + // Type of returning value not equal + throw new ArgumentException( + "Provided parameters does not match function's parameter list."); + } + for (int i = 0; i < inputParams.Length; i++) + { + if (!ShaderParameter.IsSameType(function.inputList[i], inputParams[i])) + { + // Input type not match + throw new InvalidCastException( + "Provided parameters does not match function's parameter list."); + } + } + string codeLine = string.Empty; // adding a line like " outvalue = Func(input1, input2,...); " + if (outPut != ShaderParameter.Void) { + codeLine += $"{outPut.name} = "; + } + codeLine += $"{function.name}("; + foreach (ShaderParameter inputParam in inputParams) { + codeLine += inputParam.name; + } + codeLine += ");\n"; + codeList.Add(codeLine); + } + + } + + public class ShaderParameter + { + + public static readonly ShaderParameter Void = new ShaderParameter( + string.Empty, InternalShaderType.Void); + internal readonly bool isReadOnly; + internal readonly InternalShaderType type; + internal readonly string name; + + public ShaderParameter(string name, InternalShaderType type) + { + this.name = name; + this.type = type; + isReadOnly = false; + } + + public static bool IsSameType(ShaderParameter param1, ShaderParameter param2) + { + if (param1.type != InternalShaderType.Struct) + { + return param1.type == param2.type; + } else + { + throw new Exception("Struct is currently not supported."); + } + } + + public static InternalShaderType TypeMarshal() where T: unmanaged + { + switch (Type.GetTypeCode(typeof(T))) + { + case TypeCode.Single: + return InternalShaderType.Float; + case TypeCode.Double: + return InternalShaderType.Double; + case TypeCode.Int32: + return InternalShaderType.Int; + case TypeCode.UInt32: + return InternalShaderType.UInt; + default: + break; + } + switch (typeof(T).Name) + { + case "vec4d": + return InternalShaderType.Vector4; + case "Matrix2x2": + return InternalShaderType.Matrix2x2; + case "Matrix2x3": + return InternalShaderType.Matrix2x3; + case "Matrix2x4": + return InternalShaderType.Matrix2x4; + case "Matrix3x2": + return InternalShaderType.Matrix3x2; + case "Matrix3x3": + return InternalShaderType.Matrix3x3; + case "Matrix3x4": + return InternalShaderType.Matrix3x4; + case "Matrix4x2": + return InternalShaderType.Matrix4x2; + case "Matrix4x3": + return InternalShaderType.Matrix4x3; + case "Matrix4x4": + return InternalShaderType.Matrix4x4; + default: + throw new ArgumentException("Not supported shader data type."); + } + } + + } + + public enum InternalShaderType + { +#pragma warning disable CS1591 + Struct, + Void, + Int, + UInt, + Float, + Double, + Vector2, + Vector3, + Vector4, + VectorD2, + VectorD3, + VectorD4, + Matrix2x2, + Matrix2x3, + Matrix2x4, + Matrix3x2, + Matrix3x3, + Matrix3x4, + Matrix4x2, + Matrix4x3, + Matrix4x4, +#pragma warning restore CS1591 + } +} \ No newline at end of file diff --git a/StgSharp.Common/Graphics/ShaderEdit/ShaderStruct.cs b/StgSharp.Common/Graphics/ShaderEdit/ShaderStruct.cs new file mode 100644 index 00000000..bc75b401 --- /dev/null +++ b/StgSharp.Common/Graphics/ShaderEdit/ShaderStruct.cs @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ShaderStruct" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.ShaderEdit +{ + public class ShaderStructMember + { + + internal InternalShaderType type; + internal object value; + + } + + public class ShaderStruct + { + + internal Dictionary uniformPair; + + internal ShaderStruct() { } + + public ShaderStruct(params (GlHandle, ShaderStructMember)[] uniformPairs) + { + uniformPair = new Dictionary(); + if (uniformPairs.Length == 0) { + return; + } + + foreach ((GlHandle, ShaderStructMember) item in uniformPairs) { + uniformPair.Add(item.Item1, item.Item2); + } + } + + public unsafe void SetAllUniforms() + { + OpenglContext* gl = (OpenglContext*)OpenGL.OpenGLFunction.CurrentGL.ContextHandle; + foreach (KeyValuePair uniform in uniformPair) + { + int id = uniform.Key.SignedValue; + ShaderStructMember s = uniform.Value; + switch (s.type) + { + case InternalShaderType.Struct: + throw new ArgumentException( + "Incorrect type \"Struct\" defined in this self define type"); + case InternalShaderType.Void: + throw new ArgumentException( + "Incorrect type \"Void\" defined in this self define type"); + case InternalShaderType.Float: + gl->glUniform1f(id, (float)s.value); + break; + case InternalShaderType.Int: + gl->glUniform1f(id, (int)s.value); + break; + default: + throw new NotImplementedException(); + throw new ArgumentException( + "Incorrect type \"Unknown\" defined in this self define type"); + } + } + }//------------------------------------ End of Class --------------------------------------- + + } +} diff --git a/StgSharp.Common/Graphics/TexturePipeline.cs b/StgSharp.Common/Graphics/TexturePipeline.cs new file mode 100644 index 00000000..3f43390e --- /dev/null +++ b/StgSharp.Common/Graphics/TexturePipeline.cs @@ -0,0 +1,64 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TexturePipeline" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.PipeLine; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics +{ + public class TexturePipeline : IPipeLineConnectionPayload + { + + private Image _value; + + public TexturePipeline(Image i) + { + _value = i; + } + + public object? ValueDefault => null; + + public object Value + { + get => _value; + set + { + ArgumentNullException.ThrowIfNull(value); + if (value is not Image image) { + throw new ArgumentException("Value must be of type Image"); + } + _value = image; + } + } + + } +} diff --git a/StgSharp.Common/Graphics/TextureProvider.cs b/StgSharp.Common/Graphics/TextureProvider.cs new file mode 100644 index 00000000..019a75f5 --- /dev/null +++ b/StgSharp.Common/Graphics/TextureProvider.cs @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TextureProvider" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Mathematics.Graphic; + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +namespace StgSharp.Graphics +{ + public class TextureProvider : IImageProvider + { + + private Vec2[] _texCoord; + private Image _tex; + + public TextureProvider(Image image, Vec2[] coord) + { + _tex = image; + _texCoord = coord; + } + + public ref Vec2 this[int index] + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => ref _texCoord[index]; + } + + public Span TextureCoordinate + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => new Span(_texCoord); + } + + public Image ProvideImage() + { + return _tex; + } + + public void ReadImage(IImageProvider provider) + { + _tex = provider.ProvideImage(); + } + + public void UpdateFromImage([NotNull]Image i) + { + if (i == _tex) { + return; + } + if (i.Size == _tex.Size) + { + _tex = i; + } else + { + throw new ArgumentException( + $"Size of {nameof(i)} does not equals to current image."); + } + } + + } +} diff --git a/StgSharp.Common/Graphics/Vulkan/vkEnum.cs b/StgSharp.Common/Graphics/Vulkan/vkEnum.cs new file mode 100644 index 00000000..abac24ca --- /dev/null +++ b/StgSharp.Common/Graphics/Vulkan/vkEnum.cs @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="vkEnum" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Graphics.Vulkan +{ + internal enum VkStructureType : uint + { + + VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, + VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, + VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, + VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, + VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, + VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, + VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF + + } + + internal enum VkResult + { + + VK_SUCCESS = 0, + VK_NOT_READY = 1, + VK_TIMEOUT = 2, + VK_EVENT_SET = 3, + VK_EVENT_RESET = 4, + VK_INCOMPLETE = 5, + VK_ERROR_OUT_OF_HOST_MEMORY = -1, + VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, + VK_ERROR_INITIALIZATION_FAILED = -3, + VK_ERROR_DEVICE_LOST = -4, + VK_ERROR_MEMORY_MAP_FAILED = -5, + VK_ERROR_LAYER_NOT_PRESENT = -6, + VK_ERROR_EXTENSION_NOT_PRESENT = -7, + VK_ERROR_FEATURE_NOT_PRESENT = -8, + VK_ERROR_INCOMPATIBLE_DRIVER = -9, + VK_ERROR_TOO_MANY_OBJECTS = -10, + VK_ERROR_FORMAT_NOT_SUPPORTED = -11, + VK_ERROR_SURFACE_LOST_KHR = -1000000000, + VK_SUBOPTIMAL_KHR = 1000001003, + VK_ERROR_OUT_OF_DATE_KHR = -1000001004, + VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, + VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, + VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, + VK_RESULT_MAX_ENUM = 0x7FFFFFFF + + } +} diff --git a/StgSharp.Common/Graphics/Vulkan/vkHandle.cs b/StgSharp.Common/Graphics/Vulkan/vkHandle.cs new file mode 100644 index 00000000..db4bd73d --- /dev/null +++ b/StgSharp.Common/Graphics/Vulkan/vkHandle.cs @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="vkHandle" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Graphics.Vulkan +{ + [StructLayout(LayoutKind.Explicit, Size = 8)] + public struct vkHandle + { + + [FieldOffset(0)] public int SignedHalfValue; + [FieldOffset(0)] public IntPtr Handle; + [FieldOffset(0)] public IntPtr UnsignedHandle; + [FieldOffset(0)] public uint HalfValue; + + } +} diff --git a/StgSharp.Common/Graphics/framework.cs b/StgSharp.Common/Graphics/framework.cs new file mode 100644 index 00000000..e661c183 --- /dev/null +++ b/StgSharp.Common/Graphics/framework.cs @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="framework" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Runtime.InteropServices; + +#if Windows +// using Windows.Win32; +#endif + +namespace StgSharp.Graphics +{ + /// + /// Function handler to load an opengl function by searching its _label. + /// + /// + /// the _label of the Opengl function + /// + /// + /// An Intptr value representing the pointer to the function + /// + public delegate IntPtr glLoader(string name); + + #region StgSharpDele + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void FrameBufferSizeHandler(IntPtr window, int width, int height); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void FramePositionHandler(IntPtr window, float width, float height); + + #endregion + + + #region glDEBUG + + internal unsafe delegate void GLDEBUGPROC( + int source, + int type, + uint id, + int severity, + int length, + sbyte* message, + void* userParam); + internal unsafe delegate void GLDEBUGPROCARB( + int source, + int type, + uint id, + int severity, + int length, + sbyte* message, + void* userParam); + internal unsafe delegate void GLDEBUGPROCKHR( + int source, + int type, + uint id, + int severity, + int length, + sbyte* message, + void* userParam); + internal unsafe delegate void GLDEBUGPROCAMD( + uint id, + int category, + int severity, + int length, + sbyte* message, + void* userParam); + +#endregion + +} diff --git a/StgSharp.Common/Graphics/frameworkSyncContext.cs b/StgSharp.Common/Graphics/frameworkSyncContext.cs new file mode 100644 index 00000000..6644605c --- /dev/null +++ b/StgSharp.Common/Graphics/frameworkSyncContext.cs @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="frameworkSyncContext" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + public class FrameworkSyncContext : SynchronizationContext + { + + private readonly BlockingCollection _syncContexts = []; + private readonly Thread _mainThread = Thread.CurrentThread; + + public FrameworkSyncContext() + { + _mainThread = Thread.CurrentThread; + } + + public static FrameworkSyncContext MainThreadContext + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = new FrameworkSyncContext(); + + public override void Post(SendOrPostCallback d, object state) + { + _syncContexts.Add(d); + } + + public override void Send(SendOrPostCallback d, object state) + { + if (Thread.CurrentThread == _mainThread) + { + d(state); + } else + { + Post(d, state); + } + } + + } +} diff --git a/StgSharp.Common/HighPerformance/IRegisterType.cs b/StgSharp.Common/HighPerformance/IRegisterType.cs new file mode 100644 index 00000000..3e854b3a --- /dev/null +++ b/StgSharp.Common/HighPerformance/IRegisterType.cs @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IRegisterType" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.HighPerformance +{ + /// + /// Abstraction for a wide SIMD register or equivalent packed numeric storage. Provides raw + /// reference access, broadcast initialization and element level access. Typical + /// implementations map to 128/256/512-bit hardware registers or software emulated blocks. + /// + + public interface IRegisterPresentation + { + + /// + /// Gets a reference to the first element of the register reinterpreted as type . + /// + /// + /// Unmanaged numeric element type implementing . + /// + /// + /// Writable reference to element 0 (lowest lane / lowest bits). + /// + /// + /// Intended for treating the register as a contiguous block of elements. The returned reference + /// must remain valid for the lifetime of the register and be identical to with index 0. Caller must choose a type layout compatible with the + /// actual register representation. + /// + ref T AsRef() where T: unmanaged, INumber; + + /// + /// Fills all elements (lanes) of the register with the provided scalar . + /// + /// + /// Unmanaged numeric element type implementing . + /// + /// + /// Scalar value to replicate to every element. + /// + /// + /// Should map to a single broadcast/shuffle instruction where possible. After completion all + /// lanes read back the same value. + /// + void BroadCastFrom(T value) where T: unmanaged, INumber; + + /// + /// Gets a writable reference to the element at the specified . + /// + /// + /// Unmanaged numeric element type implementing . + /// + /// + /// Zero-based lane index (range defined by implementation). + /// + /// + /// Writable reference to the lane. + /// + /// + /// Enables scalar lane edits without unpacking the entire register. Implementations may omit + /// bounds checks for performance. Caller is responsible for passing a valid index. + /// + ref T Member(int index) where T: unmanaged, INumber; + + } +} \ No newline at end of file diff --git a/StgSharp.Common/HighPerformance/Lable.cs b/StgSharp.Common/HighPerformance/Lable.cs new file mode 100644 index 00000000..00b9cec4 --- /dev/null +++ b/StgSharp.Common/HighPerformance/Lable.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Lable" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Runtime.CompilerServices; + +namespace StgSharp.HighPerformance +{ + public class DataLabel + { + + public DataLabel(string labelName) + { + Name = labelName; + } + + public string Name + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + init; + } + + public override unsafe int GetHashCode() + { + ReadOnlySpan nameSpan = Name.AsSpan(); + fixed (char* cptr = nameSpan) { + return NativeIntrinsic.Intrinsic.city_hash_simplify(cptr, Name.Length); + } + } + + } + + public static class DataLabelBuilder + { + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static DataLabel AsLabel(this string name) + { + return new DataLabel(name); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/HighPerformance/M128.cs b/StgSharp.Common/HighPerformance/M128.cs new file mode 100644 index 00000000..8bff2079 --- /dev/null +++ b/StgSharp.Common/HighPerformance/M128.cs @@ -0,0 +1,120 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="M128" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; + +using System.Text; + +namespace StgSharp.HighPerformance +{ + [StructLayout(LayoutKind.Explicit, Pack = 16)] + public unsafe struct M128 : IRegisterPresentation + { + + [FieldOffset(0)] internal fixed byte Buffer[16]; + [FieldOffset(0)] internal Vector128 Vec; + + internal M128(Vector4 v) + { + Unsafe.SkipInit(out this); + Unsafe.SkipInit(out Vec); + Vec = v.AsVector128(); + } + + internal M128(Vector128 v) + { + Unsafe.SkipInit(out this); + Vec = v; + } + + public ref T AsRef() where T : unmanaged, INumber + { + return ref Unsafe.As(ref Buffer[0]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly Vector4 AsVector4() + { + return Vec.AsVector4(); + } + + public void BroadCastFrom(T value) where T : unmanaged, INumber + { + Vec = Vector128.Create(value).AsSingle(); + } + + public override readonly bool Equals([NotNullWhen(true)] object obj) + { + return obj is M128 other && this == other; + } + + public override readonly int GetHashCode() + { + return Vec.GetHashCode(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref T Member(int index) where T : unmanaged, INumber + { + return ref Unsafe.Add(ref AsRef(), index); + } + + public override string ToString() + { + return string.Empty; + } + + public string ToString(int sample) + { + string str = string.Empty; + for (int i = 15; i >= 0; i--) { + str += $"{Convert.ToString(Buffer[i], sample)} "; + } + return str; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(M128 left, M128 right) + { + return left.Vec != right.Vec; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(M128 left, M128 right) + { + return left.Vec == right.Vec; + } + + } +} diff --git a/StgSharp.Common/HighPerformance/M256.cs b/StgSharp.Common/HighPerformance/M256.cs new file mode 100644 index 00000000..3746e2ed --- /dev/null +++ b/StgSharp.Common/HighPerformance/M256.cs @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="M256" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.HighPerformance +{ + [StructLayout(LayoutKind.Explicit, Pack = 16)] + public unsafe struct M256 : IRegisterPresentation + { + + [FieldOffset(0)] internal fixed byte Buffer[32]; + [FieldOffset(0)] internal Vector256 Vec; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref T AsRef() where T: unmanaged, INumber + { + return ref Unsafe.As(ref Buffer[0]); + } + + public void BroadCastFrom(T value) where T: unmanaged, INumber + { + Vec = Vector256.Create(value).AsSingle(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref T Member(int index) where T: unmanaged, INumber + { + return ref Unsafe.Add(ref AsRef(), index); + } + + } +} diff --git a/StgSharp.Common/HighPerformance/M64.cs b/StgSharp.Common/HighPerformance/M64.cs new file mode 100644 index 00000000..7dd12af7 --- /dev/null +++ b/StgSharp.Common/HighPerformance/M64.cs @@ -0,0 +1,100 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="M64" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; + +namespace StgSharp.HighPerformance +{ + [StructLayout(LayoutKind.Explicit, Pack = 8)] + public unsafe struct M64 : IRegisterPresentation + { + + [FieldOffset(0)] private fixed byte buffer[8]; + [FieldOffset(0)] private ulong value; + [FieldOffset(0)] private Vector64 vec; + + public M64() + { + Unsafe.SkipInit(out this); + Unsafe.SkipInit(out vec); + Unsafe.SkipInit(out value); + } + + public ref T AsRef() where T : unmanaged,INumber + { + return ref Unsafe.As(ref buffer[0]); + } + + public void BroadCastFrom(T value) where T : unmanaged, INumber + { + vec = Vector64.Create(value).AsSingle(); + } + + public override bool Equals(object obj) + { + return obj is M64 m64 && this == m64; + } + + public override readonly int GetHashCode() + { + return value.GetHashCode(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref T Member(int index) where T : unmanaged, INumber + { + return ref Unsafe.As(ref buffer[index * sizeof(T)]); + } + + public static bool operator !=(M64 left, M64 right) + { + return !(left == right); + } + + public static M64 operator <<(M64 value, int shift) + { + M64 result = new M64(); + result.value = value.value << shift; + return result; + } + + public static bool operator ==(M64 left, M64 right) + { + return left.value == right.value; + } + public static M64 operator >>(M64 value, int shift) + { + M64 result = new M64(); + result.value = value.value << shift; + return result; + } + + } +} diff --git a/StgSharp.Common/HighPerformance/MatrixKernel.cs b/StgSharp.Common/HighPerformance/MatrixKernel.cs index 4535487f..c327eed9 100644 --- a/StgSharp.Common/HighPerformance/MatrixKernel.cs +++ b/StgSharp.Common/HighPerformance/MatrixKernel.cs @@ -1,4 +1,8 @@ +<<<<<<< HEAD //----------------------------------------------------------------------- +======= +//----------------------------------------------------------------------- +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // ----------------------------------------------------------------------- // file="MatrixKernel" // Project: StgSharp @@ -32,6 +36,7 @@ using System.Runtime.InteropServices; namespace StgSharp.HighPerformance { +<<<<<<< HEAD public unsafe struct MatrixKernel { @@ -42,6 +47,11 @@ namespace StgSharp.HighPerformance [StructLayout(LayoutKind.Sequential)] [InlineArray(16)] public unsafe struct MatrixKernel where T : unmanaged, INumber +======= + [StructLayout(LayoutKind.Sequential)] + [InlineArray(16)] + public unsafe struct MatrixKernel where T: unmanaged, INumber +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { private T c0r0; diff --git a/StgSharp.Common/HighPerformance/MatrixPanel.cs b/StgSharp.Common/HighPerformance/MatrixPanel.cs index 7f3ae6d0..90fbaff5 100644 --- a/StgSharp.Common/HighPerformance/MatrixPanel.cs +++ b/StgSharp.Common/HighPerformance/MatrixPanel.cs @@ -1,4 +1,8 @@ +<<<<<<< HEAD //----------------------------------------------------------------------- +======= +//----------------------------------------------------------------------- +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // ----------------------------------------------------------------------- // file="MatrixPanel" // Project: StgSharp @@ -25,7 +29,10 @@ // // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- +<<<<<<< HEAD using StgSharp.Internal; +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 using System; using System.Numerics; using System.Runtime.CompilerServices; @@ -33,6 +40,7 @@ using System.Runtime.InteropServices; namespace StgSharp.HighPerformance { +<<<<<<< HEAD public unsafe struct MatrixPanel { @@ -162,3 +170,269 @@ namespace StgSharp.HighPerformance } } +======= + #pragma warning disable CA1000 + + public interface IMatrixPanel : IDisposable where T : unmanaged,INumber + { + + ref T this[int column, int row] { get; } + + static abstract int MaxElementCount { get; } + + static abstract int ElementSideLength { get; } + + static abstract nuint Size { get; } + + void Dispose(); + + } + + /// + /// Buffer for SSE targeted matrix panel, size of a panel is 4x4 elements, and no smaller than + /// 16 bytes. + /// + /// + /// Type of matrix element. + /// + public unsafe struct MatrixPanelSSE : IMatrixPanel where T : unmanaged, INumber + { + + private T element; + + [Obsolete("Compute kernel should not be created from new(), use Create instead", true)] + public MatrixPanelSSE() { } + + public ref T this[int column, int row] + { + get + { + int index = row * ElementSideLength + column; + return ref Unsafe.Add(ref element, index); + } + } + + public static int ElementSideLength + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = int.Max(4, 16 / sizeof(T)); + + public static int MaxElementCount + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = ElementSideLength * ElementSideLength; + + public static unsafe nuint Size { get; } = (nuint)(MaxElementCount * sizeof(T)); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int ChunkCount() => (ElementSideLength + LanesPerVector() - 1) / LanesPerVector(); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static MatrixPanelSSE* Create() + { + MatrixPanelSSE* kernel = (MatrixPanelSSE*)NativeMemory.AlignedAlloc(Size, 16); + return kernel; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Destroy(MatrixPanelSSE* kernel) + { + NativeMemory.AlignedFree(kernel); + } + + public void Dispose() + { + fixed (MatrixPanelSSE* thisPtr = &this) { + NativeMemory.AlignedFree(thisPtr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref M128 GetVectorChunk(int column, int chunk) + { + int lanes = LanesPerVector(); + int rowStart = chunk * lanes; + ref T colBase = ref this[column, 0]; + return ref Unsafe.As(ref Unsafe.Add(ref colBase, rowStart)); + } + + // SIMD access helpers (column-major) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int LanesPerVector() => 16 / sizeof(T); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetVectorChunk(int column, int chunk, in M128 value) + { + GetVectorChunk(column, chunk) = value; + } + + } + + /// + /// Buffer for AVX targeted matrix panel, size of a panel is 4x4 elements, and no smaller than + /// 16 bytes. + /// + /// + /// Type of matrix element. + /// + public unsafe struct MatrixPanelAVX : IMatrixPanel where T : unmanaged, INumber + { + + private T element; + + [Obsolete("Compute kernel should not be created from new(), use Create instead", true)] + public MatrixPanelAVX() { } + + public ref T this[int column, int row] + { + get + { + int index = row * ElementSideLength + column; + return ref Unsafe.Add(ref element, index); + } + } + + public static int ElementSideLength + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = int.Max(8, 32 / sizeof(T)); + + public static unsafe int MaxElementCount + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = ElementSideLength * ElementSideLength; + + public static unsafe nuint Size { get; } = (nuint)(MaxElementCount * sizeof(T)); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int ChunkCount() => (ElementSideLength + LanesPerVector() - 1) / LanesPerVector(); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static MatrixPanelAVX* Create() + { + MatrixPanelAVX* kernel = (MatrixPanelAVX*)NativeMemory.AlignedAlloc(Size, 32); + return kernel; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Destroy(MatrixPanelAVX* kernel) + { + NativeMemory.AlignedFree(kernel); + } + + public void Dispose() + { + fixed (MatrixPanelAVX* thisPtr = &this) { + NativeMemory.AlignedFree(thisPtr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref M256 GetVectorChunk(int column, int chunk) + { + int lanes = LanesPerVector(); + int rowStart = chunk * lanes; + ref T colBase = ref this[column, 0]; + return ref Unsafe.As(ref Unsafe.Add(ref colBase, rowStart)); + } + + // SIMD access helpers for AVX (column-major) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int LanesPerVector() => 32 / sizeof(T); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetVectorChunk(int column, int chunk, in M256 value) + { + GetVectorChunk(column, chunk) = value; + } + + } + + /// + /// Buffer for AVX512 targeted matrix panel, size of a panel is 4x4 elements, and no smaller + /// than 16 bytes. + /// + /// + /// Type of matrix element. + /// + public unsafe struct MatrixComputeKernelAVX512 : IMatrixPanel + where T : unmanaged, INumber + { + + private T element; + + [Obsolete("Compute kernel should not be created from new(), use Create instead", true)] + public MatrixComputeKernelAVX512() { } + + public ref T this[int column, int row] + { + get + { + int index = row * ElementSideLength + column; + return ref Unsafe.Add(ref element, index); + } + } + + public static int ElementSideLength + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = int.Max(8, 64 / sizeof(T)); + + public static unsafe int MaxElementCount + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + } = ElementSideLength * ElementSideLength; + + public static unsafe nuint Size { get; } = (nuint)(MaxElementCount * sizeof(T)); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int ChunkCount() => (ElementSideLength + LanesPerVector() - 1) / LanesPerVector(); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static MatrixComputeKernelAVX512* Create() + { + MatrixComputeKernelAVX512* kernel = (MatrixComputeKernelAVX512*)NativeMemory.AlignedAlloc(Size, 64); + return kernel; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Destroy(MatrixComputeKernelAVX512* kernel) + { + NativeMemory.AlignedFree(kernel); + } + + public void Dispose() + { + fixed (MatrixComputeKernelAVX512* thisPtr = &this) { + NativeMemory.AlignedFree(thisPtr); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref M512 GetVectorChunk(int column, int chunk) + { + int lanes = LanesPerVector(); + int rowStart = chunk * lanes; + ref T colBase = ref this[column, 0]; + return ref Unsafe.As(ref Unsafe.Add(ref colBase, rowStart)); + } + + // SIMD access helpers for AVX-512 (column-major) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int LanesPerVector() => 64 / sizeof(T); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetVectorChunk(int column, int chunk, in M512 value) + { + GetVectorChunk(column, chunk) = value; + } +#pragma warning restore CA1000 + } +} +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 diff --git a/StgSharp.Common/HighPerformance/UnsafeCompute.cs b/StgSharp.Common/HighPerformance/UnsafeCompute.cs new file mode 100644 index 00000000..36664dea --- /dev/null +++ b/StgSharp.Common/HighPerformance/UnsafeCompute.cs @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="UnsafeCompute" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System.Runtime.CompilerServices; + +namespace StgSharp.HighPerformance +{ + public static class UnsafeCompute + { + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int CityHashSimplify(char* span, int length) + { + return NativeIntrinsic.Intrinsic.city_hash_simplify(span, length); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int CityHashSimplify(char* span, int begin, int length) + { + return NativeIntrinsic.Intrinsic.city_hash_simplify(span + begin, length); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int IndexOfCharPair(char* source, int pairValue, int length) + { + return NativeIntrinsic.Intrinsic.index_pair(source, pairValue, length); + } + + } +} diff --git a/StgSharp.Common/Internal/Intrinsic/ColumnSet2.cs b/StgSharp.Common/Internal/Intrinsic/ColumnSet2.cs new file mode 100644 index 00000000..e72f73d3 --- /dev/null +++ b/StgSharp.Common/Internal/Intrinsic/ColumnSet2.cs @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ColumnSet2" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp; +using StgSharp.Internal.Intrinsic; + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace StgSharp.Internal.Intrinsic +{ + [StructLayout(LayoutKind.Explicit, Size = 12 * sizeof(float), Pack = 16)] + internal struct ColumnSet2 : IEquatable + { + + [FieldOffset(0 * sizeof(float))] internal float m00; + [FieldOffset(4 * sizeof(float))] internal float m01; + [FieldOffset(1 * sizeof(float))] internal float m10; + [FieldOffset(5 * sizeof(float))] internal float m11; + [FieldOffset(2 * sizeof(float))] internal float m20; + [FieldOffset(6 * sizeof(float))] internal float m21; + [FieldOffset(3 * sizeof(float))] internal float m30; + [FieldOffset(7 * sizeof(float))] internal float m31; + + [FieldOffset(0)] internal Vector4 colum0; + [FieldOffset(4 * sizeof(float))] internal Vector4 colum1; + + internal ColumnSet2(Vector4 c0, Vector4 c1) + { + Unsafe.SkipInit(out this); + colum0 = c0; + colum1 = c1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override bool Equals(object? obj) + { + return (obj is ColumnSet2 mat) && Equals(mat); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Equals(ColumnSet2 other) + { + return colum0.Equals(other.colum0) && colum1.Equals(other.colum1); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(ColumnSet2 left, ColumnSet2 right) + { + return !(left == right); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(ColumnSet2 left, ColumnSet2 right) + { + return left.Equals(right); + } + + } +} diff --git a/StgSharp.Common/Internal/Intrinsic/ColumnSet3.cs b/StgSharp.Common/Internal/Intrinsic/ColumnSet3.cs new file mode 100644 index 00000000..56802767 --- /dev/null +++ b/StgSharp.Common/Internal/Intrinsic/ColumnSet3.cs @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ColumnSet3" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Internal.Intrinsic; +using StgSharp.Mathematics; + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Internal.Intrinsic +{ + [StructLayout(LayoutKind.Explicit, Size = 12 * sizeof(float), Pack = 16)] + internal struct ColumnSet3 : IEquatable + { + + [FieldOffset(0 * sizeof(float))] internal float m00; + [FieldOffset(4 * sizeof(float))] internal float m01; + [FieldOffset(8 * sizeof(float))] internal float m02; + [FieldOffset(1 * sizeof(float))] internal float m10; + [FieldOffset(5 * sizeof(float))] internal float m11; + [FieldOffset(9 * sizeof(float))] internal float m12; + [FieldOffset(2 * sizeof(float))] internal float m20; + [FieldOffset(6 * sizeof(float))] internal float m21; + [FieldOffset(10 * sizeof(float))] internal float m22; + [FieldOffset(3 * sizeof(float))] internal float m30; + [FieldOffset(7 * sizeof(float))] internal float m31; + [FieldOffset(11 * sizeof(float))] internal float m32; + + [FieldOffset(0)] internal Vector4 colum0; + [FieldOffset(4 * sizeof(float))] internal Vector4 colum1; + [FieldOffset(8 * sizeof(float))] internal Vector4 colum2; + + public override bool Equals(object? obj) + { + return (obj is ColumnSet3 mat) && Equals(mat); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Equals(ColumnSet3 other) + { + return colum0.Equals(other.colum0) && colum1.Equals(other.colum1) && colum2.Equals(other.colum2); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(ColumnSet3 left, ColumnSet3 right) + { + return !(left == right); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(ColumnSet3 left, ColumnSet3 right) + { + return left.Equals(right); + } + + } +} diff --git a/StgSharp.Common/Internal/Intrinsic/ColumnSet4.cs b/StgSharp.Common/Internal/Intrinsic/ColumnSet4.cs new file mode 100644 index 00000000..5380349b --- /dev/null +++ b/StgSharp.Common/Internal/Intrinsic/ColumnSet4.cs @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ColumnSet4" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp; +using StgSharp.Internal.Intrinsic; + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Internal.Intrinsic +{ + [StructLayout(LayoutKind.Explicit, Size = 16 * sizeof(float))] + internal struct ColumnSet4 : IEquatable + { + + [FieldOffset(0)] internal Vector4 colum0; + [FieldOffset(16)] internal Vector4 colum1; + [FieldOffset(32)] internal Vector4 colum2; + [FieldOffset(48)] internal Vector4 colum3; + + [FieldOffset(0)] public float m00; + [FieldOffset(16)] public float m01; + [FieldOffset(32)] public float m02; + [FieldOffset(48)] public float m03; + [FieldOffset(4)] public float m10; + [FieldOffset(20)] public float m11; + [FieldOffset(36)] public float m12; + [FieldOffset(52)] public float m13; + [FieldOffset(8)] public float m20; + [FieldOffset(24)] public float m21; + [FieldOffset(40)] public float m22; + [FieldOffset(56)] public float m23; + [FieldOffset(12)] public float m30; + [FieldOffset(28)] public float m31; + [FieldOffset(44)] public float m32; + [FieldOffset(60)] public float m33; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal ColumnSet4(Vector4 colum0, Vector4 colum1, Vector4 colum2, Vector4 colum3) + { + Unsafe.SkipInit(out this); + this.colum0 = colum0; + this.colum1 = colum1; + this.colum2 = colum2; + this.colum3 = colum3; + } + + public override bool Equals(object? obj) + { + return (obj is ColumnSet4 mat) && Equals(mat); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Equals(ColumnSet4 other) + { + return colum0.Equals(other.colum0) && + colum1.Equals(other.colum1) && + colum2.Equals(other.colum2) && + colum3.Equals(other.colum3); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(ColumnSet4 left, ColumnSet4 right) + { + return !(left == right); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(ColumnSet4 left, ColumnSet4 right) + { + return left.Equals(right); + } + + } +} diff --git a/StgSharp.Common/Internal/Intrinsic/IntrinsicContext.cs b/StgSharp.Common/Internal/Intrinsic/IntrinsicContext.cs new file mode 100644 index 00000000..e3830279 --- /dev/null +++ b/StgSharp.Common/Internal/Intrinsic/IntrinsicContext.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IntrinsicContext" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.Marshalling; + +namespace StgSharp.Internal.Intrinsic +{ + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct IntrinsicContext + { + + public delegate* unmanaged[Cdecl] city_hash_simplify; //city_hash_simplify + public delegate* unmanaged[Cdecl] f32_buffer_add; //f32_buffer_add + public delegate* unmanaged[Cdecl] f32_buffer_fill; //f32_buffer_fill + public delegate* unmanaged[Cdecl] f32_buffer_scalar_mul; //f32_buffer_s_m + public delegate* unmanaged[Cdecl] f32_buffer_sub; //f32_kernel_sub + public delegate* unmanaged[Cdecl] f32_buffer_transpose; //f32_kernel_transpose + public delegate* unmanaged[Cdecl] f32_build_panel; //f32_build_panel + public delegate* unmanaged[Cdecl] f32_normalize_3; //f32_normalize_3 + public delegate* unmanaged[Cdecl] f32_panel_fma; //f32_panel_fma + public delegate* unmanaged[Cdecl] f32_store_panel; //f32_store_panel + public delegate* unmanaged[Cdecl] factorial_simd; //factorial_simd + public delegate* unmanaged[Cdecl] index_pair; //index_pair + public delegate* unmanaged[Cdecl] variant ; //variant + + public IntrinsicContext() + { + Unsafe.SkipInit(out this); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Internal/Intrinsic/intrinsicContextProvider.cs b/StgSharp.Common/Internal/Intrinsic/intrinsicContextProvider.cs new file mode 100644 index 00000000..2fabc0a3 --- /dev/null +++ b/StgSharp.Common/Internal/Intrinsic/intrinsicContextProvider.cs @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="intrinsicContextProvider" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Internal.Intrinsic; + +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace StgSharp.Internal +{ + internal static unsafe partial class NativeIntrinsic + { + + private static readonly IntrinsicContext _intrinsicContext = new(); + + public static IntrinsicLevel IntrinsicLevel { get; set; } + + internal static IntrinsicContext Intrinsic + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _intrinsicContext; + } + + internal static void InitIntrinsicContext() + { + int statCode; + + fixed (IntrinsicContext* cPtr = &_intrinsicContext) { + statCode = LoadIntrinsicFunction(cPtr); + } + + switch (statCode) + { + case 0: + + // Dialogue.PostError(new PlatformNotSupportedException("No SIMD instructions supported on current hardware platform")); + Environment.Exit(-1); + break; + default: + IntrinsicLevel = (IntrinsicLevel)statCode; + break; + } + } + + [LibraryImport(Native.LibName, EntryPoint = "load_intrinsic_function")] + [UnmanagedCallConv(CallConvs =[ typeof(CallConvCdecl) ])] + private static partial int LoadIntrinsicFunction(IntrinsicContext* context); + + } + + internal enum IntrinsicLevel : sbyte + { + + Non = 0, + SSE = 1, + AVX2 = 2, + AVX512 = 3, + NEON = -1 + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Internal/StructDefine.cs b/StgSharp.Common/Internal/StructDefine.cs new file mode 100644 index 00000000..9c37a230 --- /dev/null +++ b/StgSharp.Common/Internal/StructDefine.cs @@ -0,0 +1,956 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="StructDefine" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; + +using System; +using System.Runtime.InteropServices; + +/**/ + +namespace StgSharp.Internal +{ + // rename types in style of GLFW + + using GLFWbool = Boolean; + + #region glad struct + + [StructLayout(LayoutKind.Sequential)] + internal struct GLsync + { + + public IntPtr Handle; + + } + + #endregion glad struct + + // strucs defined in GLFW3.h + + #region GLFW3 struct + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct glfwContext + { + + private delegate* extensionSupported; + private delegate*, void> getProcAddress; + + /* + void (* makeCurrent) (glfwWindow*); + void (* swapBuffers) (glfwWindow*); + void (* swapInterval) (int); + int (* extensionSupported) (const byte*); + delegate*(*getProcAddress)(const byte*); + void (* destroy) (glfwWindow*); + */ + + private delegate* makeCurrent; + private delegate* swapBuffer; + private delegate* swapInterval; + private GLFWbool forward, debug, noerror; + + private int client; + private int major, minor, revision; + private int profile; + private int release; + private int robustness; + private int source; + private IntPtr destroy; + + // PFNGLGETINTEGERVPROC GetIntegerv; + private IntPtr GetIntegerv; + + // PFNGLGETSTRINGPROC GetString; + private IntPtr GetString; + + // PFNGLGETSTRINGIPROC GetStringi; + private IntPtr GetStringi; + + internal struct egl + { + + private void* client; + + /* + EGLConfig config; + EGLContext handle; + EGLSurface surface; + */ + private void* config; + private void* handle; + private void* surface; + + } + + internal struct osmesa + { + + private void* buffer; + + // OSMesaContext handle; + private void* handle; + private int height; + + private int width; + + } + + // This is defined in platform.h + // GLFW_PLATFORM_CONTEXT_STATE + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct glfwVideomode + { + /*! The refresh rate, in Hz, of the video mode. + */ + + private int refreshRate; + /*! The bit depth of the blue channel of the video mode. + */ + public int blueBits; + /*! The bit depth of the green channel of the video mode. + */ + public int greenBits; + /*! The height, in screen coordinates, of the video mode. + */ + public int height; + /*! The bit depth of the red channel of the video mode. + */ + public int redBits; + + /*! The width, in screen coordinates, of the video mode. + */ + public int width; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct glfwGammaramp + { + /*! An array of value describing the response of the blue channel. + */ + + private ushort* blue; + /*! An array of value describing the response of the green channel. + */ + private ushort* green; + + /*! An array of value describing the response of the red channel. + */ + private ushort* red; + /*! The number of elements in each array. + */ + private uint size; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWimage + { + /*! The pixel _data of this image, arranged left-to-right, top-to-bottom. + */ + + private byte* pixels; + + /*! The height, in pixels, of this image. + */ + private int height; + /*! The width, in pixels, of this image. + */ + private int width; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWgamepadstate + { + /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` + * or `GLFW_RELEASE`. + */ + + public fixed byte buttons[15]; + + /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 + * to 1.0 inclusive. + */ + public fixed float axes[6]; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWallocator + { + + private void* user; + + // GLFWallocatefun allocate; + private IntPtr allocate; + + // GLFWdeallocatefun deallocate; + private IntPtr deallocate; + + // GLFWreallocatefun reallocate; + private IntPtr reallocate; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct glfwMonitor + { + + private glfwVideomode* modes; + + private glfwWindow* window; + + private fixed byte name[128]; + private glfwGammaramp currentRamp; + + private glfwGammaramp originalRamp; + private glfwVideomode currentMode; + private int modeCount; + + private int width, height; + private IntPtr userPointer; + + public glfwMonitor() { } + + public unsafe string Name + { + get + { + fixed (byte* cptr = name) { + return Marshal.PtrToStringAnsi((IntPtr)cptr); + } + } + } + + } + + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct glfwWindow + { + + private glfwWindow* next; + private void* userPointer; + private bool rawMouseMotion; + private Callbacks callbacks; + + // Virtual cursor position when cursor is disabled + private double virtualCursorPosX, virtualCursorPosY; + private int autoIconify; + private int cursorMode; + private int decorated; + private int doublebuffer; + private int floating; + private int focusOnShow; + private int lockKeyMods; + private int maxwidth, maxheight; + + private int minwidth, minheight; + private int mousePassthrough; + private int numer, denom; + + // Window settings and state + private int resizable; + private int shouldClose; + + private int stickyKeys; + private int stickyMouseButtons; + private IntPtr cursor; // _GLFWcursor* cursor; + // glfwVideomode videoMode; // 根据GLFWvidmode的定义转换 + private IntPtr monitor; // _GLFWmonitor* monitor; + public fixed byte keys[FrameworkConstant.KEY_LAST + 1]; + public fixed byte mouseButtons[FrameworkConstant.MOUSE_BUTTON_LAST + 1]; + + // _GLFWcontext viewPortDisplay; // 根据_GLFWcontext的定义转换 + + // Callbacks are represented as IntPtr since we don't need the actual function pointers in C# + internal struct Callbacks + { + + internal IntPtr character; + internal IntPtr charmods; + internal IntPtr close; + internal IntPtr cursorEnter; + internal IntPtr cursorPos; + internal IntPtr drop; + internal IntPtr fbsize; + internal IntPtr focus; + internal IntPtr iconify; + internal IntPtr key; + internal IntPtr maximize; + internal IntPtr mouseButton; + internal IntPtr pos; + internal IntPtr refresh; + internal IntPtr scale; + internal IntPtr scroll; + internal IntPtr size; + + } + + // GLFW_PLATFORM_WINDOW_STATE platformWindowState; + } + + [StructLayout(LayoutKind.Sequential)] + public struct GLFWwindowCallback { } + + [StructLayout(LayoutKind.Sequential)] + public struct GLFWcursor + { + + // GLFWcursor* next; + private IntPtr next; + + // This is defined in platform.h + // not completed in tranformation + // GLFW_PLATFORM_CURSOR_STATE; + } + + /* + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWerror + { + //GLFWerror* next; + IntPtr next; + int code; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)glConst.GLFW_MESSAGE_SIZE)] + byte[] description = new byte[glConst.GLFW_MESSAGE_SIZE]; + + public GLFWerror() + { + } + } + */ + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWinitconfig + { + + private GLFWbool hatButtons; + + private int angleType; + private int platformID; + + // PFN_vkGetInstanceProcAddr vulkanLoader; + private IntPtr vulkanLoader; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWwndconfig + { + + private byte* title; + + private GLFWbool autoIconify; + private GLFWbool centerCursor; + private GLFWbool decorated; + private GLFWbool floating; + private GLFWbool focused; + private GLFWbool focusOnShow; + private GLFWbool maximized; + private GLFWbool mousePassthrough; + private GLFWbool resizable; + private GLFWbool scaleToMonitor; + private GLFWbool visible; + private int height; + private int width; + + private int xpos; + private int ypos; + + internal Ns ns = new Ns(); + + internal Win32 win32 = new Win32(); + + internal Wl wl = new Wl(); + + internal X11 x11 = new X11(); + + public GLFWwndconfig() { } + + internal struct Ns + { + + private GLFWbool retina = false; + public fixed byte frameName[256]; + + public Ns() { } + + } + + internal struct X11 + { + + public fixed byte className[256]; + public fixed byte instanceName[256]; + + public X11() { } + + } + + internal struct Win32 + { + + private GLFWbool keymenu; + + } + + internal struct Wl + { + + public fixed byte appId[256]; + + public Wl() { } + + } + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWctxconfig + { + + private GLFWbool debug; + private GLFWbool forward; + private GLFWbool noerror; + + private int client; + private int major; + private int minor; + private int profile; + private int release; + private int robustness; + private int source; + + // glfwWindow* share; + private IntPtr share; + + internal Nsgl nsgl = new Nsgl(); + + public GLFWctxconfig() { } + + internal struct Nsgl + { + + private GLFWbool offline; + + } + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWfbconfig + { + + private GLFWbool doublebuffer; + private GLFWbool sRGB; + private GLFWbool stereo; + private GLFWbool transparent; + + private int accumAlphaBits; + private int accumBlueBits; + private int accumGreenBits; + private int accumRedBits; + private int alphaBits; + private int auxBuffers; + private int blueBits; + private int depthBits; + private int greenBits; + + private int redBits; + private int samples; + private int stencilBits; + private uintptr_t handle; + + } + + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct GLFWlibrary + { + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = FrameworkConstant.JOYSTICK_LAST + 1)] + private GLFWjoystick[] joysticks = new GLFWjoystick[FrameworkConstant.JOYSTICK_LAST + 1]; + + private GLFWallocator allocator; + + private GLFWbool initialized; + + private GLFWbool joysticksInitialized; + private GLFWls contextSlot; + + private GLFWls errorSlot; + private GLFWmutex errorLock; + + private GLFWplatform platform; + + private int mappingCount; + + private int monitorCount; + + // GLFWcursor* cursorListHead; + private IntPtr cursorListHead; + + // GLFWerror* errorListHead; + private IntPtr errorListHead; + + // GLFWmapping* mappings; + private IntPtr mappings; + + // GLFWmonitor** monitors; + private IntPtr monitors; + + // glfwWindow* windowListHead; + private IntPtr windowListHead; + + internal Callbacks callbacks = new Callbacks(); + + internal Egl egl = new Egl(); + + internal Hints hints = new Hints(); + + internal Osmesa osmesa = new Osmesa(); + + public GLFWlibrary() { } + + internal unsafe struct Hints + { + + private GLFWctxconfig context; + private GLFWfbconfig framebuffer; + + private GLFWinitconfig init; + private GLFWwndconfig window; + private int refreshRate; + + } + + internal unsafe struct timer + { + + private ulong offset; + + // This is defined in platform.h + + // not transformed function defination + // GLFW_PLATFORM_LIBRARY_TIMER_STATE + } + + internal unsafe struct Egl + { + + internal void* display; + + internal void* handle; + + internal bool ANGLE_platform_angle; + internal bool ANGLE_platform_angle_d3d; + internal bool ANGLE_platform_angle_metal; + internal bool ANGLE_platform_angle_opengl; + internal bool ANGLE_platform_angle_vulkan; + internal bool EXT_client_extensions; + internal bool EXT_platform_base; + internal bool EXT_platform_wayland; + internal bool EXT_platform_x11; + internal bool EXT_present_opaque; + internal bool KHR_colorSpace; + internal bool KHR_context_flush_control; + + internal bool KHR_create_context; + internal bool KHR_create_context_no_error; + internal bool KHR_get_all_proc_addresses; + internal bool prefix; + internal int major, minor; + + internal int platform; + internal IntPtr BindAPI; + internal IntPtr CreateContext; + internal IntPtr CreatePlatformWindowSurfaceEXT; + internal IntPtr CreateWindowSurface; + internal IntPtr DestroyContext; + internal IntPtr DestroySurface; + + internal IntPtr GetConfigAttrib; + internal IntPtr GetConfigs; + internal IntPtr GetDisplay; + internal IntPtr GetError; + + internal IntPtr GetPlatformDisplayEXT; + internal IntPtr GetProcAddress; + internal IntPtr Initialize; + internal IntPtr MakeCurrent; + internal IntPtr QueryString; + internal IntPtr SwapBuffers; + internal IntPtr SwapInterval; + internal IntPtr Terminate; + + } + + internal unsafe struct Osmesa + { + + private void* handle; + + private IntPtr CreateContextAttribs; + + private IntPtr CreateContextExt; + private IntPtr DestroyContext; + private IntPtr GetColorBuffer; + private IntPtr GetDepthBuffer; + private IntPtr GetProcAddress; + private IntPtr MakeCurrent; + + } + + internal unsafe struct vk + { + + private void* handle; + + private GLFWbool available; + private GLFWbool EXT_metal_surface; + private GLFWbool KHR_surface; + private GLFWbool KHR_wayland_surface; + private GLFWbool KHR_win32_surface; + private GLFWbool KHR_xcb_surface; + private GLFWbool KHR_xlib_surface; + private GLFWbool MVK_macos_surface; + private IntPtr GetInstanceProcAddr; + private fixed ulong extensions[2]; + + public vk() { } + + } + + internal unsafe struct Callbacks + { + + private IntPtr joystick; + + private IntPtr monitor; + + } + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWmapelement + { + + private byte index; + + private byte type; + + private sbyte axisOffset; + private sbyte axisScale; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWmapping + { + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + private GLFWmapelement[] axes = new GLFWmapelement[6]; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)] + private GLFWmapelement[] buttons = new GLFWmapelement[15]; + private fixed byte guid[33]; + + private fixed byte name[128]; + + public GLFWmapping() { } + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWjoystick + { + + private float* axes; + private byte* buttons; + private byte* hats; + private void* userPointer; + private fixed byte guid[33]; + private fixed byte name[128]; + + private GLFWbool allocated; + private GLFWbool connected; + private int axisCount; + private int buttonCount; + private int hatCount; + + // GLFWmapping* mapping; + private IntPtr mapping; + + // This is defined in platform.h + // not completed in transforming + // GLFW_PLATFORM_JOYSTICK_STATE; + + public GLFWjoystick() { } + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWls + { + + // This is defined in platform.h + + // GLFW_PLATFORM_TLS_STATE + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWplatform + { + + private int platformID; + + // init + // GLFWbool(*init)(void); + private IntPtr init; + + // void (* terminate) (void); + private IntPtr terminate; + internal IntPtr createCursor; + internal IntPtr createStandardCursor; + + // window + internal IntPtr createWindow; + internal IntPtr destroyCursor; + + internal IntPtr destroyWindow; + internal IntPtr focusWindow; + internal IntPtr framebufferTransparent; + + // monitor + internal IntPtr freeMonitor; + internal IntPtr getClipboardString; + + internal IntPtr getEGLNativeDisplay; + internal IntPtr getEGLNativeWindow; + + // EGL + // EGLenum(*getEGLPlatform)(EGLint**); + // EGLNativeDisplayType(*getEGLNativeDisplay)(void); + // EGLNativeWindowType(*getEGLNativeWindow)(glfwWindow*); + internal IntPtr getEGLPlatform; + internal IntPtr getFramebufferSize; + internal IntPtr getGammaRamp; + internal IntPtr getKeyScancode; + internal IntPtr getMappingName; + internal IntPtr getMonitorContentScale; + + internal IntPtr getMonitorPos; + internal IntPtr getMonitorWorkarea; + + // vulkan + // void (* getRequiredInstanceExtensions) (byte**); + // GLFWbool(*getPhysicalDevicePresentationSupport)(VkInstance, VkPhysicalDevice, uint32_t); + // VkResult(*createWindowSurface)(VkInstance, glfwWindow*,const VkAllocationCallbacks*, VkSurfaceKHR*); + internal IntPtr getRequiredInstanceExtensions; + internal IntPtr getScancodeName; + internal IntPtr getVideoMode; + internal IntPtr getVideoModes; + internal IntPtr getWindowContentScale; + internal IntPtr getWindowFrameSize; + internal IntPtr getWindowOpacity; + internal IntPtr getWindowPos; + internal IntPtr getWindowSize; + internal IntPtr GLFWwindow; + internal IntPtr hideWindow; + internal IntPtr iconifyWindow; + internal IntPtr initJoysticks; + internal IntPtr maximizeWindow; + internal IntPtr pollEvents; + internal IntPtr pollJoystick; + internal IntPtr postEmptyEvent; + internal IntPtr rawMouseMotionSupported; + internal IntPtr requestWindowAttention; + internal IntPtr restoreWindow; + internal IntPtr setClipboardString; + internal IntPtr setCursor; + internal IntPtr setCursorMode; + + #region input + + /* void (* getCursorPos) (glfwWindow*, double*, double*); + void (* setCursorPos) (glfwWindow*, double, double); + void (* setCursorMode) (glfwWindow*, int); + void (* setRawMouseMotion) (glfwWindow*, GLFWbool); + GLFWbool(*rawMouseMotionSupported)(void); + GLFWbool(*createCursor)(GLFWcursor*,const GLFWimage*,int,int); + GLFWbool(*createStandardCursor)(GLFWcursor*, int); + void (* destroyCursor) (GLFWcursor*); + void (* setCursor) (glfwWindow*, GLFWcursor*); + const byte* (*getScancodeName)(int); + int (* getKeyScancode) (int); + void (* setClipboardString) (const byte*); + const byte* (*getClipboardString)(void); + GLFWbool(*initJoysticks)(void); + void (* terminateJoysticks) (void); + GLFWbool(*pollJoystick)(GLFWjoystick*, int); + const byte* (*getMappingName)(void); + void (* updateGamepadGUID) (byte*); + // monitor + void (* freeMonitor) (GLFWmonitor*); + void (* getMonitorPos) (GLFWmonitor*, int*, int*); + void (* getMonitorContentScale) (GLFWmonitor*, float*, float*); + void (* getMonitorWorkarea) (GLFWmonitor*, int*, int*, int*, int*); + glfwVideomode* (* getVideoModes) (GLFWmonitor*, int*); + void (* getVideoMode) (GLFWmonitor*, glfwVideomode*); + GLFWbool(*getGammaRamp)(GLFWmonitor*, glfwGammaramp*); + void (* setGammaRamp) (GLFWmonitor*,const glfwGammaramp*); + // window + GLFWbool(*createWindow)(glfwWindow*,const GLFWwndconfig*,const GLFWctxconfig*,const GLFWfbconfig*); + void (* destroyWindow) (glfwWindow*); + void (* setWindowTitle) (glfwWindow*,const byte*); + void (* setWindowIcon) (glfwWindow*, int,const GLFWimage*); + void (* getWindowPos) (glfwWindow*, int*, int*); + void (* setWindowPos) (glfwWindow*, int, int); + void (* getWindowSize) (glfwWindow*, int*, int*); + void (* setWindowSize) (glfwWindow*, int, int); + void (* setWindowSizeLimits) (glfwWindow*, int, int, int, int); + void (* setWindowAspectRatio) (glfwWindow*, int, int); + void (* getFramebufferSize) (glfwWindow*, int*, int*); + void (* getWindowFrameSize) (glfwWindow*, int*, int*, int*, int*); + void (* getWindowContentScale) (glfwWindow*, float*, float*); + void (* iconifyWindow) (glfwWindow*); + void (* restoreWindow) (glfwWindow*); + void (* maximizeWindow) (glfwWindow*); + void (* showWindow) (glfwWindow*); + void (* hideWindow) (glfwWindow*); + void (* requestWindowAttention) (glfwWindow*); + void (* focusWindow) (glfwWindow*); + void (* setWindowMonitor) (glfwWindow*, GLFWmonitor*, int, int, int, int, int); + GLFWbool(*windowFocused)(glfwWindow*); + GLFWbool(*windowIconified)(glfwWindow*); + GLFWbool(*windowVisible)(glfwWindow*); + GLFWbool(*windowMaximized)(glfwWindow*); + GLFWbool(*windowHovered)(glfwWindow*); + GLFWbool(*framebufferTransparent)(glfwWindow*); + float (* getWindowOpacity) (glfwWindow*); + void (* setWindowResizable) (glfwWindow*, GLFWbool); + void (* setWindowDecorated) (glfwWindow*, GLFWbool); + void (* setWindowFloating) (glfwWindow*, GLFWbool); + void (* setWindowOpacity) (glfwWindow*, float); + void (* setWindowMousePassthrough) (glfwWindow*, GLFWbool); + void (* pollEvents) (void); + void (* waitEvents) (void); + void (* waitEventsTimeout) (double); + void (* postEmptyEvent) (void); + */ + + #endregion + + internal IntPtr setCursorPos; + internal IntPtr setGammaRamp; + internal IntPtr setRawMouseMotion; + internal IntPtr setWindowAspectRatio; + internal IntPtr setWindowDecorated; + internal IntPtr setWindowFloating; + internal IntPtr setWindowIcon; + internal IntPtr setWindowMonitor; + internal IntPtr setWindowMousePassthrough; + internal IntPtr setWindowOpacity; + internal IntPtr setWindowPos; + internal IntPtr setWindowResizable; + internal IntPtr setWindowSize; + internal IntPtr setWindowSizeLimits; + internal IntPtr setWindowTitle; + internal IntPtr showWindow; + internal IntPtr terminateJoysticks; + internal IntPtr updateGamepadGUID; + + internal IntPtr VkPhysicalDevice; + internal IntPtr waitEvents; + internal IntPtr waitEventsTimeout; + internal IntPtr windowFocused; + internal IntPtr windowHovered; + internal IntPtr windowIconified; + internal IntPtr windowMaximized; + internal IntPtr windowVisible; + + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct GLFWmutex + { + + // This is defined in platform.h + // GLFW_PLATFORM_MUTEX_STATE + } + + // public unsafe struct VkAllocationCallbacks { } + + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct VkExtensionProperties + { + + private fixed byte extensionName[256]; + private uint specVersion; + + public VkExtensionProperties() { } + + } + + /* + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct GLFWerror + { + IntPtr next; + int code; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)] + byte[] description = new byte[1024]; + + public GLFWerror() + { + } + } + */ + + [StructLayout(LayoutKind.Explicit, Size = 16)] + public struct uintptr_t + { + + [FieldOffset(0)] + private long part1; + + [FieldOffset(8)] + private long part2; + + } + + #endregion GLFW3 struct + +} + +/**/ \ No newline at end of file diff --git a/StgSharp.Common/MVVM/OpenGLControllingItemRender.cs b/StgSharp.Common/MVVM/OpenGLControllingItemRender.cs new file mode 100644 index 00000000..0277d4c8 --- /dev/null +++ b/StgSharp.Common/MVVM/OpenGLControllingItemRender.cs @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="OpenGLControllingItemRender" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics.OpenGL; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.MVVM +{ + public class OpenGLControllingItemRender : glRender + { + + public override bool IsContextSharable => true; + + protected override void CustomizeDeinit() + { + throw new NotImplementedException(); + } + + protected override void CustomizeInit() + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Common/MVVM/View/ViewBase.cs b/StgSharp.Common/MVVM/View/ViewBase.cs new file mode 100644 index 00000000..65572c31 --- /dev/null +++ b/StgSharp.Common/MVVM/View/ViewBase.cs @@ -0,0 +1,199 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewBase" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Mathematics; +using StgSharp.MVVM.ViewModel; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Numerics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading; + +namespace StgSharp.MVVM +{ + /// + /// ViewBase is the base type for all view types, providing context binding and control + /// element binding. A complete view should contain one complete , , and , which provide + /// layout descriptions of control elements, user responses, and rendering implementations in + /// the view. Data between instances of , , and is shared through . + /// + + public abstract unsafe partial class ViewBase + { + + private (int x, int y, int z) unitCubeSize; + + private GetDataBindingEntryDelegate getDataBindingEntry; + + private int usedFrame; + private IViewDesigner _design; + private IViewRender _render; + private IViewResponder _responder; + private TimeSpanProvider time; + + private ViewPort context; + + private delegate bool GetDataBindingEntryDelegate(string name, out DataBindingEntry entry); + + public DataBindingEntry this[string name] + { + get + { + if (getDataBindingEntry(name, out DataBindingEntry entry)) { + return entry; + } + if (TryGetObjectReference(name, out entry)) { + return entry; + } + throw new KeyNotFoundException(); + } + } + + public (int x, int y, int z) UnitCubeSize + { + get => unitCubeSize; + } + + public bool Activated { get; internal set; } + + public int Height + { + get => context.Height; + } + + public int Width + { + get => context.Width; + } + + public IntPtr Monitor => context.Monitor; + + public IntPtr ViewHandle => context.ViewPortHandle; + + public IViewDesigner Designer + { + get => _design; + protected set => _design = value; + } + + public string ContextName => context.Name; + + public string SelfName { get; set; } + + public ViewPort Port + { + get => context; + } + + internal TimeSpanProvider TimeProvider + { + get => time; + } + + protected internal IViewRender Render + { + get => _render; + set => _render = value; + } + + protected IViewResponder Responder + { + get => _responder; + set => _responder = value; + } + + public abstract void CustomizedInitialize([NotNull]ViewModelBase viewModelBinding); + + /// + /// Get the status of a certain key on the keyboard. + /// + /// + /// + /// + /// + /// representing if a key is pressed or released. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public KeyStatus GetKeyStatus(KeyboardKey key) + { + return GraphicFramework.glfwGetKey(context.ViewPortHandle, (int)key); + } + + public void InternalInitialize(string name, (int, int, int) cubeSize, [NotNull]ViewModelBase viewModelBinding) + { + SelfName = name; + unitCubeSize = cubeSize; + getDataBindingEntry = viewModelBinding.TryGetObjectReference; + context = viewModelBinding.ViewPortBinding; + time = viewModelBinding.frameTimeProvider; + + CustomizedInitialize(viewModelBinding); + } + + public abstract bool TryGetObjectReference(string name, out DataBindingEntry entry); + + public void Use() + { + if (usedFrame == 0) + { + if (!ValidateInitialization()) { + throw new InvalidOperationException( + "This view is not correctly initialized before rendering."); + } + } + Show(); + usedFrame++; + } + + public bool ValidateInitialization() + { + return (_design != null) && + (_render != null) && + (getDataBindingEntry != null) && + (_responder != null) && + _design.ValidateInitializing() && + _responder.ValidateInitializing() && + _render.ValidateInitializing(); + } + + protected abstract void Show(); + + } +} \ No newline at end of file diff --git a/StgSharp.Common/MVVM/View/ViewDesigner.cs b/StgSharp.Common/MVVM/View/ViewDesigner.cs new file mode 100644 index 00000000..172438f3 --- /dev/null +++ b/StgSharp.Common/MVVM/View/ViewDesigner.cs @@ -0,0 +1,144 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewDesigner" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Controlling.UsrActivity; +using StgSharp.Controls; +using StgSharp.Geometries; +using StgSharp.Graphics; + +using StgSharp.Mathematics; + +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace StgSharp.MVVM +{ + public abstract partial class ViewBase + { + + public interface IViewDesigner where TView: ViewBase + { + + abstract void CustomizedInitialize(); + + abstract void Initialize(); + + abstract bool ValidateInitializing(); + + } + + /// + /// ViewDesigner provides descriptions of various controls in the view, binds the + /// controls to specific user actions and behaviors, and describes the layout and + /// interactions of each control. + /// + public abstract class ViewDesigner : IViewDesigner where TView: ViewBase + { + + private KeyboardButtonGroup currentButtonGroup; + + private List _controlList; + protected TView _binding; + + public ViewDesigner(TView binding) + { + _binding = binding; + _controlList = new List(); + } + + protected TView Binding + { + get => _binding; + } + + public CharacterLineIndexImage CreateCharacterLine( + int length, + char blankFilling, + PlainGeometryMesh tittle, + IEnumerable<(char, PlainGeometryMesh)> charList) + { + CharacterLineIndexImage ret = new CharacterLineIndexImage( + length, blankFilling, tittle, charList); + _controlList.Add(ret); + return ret; + } + + public TriggerButton CreateKeyboardButton( + Rectangle bonding, + TextureProvider defaultAnimation, + bool isEnable) + { + TriggerButton ret = new TriggerButton(); + ret.BoundingBox = bonding; + ret.Texture = defaultAnimation; + if (isEnable) + { + ret.IsDisabled = false; + ret.Enable(); + } else + { + ret.IsDisabled = true; + ret.Disable(); + } + currentButtonGroup.AddButton(ret); + return ret; + } + + public TButtonGroup CreateKeyboardButtonGroup( + IClickTrigger leftBidning, + IClickTrigger rightBinding, + IClickTrigger upBinding, + IClickTrigger downBinding, + IClickTrigger confirmBinding) + where TButtonGroup: KeyboardButtonGroup, new() + { + TButtonGroup ret = new TButtonGroup(); + _controlList.Add(ret); + currentButtonGroup = ret; + _binding.Responder[leftBidning] = ret.MoveLeft; + _binding.Responder[rightBinding] = ret.MoveRight; + _binding.Responder[upBinding] = ret.MoveUp; + _binding.Responder[downBinding] = ret.MoveDown; + _binding.Responder[confirmBinding] = ret.Confirm; + return ret; + } + + public abstract void CustomizedInitialize(); + + public void Initialize() + { + CustomizedInitialize(); + } + + public abstract bool ValidateInitializing(); + + }//---------------------------------- End of Class ----------------------------------------- + + } +} diff --git a/StgSharp.Common/MVVM/View/ViewRender.cs b/StgSharp.Common/MVVM/View/ViewRender.cs new file mode 100644 index 00000000..06a9b786 --- /dev/null +++ b/StgSharp.Common/MVVM/View/ViewRender.cs @@ -0,0 +1,130 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewRender" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; + +using StgSharp.HighPerformance; + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace StgSharp.MVVM +{ + public abstract partial class ViewBase + { + + protected internal interface IViewRender where TView: ViewBase + { + + RenderStream this[DataLabel renderName] { get; } + + void CustomizedInitialize(); + + IEnumerator GetEnumerator(); + + void Initialize(); + + bool ValidateInitializing(); + + } + + protected abstract class ViewRender : IViewRender where TView: ViewBase + { + + protected ViewRender(TView binding) + { + _binding = binding; + _render = new Dictionary(); + } + + public RenderStream this[DataLabel renderName] + { + get => _render.TryGetValue(renderName, out RenderStream stream) ? stream : (null!); + protected set + { + if (_render.ContainsKey(renderName)) + { + _render[renderName] = value; + } else + { + _render.Add(renderName, value); + } + } + } + + public TView Binding => _binding; + + protected ViewPort ContextBinding => _binding.context; + + protected ViewDesigner Design => (_binding.Designer as ViewDesigner)!; + + protected Dictionary Render + { + get => _render; + } + + protected ViewResponder Responder => (_binding.Responder as ViewResponder)!; + + public T CreateRenderStream() where T: RenderStream, new() + { + T ret = new T(); + ret.Initialize(_binding.context, Binding.TimeProvider); + return ret; + } + + public T CreateRenderStream(ViewPort vp) where T: RenderStream, new() + { + T ret = new T(); + ret.Initialize(vp, Binding.TimeProvider); + return ret; + } + + public abstract void CustomizedInitialize(); + + public IEnumerator GetEnumerator() + { + foreach (RenderStream item in Render.Values) { + yield return item.BindedViewPortContext; + } + } + + public void Initialize() + { + CustomizedInitialize(); + } + + public abstract bool ValidateInitializing(); + + #pragma warning disable CS8618 + private Dictionary _render; + private TView _binding; +#pragma warning restore CS8618 + } + + } +} diff --git a/StgSharp.Common/MVVM/View/ViewResponder.cs b/StgSharp.Common/MVVM/View/ViewResponder.cs new file mode 100644 index 00000000..c760e18c --- /dev/null +++ b/StgSharp.Common/MVVM/View/ViewResponder.cs @@ -0,0 +1,131 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewResponder" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Controlling.UsrActivity; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.MVVM +{ + public partial class ViewBase + { + + protected interface IViewResponder where TVIew: ViewBase + { + + Action? this[IClickTrigger trigger] { get; set; } + + void CustomizedInitialize(Func keyRegister); + + void Initialize(MethodLookUpDelegate methodGetter); + + void ProcessUserInput(); + + bool ValidateInitializing(); + + } + + protected abstract class ViewResponder : IViewResponder where TView: ViewBase + { + + private bool _isInitialized; + private Dictionary keyCallbackIndex; + private Dictionary nameToCallbackMap; + private TView _binding; + + protected ViewResponder(TView binding) + { + keyCallbackIndex = new Dictionary(); + nameToCallbackMap = new Dictionary(); + _binding = binding; + } + + #pragma warning disable CA1043 + public Action? this[IClickTrigger trigger] + #pragma warning restore CA1043 + { + get => keyCallbackIndex.TryGetValue(trigger, out Action callback) ? callback : null; + set + { + if (keyCallbackIndex.TryGetValue(trigger, out Action callback)) + { + callback += value; + } else + { + keyCallbackIndex.Add( + trigger, value ?? throw new ArgumentNullException(nameof(value))); + } + } + } + + protected TView Binding => _binding; + + public abstract void CustomizedInitialize(Func keyRegister); + + public void Initialize(MethodLookUpDelegate methodGetter) + { + if (_isInitialized) { + return; + } + CustomizedInitialize((trigger, name) => { + if (!nameToCallbackMap.TryGetValue(name, out Action ret)) + { + if (methodGetter(name, out Action lookup)) + { + this[trigger] = lookup; + } else + { + throw new InvalidOperationException( + $"Cannot find method named {name} in binded view model"); + } + } + return ret; + }); + } + + public void ProcessUserInput() + { + foreach (KeyValuePair pair in keyCallbackIndex) + { + if (GraphicFramework.glfwGetKey(_binding.ViewHandle, + pair.Key.TargetKeyOrButtonID) == pair.Key.TriggeredStatus) { + pair.Value(); + } + } + } + + public abstract bool ValidateInitializing(); + + } + + } +} diff --git a/StgSharp.Common/MVVM/ViewModel/DataBinding.cs b/StgSharp.Common/MVVM/ViewModel/DataBinding.cs new file mode 100644 index 00000000..38911c32 --- /dev/null +++ b/StgSharp.Common/MVVM/ViewModel/DataBinding.cs @@ -0,0 +1,148 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="DataBinding" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.HighPerformance; + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace StgSharp.MVVM.ViewModel +{ +#nullable enable + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate ref object BindingDataGetter(); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void BindingDataSetter(ref object value); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool MethodLookUpDelegate(string name, out Action callback); + + public abstract partial class ViewModelBase + { + + public bool MethodLookup(string methodName, out Action callback) + { + MethodInfo method = GetType().GetMethod(methodName)!; + if (method == null) + { + callback = null!; + return false; + } + try + { + callback = (Action)Delegate.CreateDelegate(typeof(Action), this, methodName); + return true; + } + catch (MissingMethodException) + { + callback = null!; + return false; + } + catch (MethodAccessException) + { + callback = null!; + return false; + } + catch (Exception) + { + throw; + } + } + + } + + [StructLayout(LayoutKind.Explicit)] + public unsafe struct DataBindingEntry + { + + [FieldOffset(0)] private IntPtr getterPtr; + [FieldOffset(8)] private IntPtr setterPtr; + [FieldOffset(0)] private M128 _mask; + + public DataBindingEntry( + [NotNull] BindingDataGetter gettingCallback, + [NotNull] BindingDataSetter settingCallback) + { + getterPtr = Marshal.GetFunctionPointerForDelegate(gettingCallback); + setterPtr = Marshal.GetFunctionPointerForDelegate(settingCallback); + } + + public static DataBindingEntry NullBinding + { + get => new DataBindingEntry(); + } + + public bool Equals(DataBindingEntry other) + { + return (_mask == other._mask); + } + + public override bool Equals(object obj) + { + if (obj is not DataBindingEntry other) { + return false; + } + return Equals(other); + } + + public bool ExactEqual(DataBindingEntry other) + { + return (getterPtr == other.getterPtr) && (setterPtr == other.setterPtr); + } + + public override int GetHashCode() + { + return _mask.GetHashCode(); + } + + public ref object GetValue() + { + return ref ((delegate* unmanaged[Cdecl])getterPtr)(); + } + + public void SetValue(ref object value) + { + ((delegate* unmanaged[Cdecl])setterPtr)(ref value); + } + + public static bool operator !=(DataBindingEntry left, DataBindingEntry right) + { + return left._mask != right._mask; + } + + public static bool operator ==(DataBindingEntry left, DataBindingEntry right) + { + return left._mask == right._mask; + } + + } + +#nullable restore +} diff --git a/StgSharp.Common/MVVM/ViewModel/ShowViewPort.cs b/StgSharp.Common/MVVM/ViewModel/ShowViewPort.cs new file mode 100644 index 00000000..dd63559b --- /dev/null +++ b/StgSharp.Common/MVVM/ViewModel/ShowViewPort.cs @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ShowViewPort" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Controls; +using StgSharp.Graphics; +using StgSharp.MVVM; +using StgSharp.Threading; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace StgSharp.MVVM.ViewModel +{ + public abstract partial class ViewModelBase + { + + private volatile bool _closed = true; + private ViewBase _nextView, _currentView; + + protected ViewBase CurrentView + { + get => _currentView; + set => _nextView = value; + } + + /// + /// CustomizeInit this form and render it on screen, and respond with operation + /// + public unsafe void UseViewModel(string viewEntryName) + { + CustomizeInitialize(); + UseViewInNextFrame(viewEntryName); + fpsCountProvider.TimeSpanRefreshed += CountFps; + fpsCountProvider.MissTimeSpanRefreshed += CountFps; + if (_nextView != _currentView) { + _ = Interlocked.Exchange(ref _currentView, _nextView); + } + Thread renderThread = new Thread((token) => { + try + { + ProcessFrameWithoutEvent(); + } + catch (Exception ex) + { + DefaultLog.InternalWriteLog( + $"Critical error when rendering:\n" + $"{ex}", LogType.Error); + ShouldClose = true; + throw; + } + }); + renderThread.Start(); + /**/ + while (_closed) + { + if (_nextView != _currentView) { + _ = Interlocked.Exchange(ref _currentView, _nextView); + } + GraphicFramework.glfwPollEvents(); + frameTimeProvider.WaitNextSpan(); + _closed = !ShouldClose; + } + /**/ + renderThread.Join(); + fpsCountProvider.Dispose(); + frameTimeProvider.Dispose(); + } + + protected void UseViewInNextFrame(string name) + { + if (!allView.TryGetValue(name, out ViewBase v)) { + throw new KeyNotFoundException( + $"{$"Cannot find View named {name} "}{$"in current View Model of {GetType().FullName}"}"); + } + CurrentView = v; + } + + private void CountFps(object sender, EventArgs e) + { + Interlocked.Exchange(ref _frameSpeed, _frameCount); + Interlocked.Exchange(ref _frameCount, 0); + } + + private unsafe void PrivateShow() + { + if (0 == GraphicFramework.glfwWindowShouldClose(this.viewPortDisplay.ViewPortHandle)) + { + CurrentView.Use(); + RenderStream.PollEvents(); + } + } + + private void ProcessFrameWithoutEvent() + { + frameTimeProvider.TimeSpanRefreshed += (_, _) => { }; + while (_closed) + { + foreach (ViewPort context in CurrentView.Render) { + context.FlushSize(); + } + CurrentView.Use(); + frameTimeProvider.WaitNextSpan(); + Interlocked.Add(ref _frameCount, 1); + } + } + + } +} diff --git a/StgSharp.Common/MVVM/ViewModel/ViewManage.cs b/StgSharp.Common/MVVM/ViewModel/ViewManage.cs new file mode 100644 index 00000000..02f91f64 --- /dev/null +++ b/StgSharp.Common/MVVM/ViewModel/ViewManage.cs @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewManage" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; +using StgSharp.MVVM; + +using System; +using System.Collections.Generic; +using System.ComponentModel.Design; +using System.Text; + +namespace StgSharp.MVVM.ViewModel +{ + public partial class ViewModelBase + { + + private Dictionary allView; + + public T CreateAndBindView(string name, (int x, int y, int z) unitCubeSize) where T: ViewBase, new() + { + T ret = new T(); + ret.SelfName = name; + ret.InternalInitialize(name, unitCubeSize, this); + allView.Add(name, ret); + return ret; + } + + } +} diff --git a/StgSharp.Common/MVVM/ViewModel/ViewModel.cs b/StgSharp.Common/MVVM/ViewModel/ViewModel.cs new file mode 100644 index 00000000..6a95d121 --- /dev/null +++ b/StgSharp.Common/MVVM/ViewModel/ViewModel.cs @@ -0,0 +1,241 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewModel" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Common.Timing; +using StgSharp.Controlling.UsrActivity; +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; +using StgSharp.Threading; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Numerics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; + +namespace StgSharp.MVVM.ViewModel +{ + public abstract partial class ViewModelBase + { + + private FrameBufferSizeHandler _resizeCallback; + private int _frameCount; + private int _frameSpeed; + private ViewPort viewPortDisplay; + + // internal IntPtr monitor; + + internal TimeSpanProvider fpsCountProvider; + internal TimeSpanProvider frameTimeProvider; + internal Vector4 backgroundColor; + + protected ViewModelBase(int frameSpeed) + { + viewPortDisplay = new ViewPort(); + allView = []; + fpsCountProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, 1.0 / frameSpeed), TimeSpanProvider.DefaultProvider); + _frameSpeed = 0; + _frameCount = 0; + long frameLength = (FrameSpeed > 0) ? (1000L * 1000L / FrameSpeed) : 0; + frameTimeProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, 1.0 / frameSpeed), TimeSpanProvider.DefaultProvider); + SetFrameSizeCallback(DefaultFrameResizeCallback); + } + + protected ViewModelBase(double frameLength) + { + viewPortDisplay = new ViewPort(); + allView = []; + fpsCountProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, frameLength), TimeSpanProvider.DefaultProvider); + _frameSpeed = 0; + _frameCount = 0; + long _frameLength = (FrameSpeed > 0) ? ((long)(1000 * frameLength)) : 0; + frameTimeProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, frameLength), TimeSpanProvider.DefaultProvider); + SetFrameSizeCallback(DefaultFrameResizeCallback); + } + + public ViewModelBase(ViewPort vBinding, int frameSpeed) + { + viewPortDisplay = vBinding; + allView = []; + fpsCountProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, 1.0), TimeSpanProvider.DefaultProvider); + _frameSpeed = 0; + _frameCount = 0; + long frameLength = (frameSpeed > 0) ? (1000L * 1000L / frameSpeed) : 0; + frameTimeProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, 1.0 / frameSpeed), TimeSpanProvider.DefaultProvider); + SetFrameSizeCallback(DefaultFrameResizeCallback); + } + + public ViewModelBase(ViewPort vBinding, double frameLength) + { + viewPortDisplay = vBinding; + allView = []; + fpsCountProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, 1.0), TimeSpanProvider.DefaultProvider); + _frameSpeed = 0; + _frameCount = 0; + long _frameLength = (FrameSpeed > 0) ? ((long)(1000 * frameLength)) : 0; + frameTimeProvider = new TimeSpanProvider(TimeSequence.CreateLinear(double.MaxValue, frameLength), TimeSpanProvider.DefaultProvider); + SetFrameSizeCallback(DefaultFrameResizeCallback); + } + + public DataBindingEntry this[string name] + { + get + { + if (this.TryGetObjectReference(name, out DataBindingEntry entry)) { + return entry; + } + throw new KeyNotFoundException(); + } + } + + public bool ShouldClose + { + get => GraphicFramework.glfwWindowShouldClose(viewPortDisplay.ViewPortHandle) != 0; + set => GraphicFramework.glfwSetWindowShouldClose( + viewPortDisplay.ViewPortHandle, value ? 1 : 0); + } + + public int CurrentFrameCount => frameTimeProvider.CurrentSpan; + + public int FrameSpeed => _frameSpeed; + + /// + /// Height of this form, represent in + /// + public int Height + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => viewPortDisplay.Height; + } + + /// + /// Width of this form, represent in + /// + public int Width + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => viewPortDisplay.Width; + } + + public unsafe IntPtr WindowID + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => viewPortDisplay.ViewPortHandle; + } + + public string Name + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => viewPortDisplay.Name; + } + + /// + /// Width of this form, represent in + /// + public Vec2 Size + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => new Vec2(Width, Height); + } + + public ViewPort ViewPortBinding + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => viewPortDisplay; + } + + public abstract void CustomizeInitialize(); + + /// + /// Set the Size limit of current form + /// + /// + /// Minimum Size of current form. In form of a of (width,height) + /// + /// + /// Maximum Size of current form. In form of a of (width,height) + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetSizeLimit(Vec2 minSize, Vec2 maxSize) + { + ThreadHelper.MainThreadAssert(); + GraphicFramework.glfwSetWindowSizeLimits(this.viewPortDisplay.ViewPortHandle, (int)minSize.X, + (int)minSize.Y, (int)maxSize.X, (int)maxSize.Y); + } + + /// + /// Set the Size limit of current form + /// + /// + /// Minimum width of current form + /// + /// + /// Minimum height of current form + /// + /// + /// Maximum width of current form + /// + /// + /// Maximum height of current form + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight) + { + ThreadHelper.MainThreadAssert(); + GraphicFramework.glfwSetWindowSizeLimits(this.viewPortDisplay.ViewPortHandle, minWidth, minHeight, maxWidth, + maxHeight); + } + + public abstract bool TryGetObjectReference(string name, out DataBindingEntry entry); + + protected unsafe void SetFrameSizeCallback(FrameBufferSizeHandler callback) + { + _resizeCallback = callback; + IntPtr handlerPtr = Marshal.GetFunctionPointerForDelegate(callback); + _ = GraphicFramework.glfwSetFrameBufferSizeCallback( + viewPortDisplay.ViewPortHandle, (delegate* unmanaged[Cdecl])handlerPtr); + } + + private void DefaultFrameResizeCallback(IntPtr windowHandle, int width, int height) + { + ViewPort.GetExistedViewPort(windowHandle, out ViewPort vp); + vp.RequestFlushSizeInNextFrame(width, height); + + // Console.WriteLine($"{width} {height}"); + } + + } +} diff --git a/StgSharp.Common/MVVM/ViewPort.cs b/StgSharp.Common/MVVM/ViewPort.cs new file mode 100644 index 00000000..2ab91dda --- /dev/null +++ b/StgSharp.Common/MVVM/ViewPort.cs @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ViewPort" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Diagnostics.Contracts; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; + +namespace StgSharp.MVVM +{ + public class ViewPort + { + + private static readonly ConcurrentDictionary _handleToViewPortIndex = []; + private int _width, _height, _newWidth, _newHeight; + + internal ViewPort() + { + _newHeight = 600; + _newWidth = 800; + FlushSize(); + Name = new StackFrame(1, false). + GetMethod()!.DeclaringType!.Name; + Monitor = IntPtr.Zero; + ViewPortHandle = GraphicFramework.glfwCreateWindow( + _newWidth, _newHeight, Encoding.UTF8.GetBytes(Name), Monitor, IntPtr.Zero); + if (ViewPortHandle == IntPtr.Zero) { + throw new InvalidOperationException("Unable to create viewport handle."); + } + _ = _handleToViewPortIndex.TryAdd(ViewPortHandle, this); + } + + public ViewPort(int width, int height, string name, IntPtr monitor) + { + _newWidth = width; + _newHeight = height; + FlushSize(); + Name = name; + Monitor = monitor; + ViewPortHandle = GraphicFramework.glfwCreateWindow( + _newWidth, _newHeight, Encoding.UTF8.GetBytes(Name), Monitor, IntPtr.Zero); + if (ViewPortHandle == IntPtr.Zero) { + throw new InvalidOperationException("Unable to create viewport handle."); + } + _ = _handleToViewPortIndex.TryAdd(ViewPortHandle, this); + } + + public unsafe int Height + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _height; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal set => Interlocked.Exchange(ref _height, value); + } + + public unsafe int Width + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _width; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal set => Interlocked.Exchange(ref _width, value); + } + + public IntPtr GraphicHandle { get; internal set; } + + public IntPtr Monitor { get; internal set; } + + public IntPtr ViewPortHandle { get; private set; } + + public string Name { get; set; } + + // [BlueprintNodeExecution] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool GetExistedViewPort(IntPtr handle, out ViewPort port) + { + return _handleToViewPortIndex.TryGetValue(handle, out port); + } + + internal unsafe void FlushSize() + { + _ = Interlocked.Exchange(ref _height, _newHeight); + _ = Interlocked.Exchange(ref _width, _newWidth); + } + + internal void RequestFlushSizeInNextFrame(int width, int height) + { + _ = Interlocked.Exchange(ref _newHeight, height); + _ = Interlocked .Exchange(ref _newWidth, width); + } + + } +} diff --git a/StgSharp.Common/PipeLine/CrossFramePipelineNode.cs b/StgSharp.Common/PipeLine/CrossFramePipelineNode.cs new file mode 100644 index 00000000..5863abb0 --- /dev/null +++ b/StgSharp.Common/PipeLine/CrossFramePipelineNode.cs @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CrossFramePipelineNode" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.PipeLine; + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + public class CrossFrameOperation : IConvertableToPipelineNode + { + + private static string[] _inputName = [ "TaskIn" ]; + private static string[] _outputName = [ "TaskOut" ]; + private Action _mainExecution; + private int currentCount; + private readonly int cycleCount; + + public CrossFrameOperation(Action startup, int cycleCount) + { + MainExecution = startup; + this.cycleCount = (cycleCount > 1) ? + cycleCount : + throw new ArgumentException( + $"{$"The {typeof(CrossFrameOperation).Name} crosses only one cycle, "}{$"please use a {typeof(PipelineNode).Name} instead."}"); + this.cycleCount = cycleCount; + currentCount = cycleCount; + } + + public Action MainExecution + { + get => _mainExecution; + private protected set => _mainExecution = value; + } + + public IEnumerable InputPortName => _inputName; + + public IEnumerable OutputPortName => _outputName; + + public PipelineNodeOperation Operation + { + get => NodeMain; + } + + public void NodeMain( + in Dictionary input, + in Dictionary output) + { + if (currentCount < cycleCount) + { + Interlocked.Increment(ref currentCount); + } else + { + Interlocked.Exchange(ref currentCount, 0); + Task.Run(MainExecution); + } + + // Console.WriteLine(currentCount); + PipelineNodeOutPort.SkipAll(output); + } + + } +} diff --git a/StgSharp.Common/PipeLine/IConvertableToPipelineNode.cs b/StgSharp.Common/PipeLine/IConvertableToPipelineNode.cs new file mode 100644 index 00000000..c220b7c5 --- /dev/null +++ b/StgSharp.Common/PipeLine/IConvertableToPipelineNode.cs @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IConvertableToPipelineNode" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.PipeLine +{ + public delegate void PipelineNodeOperation( + in Dictionary input, + in Dictionary output); + + public interface IConvertableToPipelineNode + { + + public IEnumerable InputPortName { get; } + + public IEnumerable OutputPortName { get; } + + PipelineNodeOperation Operation { get; } + + void NodeMain( + in Dictionary input, + in Dictionary output); + + } + + internal class DefaultConvertableToBlueprintNode : IConvertableToPipelineNode + { + + private string[] _input; + private string[] _output; + private PipelineNodeOperation _execution; + + public DefaultConvertableToBlueprintNode(PipelineNodeOperation execution, string[] input, string[] output) + { + _input = input; + _output = output; + _execution = execution; + } + + public IEnumerable InputPortName => _input; + + public IEnumerable OutputPortName => _output; + + public PipelineNodeOperation Operation => _execution; + + public void NodeMain( + in Dictionary input, + in Dictionary output) + { + _execution.Invoke(input, output); + } + + } +} diff --git a/StgSharp.Common/PipeLine/PipeLineRunner.cs b/StgSharp.Common/PipeLine/PipeLineRunner.cs new file mode 100644 index 00000000..5dfb7ae1 --- /dev/null +++ b/StgSharp.Common/PipeLine/PipeLineRunner.cs @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PipeLineRunner" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Threading; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; + +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + public static class PipeLineRunner + { + + private static NodeRunner[] allAvailableTask = CreateBlueprintRunnerArray(); + private static CancellationTokenSource cts = new CancellationTokenSource(); + private static ConcurrentStack pipelineInWaiting + = new ConcurrentStack(); + private static int _callingThread; + private static SemaphoreSlim pipelineLock = new SemaphoreSlim(0, 1); + + public static void Run(PipelineScheduler pipeline) + { + // Console.WriteLine(); + if (pipeline == null) + { + return; + } + if (pipeline.IsRunning) { + throw new InvalidOperationException("Attempt to run a blueprint instance twice."); + } + if (!IsValidCalling()) { + pipelineLock.Wait(); + } + if (InterruptAndRunNewPipeline(pipeline)) + { + while (InterruptAndRunNewPipeline(NodeRunner.CurrentPipeline!)) { } + } + pipelineLock.Release(); + Interlocked.Exchange(ref _callingThread, -1); + } + + public static void SetMaxTaskCount(int size) + { + if (size < 1) { + size = 1; + } + if (allAvailableTask.Length >= size) + { + for (int i = size; i < allAvailableTask.Length; i++) + { + if (allAvailableTask[i] != null) { + allAvailableTask[i].Cancel(); + } + } + } + Array.Resize(ref allAvailableTask, size); + } + + public static void Terminate() + { + cts.Cancel(); + if (NodeRunner.CurrentPipeline is null) { + return; + } + NodeRunner.CurrentPipeline.Terminate(); + foreach (NodeRunner task in allAvailableTask) { + task.Cts.Cancel(); + } + foreach (PipelineScheduler bp in pipelineInWaiting) { + bp.Terminate(); + } + pipelineInWaiting.Clear(); + } + + internal static bool InterruptAndRunNewPipeline(PipelineScheduler newPipeline) + { + ArgumentNullException.ThrowIfNull(newPipeline); + if ((newPipeline != NodeRunner.CurrentPipeline) && (NodeRunner.CurrentPipeline != null)) + { + // if a running bp exists + pipelineInWaiting.Push(NodeRunner.CurrentPipeline); + } + + // load new bp to current bp + NodeRunner.CurrentPipeline = newPipeline; + Interlocked.Exchange(ref _callingThread, Environment.CurrentManagedThreadId); + + // run beginning node to init it first. + if (!NodeRunner.CurrentPipeline.IsRunning) + { + (NodeRunner.CurrentPipeline.BeginLayer as BeginningNode)!.Run(); + } + + // refresh all tasks + /* + for( int i = 0; i < allAvailableTask.Length; i++ ) + { + NodeRunner item = allAvailableTask[ i ]; + if( ( item is null ) || item.IsCompleted ) { + allAvailableTask[ i ] = NodeRunner.Run(); + } + } + /**/ + PipelineNode node; + while (!cts.Token.IsCancellationRequested && NodeRunner.CurrentPipeline.RequestNextMainThreadNode(out node)) + { + node.Run(); + if (!NodeRunner.CurrentPipeline.IsRunning) + { + break; + } + } + + while ((NodeRunner.CurrentPipeline != null) && + NodeRunner.CurrentPipeline.IsRunning && + !cts.Token.IsCancellationRequested && + NodeRunner.CurrentPipeline!.RequestNexConcurrentNode(out node)) + { + node.Run(); + if (!NodeRunner.CurrentPipeline!.IsRunning) + { + break; + } + } + (NodeRunner.CurrentPipeline!.EndLayer as EndingNode)!.Run(); + bool isEmpty = pipelineInWaiting.TryPop(out PipelineScheduler? pipeline); + NodeRunner.CurrentPipeline = pipeline!; + return isEmpty; + } + + /// + /// Only the following occasions of calling are valid: 1. no bp is + /// running or the only bp is quitting. 2. calling from the main thread or a + /// thread the current bp is running on. + /// + internal static bool IsValidCalling() + { + if ((NodeRunner.CurrentPipeline == null) || //no bp running at all + ((pipelineInWaiting.IsEmpty) && (NodeRunner.CurrentPipeline.IsRunning == false))) + { + // a bp is quitting + // in case no bp is running + return true; + } + int? id = Task.CurrentId; + if (id is null) + { + // in case calling from main thread and current running bp + return _callingThread == Environment.CurrentManagedThreadId; + } + foreach (NodeRunner item in allAvailableTask) + { + if (item.Id == id) + { + // if calling from any bp running task + return true; + } + } + return false; + } + + private static NodeRunner[] CreateBlueprintRunnerArray() + { + int count = Environment.ProcessorCount; + return new NodeRunner[ count < 2 ? count : count - 2]; + } + + } + + internal class NodeRunner : CancellableTask + { + + private static volatile PipelineScheduler? _current; + + internal NodeRunner() + : base() + { + _startup = InternalRun; + } + + internal static PipelineScheduler? CurrentPipeline + { + get => _current; + set => _current = value; + } + + internal static NodeRunner Run() + { + NodeRunner ret = new NodeRunner + { + _startup = InternalRun + }; + ret._internalTask = Task.Run(ret.InternalAction); + return ret; + } + + private static void InternalRun(CancellationToken token) + { + PipelineNode item; + Console.WriteLine($"Global thread {Environment.CurrentManagedThreadId} starts."); + while ((CurrentPipeline != null) && + CurrentPipeline.IsRunning && + !token.IsCancellationRequested && + CurrentPipeline.RequestNexConcurrentNode(out item)) { + item.Run(); + } + } + + }//------------------------------------- End of Class ------------------------------------------ +} diff --git a/StgSharp.Common/PipeLine/PipelineMarshal.cs b/StgSharp.Common/PipeLine/PipelineMarshal.cs new file mode 100644 index 00000000..a47cff83 --- /dev/null +++ b/StgSharp.Common/PipeLine/PipelineMarshal.cs @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PipelineMarshal" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + public static class PipelineMarshal + { + + public static IEnumerable GetNodeSortedEnumeration(PipelineScheduler scheduler) + { + ArgumentNullException.ThrowIfNull(scheduler); + return new PipelineNodeEnumerator(scheduler) + { + _count = scheduler._allNode.Count, + }; + } + + private class PipelineNodeEnumerator : ICollection + { + + private readonly List> _mt, _c; + + public int _count; + + public PipelineNodeEnumerator(PipelineScheduler scheduler) + { + if (!scheduler.TryGetAllNode(out _mt, out _c)) { + throw new InvalidOperationException("Binded scheduler is not sorted."); + } + } + + public bool IsReadOnly => true; + + public int Count => _count; + + public IEnumerator GetEnumerator() + { + for (int i = 1; i < _mt.Count; i++) + { + foreach (PipelineNode node in _mt[i]) { + yield return node; + } + foreach (PipelineNode node in _c[i]) { + yield return node; + } + } + } + + void ICollection.Add(PipelineNode item) + { + throw new NotSupportedException(); + } + + void ICollection.Clear() + { + throw new NotSupportedException(); + } + + bool ICollection.Contains(PipelineNode item) + { + throw new NotSupportedException(); + } + + void ICollection.CopyTo(PipelineNode[] array, int arrayIndex) + { + throw new NotSupportedException(); + } + + bool ICollection.Remove(PipelineNode item) + { + throw new NotSupportedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + } + + } +} diff --git a/StgSharp.Common/PipeLine/PipelineNodeLabel.cs b/StgSharp.Common/PipeLine/PipelineNodeLabel.cs new file mode 100644 index 00000000..4e64a4dc --- /dev/null +++ b/StgSharp.Common/PipeLine/PipelineNodeLabel.cs @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PipelineNodeLabel" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + public abstract record class PipelineNodeLabel + { + + public static PipelineNodeLabel Empty => PipelineNodeLabelEmpty.Only; + + public abstract int ComputeHashCode(); + + public override int GetHashCode() + { + return ComputeHashCode(); + } + + } + + public record class PipelineNodeStringLabel : PipelineNodeLabel + { + + public PipelineNodeStringLabel(string name) + { + Name = name; + } + + public string Name { get; } + + public override int ComputeHashCode() + { + return string.GetHashCode(Name); + } + + } + + internal record class PipelineNodeLabelEmpty : PipelineNodeLabel + { + + public static PipelineNodeLabelEmpty Only { get; } = new PipelineNodeLabelEmpty(); + + public override int ComputeHashCode() + { + return 0; + } + + } +} diff --git a/StgSharp.Common/PipeLine/PipelineNodePort.cs b/StgSharp.Common/PipeLine/PipelineNodePort.cs new file mode 100644 index 00000000..f130c012 --- /dev/null +++ b/StgSharp.Common/PipeLine/PipelineNodePort.cs @@ -0,0 +1,187 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PipelineNodePort" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.ExceptionServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + public class PipelineNodeInPort + { + + private HashSet _linkerSet = new HashSet(); + + public PipelineNodeInPort(PipelineNode container, string label) + { + Container = container; + Label = label; + } + + public IEnumerable LinkedPorts => _linkerSet; + + public PipelineNode Container { get; init; } + + public SemaphoreSlim Waiter { get; init; } + + public string Label { get; init; } + + internal HashSet Linkers => _linkerSet; + + public void Connect(PipelineNodeOutPort port) + { + ArgumentNullException.ThrowIfNull(port); + if (_linkerSet.Add(port)) + { + port.Linkers.Add(this); + Container.Previous.Add(port.Container); + port.Container.Next.Add(Container); + } + } + + public IEnumerator GetFormerNodes() + { + foreach (PipelineNodeOutPort port in _linkerSet) { + yield return port.Container; + } + } + + public void Wait() + { + PipelineNodeOutPort.WaitAll(_linkerSet); + } + + public static void WaitAll(IDictionary ports) + { + if (ports is null) { + return; + } + foreach (PipelineNodeInPort port in ports.Values) { + port.Wait(); + } + } + + public static void WaitAll(IEnumerable ports) + { + if (ports is null) { + return; + } + foreach (PipelineNodeInPort port in ports) { + port.Wait(); + } + } + + } + + public class PipelineNodeOutPort + { + + private HashSet _linkerSet = new HashSet(); + private volatile int _passCount; + private SemaphoreSlim formerCompleteSemaphore; + + public PipelineNodeOutPort(PipelineNode container, string label) + { + Container = container; + Label = label; + formerCompleteSemaphore = new SemaphoreSlim(initialCount:0, maxCount:1); + } + + public PipelineNode Container { get; init; } + + public string Label { get; init; } + + internal HashSet Linkers => _linkerSet; + + private SemaphoreSlim Waiter => formerCompleteSemaphore; + + public void Connect(PipelineNodeInPort port) + { + ArgumentNullException.ThrowIfNull(port); + if (_linkerSet.Add(port)) + { + port.Linkers.Add(this); + Container.Next.Add(port.Container); + port.Container.Previous.Add(Container); + } + } + + public void Release() + { + if (_passCount == 0) + { + Waiter.Release(); + } else + { + return; + } + } + + public static void SkipAll(Dictionary ports) + { + if (ports is null) { + return; + } + foreach (PipelineNodeOutPort port in ports.Values) { + port.Release(); + } + } + + public void TransmitValue(IPipeLineConnectionPayload value) + { + foreach (PipelineNodeInPort item in _linkerSet) { } + } + + public static void WaitAll(IEnumerable ports) + { + if (ports is null) { + return; + } + foreach (PipelineNodeOutPort port in ports) { + port.Wait(); + } + } + + internal void Wait() + { + Waiter.Wait(); + if (_passCount >= _linkerSet.Count) + { + Interlocked.Exchange(ref _passCount, 0); + } else + { + Interlocked.Increment(ref _passCount); + Waiter.Release(); + } + } + + } +} diff --git a/StgSharp.Common/PipeLine/PipelineScheduler.cs b/StgSharp.Common/PipeLine/PipelineScheduler.cs new file mode 100644 index 00000000..c463ba72 --- /dev/null +++ b/StgSharp.Common/PipeLine/PipelineScheduler.cs @@ -0,0 +1,297 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PipelineScheduler" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Stg; + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Xml; +using System.Xml.Linq; + +namespace StgSharp.PipeLine +{ + /// + /// A sets of complex logic designed for running in multi threads environment. Warning: do not + /// run a instance in multi threads more than once. + /// + public partial class PipelineScheduler : IConvertableToPipelineNode + { + + private BeginningNode _beginning; + private bool _isAvailable = false; + private EndingNode _ending; + + private int mtLevel, cLevel,mtIndex, cIndex; + private List> _concurrentNodes, _mainThreadNodes ; + private SemaphoreSlim runningStat,_concurrentLock = new SemaphoreSlim(1, 1); + internal Dictionary _allNode; + + public PipelineScheduler() + { + _allNode = new Dictionary(); + runningStat = new SemaphoreSlim(1, 1); + _beginning = new BeginningNode(this); + _ending = new EndingNode(this); + } + /**/ + + public PipelineNode this[PipelineNodeLabel label] + { + get { return _allNode[label]; } + } + + public bool IsRunning + { + get => runningStat.CurrentCount == 0; + } + + public IEnumerable InputPortName + { + get => _beginning.InputPorts.Keys; + } + + public IEnumerable OutputPortName + { + get => _beginning.OutputPorts.Keys; + } + + public PipelineNode BeginLayer => _beginning; + + public PipelineNode EndLayer => _ending; + + public PipelineNodeOperation Operation + { + get => (this as IConvertableToPipelineNode).NodeMain; + } + + /**/ + + internal SemaphoreSlim RunningStat + { + get => runningStat; + } + + public void AddNode(PipelineNode node, bool isNative) + { + ArgumentNullException.ThrowIfNull(node); + node.IsNative = isNative; + _allNode.TryAdd(node.Label, node); + } + + public void ArrangeNodes() + { + if (_isAvailable) { + return; + } + int maxLevel = 1; + Queue completedNodes = new Queue(); + foreach (PipelineNode item in _beginning.Next) + { + item.TryIncreaseLevelTo(1); + completedNodes.Enqueue(item); + } + + // calc level of nodes O(V) + while (completedNodes.Count > 0) + { + PipelineNode u = completedNodes.Dequeue(); + foreach (PipelineNode v in u.Next) + { + if (!v.TryIncreaseLevelTo(u.Level + 1)) { + throw new InvalidOperationException("Ring in DAG detected."); + } + if (v.RemainingIncreaseCount == 0) + { + completedNodes.Enqueue(v); + maxLevel = int.Max(maxLevel, v.Level); + } + } + } + + // bucket sort of nodes, O(E) + _concurrentNodes = new List>(maxLevel + 1); + _mainThreadNodes = new List>(maxLevel + 1); + for (int i = 0; i <= maxLevel; i++) + { + _concurrentNodes.Add([]); + _mainThreadNodes.Add([]); + } + foreach (PipelineNode item in _allNode.Values) + { + if (item.IsNative) + { + _mainThreadNodes[item.Level].Add(item); + } else + { + _concurrentNodes[item.Level].Add(item); + } + } + foreach (List item in _concurrentNodes) { + item.TrimExcess(); + } + foreach (List item in _mainThreadNodes) { + item.TrimExcess(); + } + _isAvailable = true; + } + + public PipelineNode Create(PipelineNodeLabel label, [NotNull] IConvertableToPipelineNode body) + { + if (_allNode.TryGetValue(label, out PipelineNode? node)) { + throw new InvalidOperationException("Label has exist in scheduler."); + } + node = new PipelineNode(label, body, false); + _allNode.Add(label, node); + return node; + } + + public PipelineNode GetNode(PipelineNodeLabel label) + { + if (_allNode.TryGetValue(label, out PipelineNode? node)) + { + return node; + } else + { + throw new KeyNotFoundException(); + } + } + + public void LinkToInput(PipelineNodeInPort port) + { + ArgumentNullException.ThrowIfNull(port); + PipelineNodeOutPort p = _beginning.DefaultOut; + p.Connect(port); + } + + public void LinkToInput(PipelineNodeInPort port, string inputPortName) + { + ArgumentNullException.ThrowIfNull(port); + PipelineNodeOutPort p = _beginning.DefineCertainOutputPort(inputPortName); + p.Connect(port); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetInput(params (string label, IPipeLineConnectionPayload arg)[] parameters) + { + _beginning.SetInputData(parameters); + } + + public void Terminate() + { + _concurrentLock.Wait(); + (mtLevel, cLevel, mtIndex, cIndex) = (int.MaxValue, int.MaxValue, int.MaxValue, int.MaxValue); + _concurrentLock.Release(); + } + + public bool TryGetAllNode( + out List> mainThreadNodes, + out List> concurrentNodes) + { + if (_isAvailable) + { + mainThreadNodes = _mainThreadNodes; + concurrentNodes = _concurrentNodes; + return true; + } + mainThreadNodes = null; + concurrentNodes = null; + return false; + } + + internal bool RequestNexConcurrentNode(out PipelineNode node) + { + int index, level; + if (cLevel >= _concurrentNodes.Count) + { + node = null!; + return false; + } + _concurrentLock.Wait(); + while (cIndex >= _concurrentNodes[cLevel].Count) + { + Interlocked.Increment(ref cLevel); + Interlocked.Exchange(ref cIndex, 0); + if (cLevel >= _concurrentNodes.Count) + { + node = null!; + return false; + } + } + index = cIndex; + level = cLevel; + Interlocked.Increment(ref cIndex); + _concurrentLock.Release(); + node = _concurrentNodes[level][index]; + return true; + } + + internal bool RequestNextMainThreadNode(out PipelineNode node) + { + if (mtLevel >= _mainThreadNodes.Count) + { + node = null!; + return false; + } + while (mtIndex >= _mainThreadNodes[cLevel].Count) + { + Interlocked.Increment(ref mtLevel); + Interlocked.Exchange(ref mtIndex, 0); + if (mtLevel >= _mainThreadNodes.Count) + { + node = null!; + return false; + } + } + node = _mainThreadNodes[mtLevel][mtIndex]; + return true; + } + + internal void ResetIndex() + { + (mtLevel, cLevel, mtIndex, cIndex) = (0, 0, 0, 0); + _concurrentLock.Release(); + } + + void IConvertableToPipelineNode.NodeMain( + in Dictionary input, + in Dictionary output) + { + PipeLineRunner.Run(this); + PipelineNodeOutPort.SkipAll(output); + } + + ~PipelineScheduler() + { + runningStat.Dispose(); + } + + } +} diff --git a/StgSharp.Common/PipeLine/PortArgs.cs b/StgSharp.Common/PipeLine/PortArgs.cs new file mode 100644 index 00000000..0a799c7f --- /dev/null +++ b/StgSharp.Common/PipeLine/PortArgs.cs @@ -0,0 +1,123 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="PortArgs" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Security.Authentication.ExtendedProtection; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + public class PipelineConnector + { + + private protected IPipeLineConnectionPayload args; + private protected PipelineNodeInPort output; + private protected PipelineNodeOutPort input; + private protected SemaphoreSlim formerCompleteSemaphore; + + public PipelineConnector(PipelineNodeOutPort former, PipelineNodeInPort after) + { + this.input = former; + this.output = after; + formerCompleteSemaphore = new SemaphoreSlim(initialCount:0, maxCount:1); + } + + public IPipeLineConnectionPayload Args + { + get => args; + set => args = value; + } + + public PipelineNodeInPort Output => output; + + public PipelineNodeOutPort Input => input; + + public static void SkipAll(Dictionary ports) + { + if (ports == null) { + return; + } + foreach (KeyValuePair item in ports) + { + if (item.Value != null) { + item.Value.CompleteAndSkip(); + } + } + } + + public static void WaitAll(Dictionary ports) + { + if (ports == null) { + return; + } + foreach (KeyValuePair item in ports) + { + if (item.Value != null) { + item.Value.WaitForStart(); + } + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public virtual void WaitForStart() + { + // Console.WriteLine($"Waiting \t{input.ContextName}\t->\t{output.ContextName}"); + formerCompleteSemaphore.Wait(); + } + + ~PipelineConnector() + { + formerCompleteSemaphore.Dispose(); + } + + #region pipline op + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CompleteAndSkip() + { + // Console.WriteLine($"Complete\t{input.Name}\t->\t{output.Name}"); + formerCompleteSemaphore.Release(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CompleteAndWriteData(IPipeLineConnectionPayload args) + { + this.args = args; + CompleteAndSkip(); + } + + #endregion + } + + public abstract class IPipeLineConnectionPayload { } +} diff --git a/StgSharp.Common/PipeLine/SideNode.cs b/StgSharp.Common/PipeLine/SideNode.cs new file mode 100644 index 00000000..bac1eec2 --- /dev/null +++ b/StgSharp.Common/PipeLine/SideNode.cs @@ -0,0 +1,93 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="SideNode" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Security.Principal; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.PipeLine +{ + internal sealed class BeginningNode : PipelineNode + { + + public const string OutName = "default"; + + private PipelineScheduler _bp; + + public BeginningNode(PipelineScheduler bp) + : base( + DefaultOperation, new PipelineNodeStringLabel("BeginningNode"), true, [ "default" ],[ OutName ]) + { + _bp = bp; + } + + public PipelineNodeOutPort DefaultOut => OutputPorts[OutName]; + + public override void Run() + { + _bp.RunningStat.Wait(); + PipelineNodeOutPort.SkipAll(_output); + } + + internal void SetInputData(IEnumerable<(string, IPipeLineConnectionPayload)> data) + { + if (data is null) { + return; + } + foreach ((string, IPipeLineConnectionPayload) item in data) { + OutputPorts[item.Item1].TransmitValue(item.Item2); + } + } + + } + + internal sealed class EndingNode : PipelineNode + { + + private PipelineScheduler _bp; + + public EndingNode(PipelineScheduler bp) + : base( + DefaultOperation, name:new PipelineNodeStringLabel("EndingNode"), true, [ "default" ],[ "default" ]) + { + _bp = bp; + } + + public override void Run() + { + PipelineNodeInPort.WaitAll(_input); + _bp.ResetIndex(); + _bp.RunningStat.Release(); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Stg/Bullet.cs b/StgSharp.Common/Stg/Bullet.cs new file mode 100644 index 00000000..6e437bc3 --- /dev/null +++ b/StgSharp.Common/Stg/Bullet.cs @@ -0,0 +1,75 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Bullet" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; + +using System; + +namespace StgSharp.Gaming +{ + public abstract class Bullet : IInstancing, IPlainEntity + { + + protected Bullet( + PlainInstancingBuffer buffer, + GeometryMotion movement, + Vec2 beginPosition, + float angle, + float scale) + { + ArgumentNullException.ThrowIfNull(buffer); + GlobalBuffer = buffer; + BufferId = buffer.CreateInstanceID(); + ((IInstancing)this).Scale = scale; + ((IInstancing)this).Coord = new Vec3(beginPosition, 0); + ((IInstancing)this).Rotation = angle; + Motion = movement; + } + + public GeometryMotion Motion { get; set; } + + public IInstancingBuffer GlobalBuffer { get; set; } + + public int BufferId { get; set; } + + public Vec2 CenterPosition { get; set; } + + public bool CollideWith(IPlainEntity entity) + { + throw new System.NotImplementedException(); + } + + Vec3 IInstancing.CenterPositionGlobal + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + } +} \ No newline at end of file diff --git a/StgSharp.Common/Stg/CollisionTexture.cs b/StgSharp.Common/Stg/CollisionTexture.cs new file mode 100644 index 00000000..a0f475fb --- /dev/null +++ b/StgSharp.Common/Stg/CollisionTexture.cs @@ -0,0 +1,174 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CollisionTexture" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; +using StgSharp.Internal; + +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.MVVM; + +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Linq; +using System.Resources; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Stg +{ + public interface IOneDimensionalCollisionTexture2D + { + + public void Init(Radius angleStride, string name); + + } + + public sealed class OneDimensionalCollisionTexture2D_GL : glRender, IOneDimensionalCollisionTexture2D + { + + private float[] textureOutput; + private ElementBuffer ebo; + private FrameBuffer fbo; + private RenderBuffer rbo; + + private ShaderProgram generatingShader; + + private TextureGL t; + + private VertexArray vao; + private VertexBuffer vbo; + + public OneDimensionalCollisionTexture2D_GL() { } + + public override bool IsContextSharable => false; + + public void GenerateCollisionTexture(IEnumerable bufferEnumeration) + { + fbo.Bind(0); + GL.ClearColor(0, 0, 0, 1); + GL.Clear(MaskBufferBit.DEPTH | MaskBufferBit.COLOR); + generatingShader.Use(); + vao.Bind(0); + + foreach (IInstancingBuffer item in bufferEnumeration) + { + IGeometry g = item.TypicalShape; + + if (g is not PlainGeometry) { + throw new InvalidOperationException( + "The current particle buffer contains non-planar geometry,"); + } + + ebo.Bind(0); + ebo.SetValue(0, g.VertexIndices, BufferUsage.StreamDraw); + + vbo.WriteVectorData(0, item.CoordAndRotationSpan, BufferUsage.StreamDraw); + vao.SetVertexAttribute(1, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + vao.SetVertexAttribute(2, 1, TypeCode.Single, false, 4 * sizeof(float), 3 * sizeof(float)); + + vbo.WriteScalerData(2, item.ScalingSpan, BufferUsage.StreamDraw); + vao.SetVertexAttribute(3, 1, TypeCode.Single, false, sizeof(float), 0); + + vbo.WriteVectorData(1, g.VertexStream, BufferUsage.StreamDraw); + vao.SetVertexAttribute(0, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + + GL.DrawElementsInstanced( + GeometryType.TRIANGLES, ((uint)g.VertexIndices.Length) / 3, TypeCode.UInt32, + IntPtr.Zero, (uint)item.ScalingSpan.Length); + } + + t.Bind2D(0); + GL.GetTextureImage( + Texture2DTarget.Texture2D, 0, ImageChannel.SingleColor, PixelChannelLayout.Float, + textureOutput); + VertexArray.BindNull(); + } + + public void Init(Radius angleStride, string name) + { + primeArgs = new ViewPort( + 1, (int)((new Radius(Scalar.Pi)) / angleStride), name, IntPtr.Zero); + + PlatformSpecifiedInitialize(); + CustomizeInit(); + } + + #pragma warning disable CS8618 + + protected override void CustomizeDeinit() + { + throw new NotImplementedException(); + } + + protected override void CustomizeInit() + { + generatingShader = CreateShaderProgram(); + + Shader vertexShader = CreateShaderSegment(ShaderType.Vertex, 1); + Shader fragmentShader = CreateShaderSegment(ShaderType.Fragment, 1); + + vertexShader.Compile(0, BuiltInShader.CollisionTextureVertexShader); + fragmentShader.Compile(0, BuiltInShader.CollisionTextureFragmentShader); + vertexShader.AttachTo(0, generatingShader); + fragmentShader.AttachTo(0, generatingShader); + + generatingShader.Link(); + generatingShader.Use(); + + vbo = CreateVertexBuffer(3); + vao = CreateVertexArray(1); + ebo = CreateElementBuffer(1); + + + fbo = CreateFrameBuffer(1); + rbo = CreateRenderBuffer(1); + GL.SetRenderBufferStorage(RenderBufferInternalFormat.Depth24_Stencil8, this.Size); + + + t = CreateTexture(1); + t.Bind2D(0); + GL.TextureImage2d + (Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, (uint)Width, (uint)Height + , ImageChannel.WithAlphaChannel, PixelChannelLayout.Byte, Array.Empty()); + + t.Set2dWrapProperty(0, TextureWrap.Repeat, TextureWrap.Repeat); + t.Set2dFilterProperty(0, TextureFilter.Nearest, TextureFilter.Nearest); + + GL.FrameBufferTexture2d( + FrameBufferTarget.All, glAttachment.Color(0), Texture2DTarget.Texture2D, t[0], 0); + + GL.CombineFrameBufferRenderBuffer(FrameBufferAttachment.Color, rbo[0]); + + textureOutput = new float[this.Width]; + } + + } +} diff --git a/StgSharp.Common/Stg/TimeLine.cs b/StgSharp.Common/Stg/TimeLine.cs new file mode 100644 index 00000000..5eb9592f --- /dev/null +++ b/StgSharp.Common/Stg/TimeLine.cs @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TimeLine" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Stg +{ + public class TimeLine { } +} diff --git a/StgSharp.Common/Stg/Touhou/TouhouBuilder.cs b/StgSharp.Common/Stg/Touhou/TouhouBuilder.cs new file mode 100644 index 00000000..b92c742b --- /dev/null +++ b/StgSharp.Common/Stg/Touhou/TouhouBuilder.cs @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TouhouBuilder" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.Touhou; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Stg.Touhou +{ + public static class TouhouBuilder + { + /* + public static ViewBase BuildTouhouWorld() + { + + TouhouForm form = new TouhouForm(); + + + return form; + } + /**/ + + } +} diff --git a/StgSharp.Common/Stg/Touhou/TouhouWindow.cs b/StgSharp.Common/Stg/Touhou/TouhouWindow.cs new file mode 100644 index 00000000..82b2a9f6 --- /dev/null +++ b/StgSharp.Common/Stg/Touhou/TouhouWindow.cs @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TouhouWindow" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Touhou +{ + public abstract class TouhouWindowMain : ViewModelBase + { + + protected TouhouWindowMain(ViewPort vp) : base(vp, 60) { } + + } +} diff --git a/StgSharp.Common/Stg/Touhou/View/OpenningView.cs b/StgSharp.Common/Stg/Touhou/View/OpenningView.cs new file mode 100644 index 00000000..42ceba70 --- /dev/null +++ b/StgSharp.Common/Stg/Touhou/View/OpenningView.cs @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="OpenningView" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Stg.Touhou +{ + public abstract class OpenningView : ViewBase + { + + public override void CustomizedInitialize(ViewModelBase viewModelBinding) + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Common/StgSharp.Common.csproj b/StgSharp.Common/StgSharp.Common.csproj new file mode 100644 index 00000000..e3c96fde --- /dev/null +++ b/StgSharp.Common/StgSharp.Common.csproj @@ -0,0 +1,147 @@ + + + + net8.0 + True + Preview + True + True + x64;ARM64 + False + True + MIT + True + preview-all + Library + enable + Debug;Release;PerformanceDebug + + + + True + + + + True + + + + False + portable + 1701;1702;0649;1591;0169 + False + + + + False + portable + 1701;1702;0649;1591;0169 + False + + + + True + embedded + 1701;1702;0649;1591;0169 + False + + + + True + embedded + 1701;1702;0649;1591;0169 + False + + + + none + 1701;1702;0649;1591;0169 + False + True + + + + none + 1701;1702;0649;1591;0169 + False + True + + + + none + 1701;1702;0649;1591;0169 + False + True + + + + none + 1701;1702;0649;1591;0169 + False + True + + + + true + true + true + + + + WINDOWS + + + OSX + + + LINUX + + + + + + + + + + + + + + + + + Always + + + + + + + + + $(ColiisionTextureVertexShader) + $(ColiisionTextureFragmentShader) + False + send + https://github.com/Nitload-NSI/StgSharp + https://github.com/Nitload-NSI/StgSharp.git + + + + False + + + + False + + + + False + + + + + + + diff --git a/StgSharp.Common/StgSharp.Common.csproj.user b/StgSharp.Common/StgSharp.Common.csproj.user new file mode 100644 index 00000000..b7511698 --- /dev/null +++ b/StgSharp.Common/StgSharp.Common.csproj.user @@ -0,0 +1,6 @@ + + + + <_LastSelectedProfileId>D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\内核源代码\StgSharp.Common\Properties\PublishProfiles\FolderProfile.pubxml + + \ No newline at end of file diff --git a/StgSharp.Common/Threading/CancellableTask.cs b/StgSharp.Common/Threading/CancellableTask.cs new file mode 100644 index 00000000..18a133f5 --- /dev/null +++ b/StgSharp.Common/Threading/CancellableTask.cs @@ -0,0 +1,154 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CancellableTask" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + public class CancellableTask : IDisposable + { + + private bool disposedValue; + private CancellationTokenSource cts; + private protected Action _startup; + private protected Task _internalTask; + + private protected CancellableTask() + { + cts = new CancellationTokenSource(); + } + + private protected CancellableTask(Action action) + { + _internalTask = new Task(InternalAction); + cts = new CancellationTokenSource(); + } + + public bool IsCompleted + { + get => _internalTask.IsCompleted; + } + + public CancellationTokenSource Cts + { + get => cts; + } + + public int Id + { + get => _internalTask.Id; + } + + public void Cancel() + { + Cts.Cancel(); + } + + public void CancelAndWait() + { + Cts.Cancel(); + _internalTask.Wait(); + } + + // ~CancellableTask() + // { + // Dispose(disposing: false); + // } + + public void Dispose() + { + Dispose(disposing:true); + GC.SuppressFinalize(this); + } + + public static CancellableTask Run(Action startup) + { + CancellableTask ret = new CancellableTask + { + _startup = startup + }; + ret._internalTask = Task.Run(ret.InternalAction); + return ret; + } + + public void Wait() + { + _internalTask.Wait(); + } + + public static void WaitAll(IEnumerable tasks) + { + IEnumerable convertedTasks = tasks.Select( + ct => ct._internalTask); + Task.WaitAll(convertedTasks.ToArray()); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal void InternalAction() + { + _startup(Cts.Token); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + if (IsCompleted) + { + cts.Dispose(); + _internalTask.Dispose(); + } else + { + throw new InvalidOperationException( + "Cannot dispose a cancellable task before completed"); + } + } + + disposedValue = true; + } + } + + public static implicit operator Task(CancellableTask task) + { + return task._internalTask; + } + + ~CancellableTask() + { + Cts.Dispose(); + } + + } +} diff --git a/StgSharp.Common/Threading/EmptyThread.cs b/StgSharp.Common/Threading/EmptyThread.cs new file mode 100644 index 00000000..7863593e --- /dev/null +++ b/StgSharp.Common/Threading/EmptyThread.cs @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="EmptyThread" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StgSharp.Threading +{ + public static partial class ThreadHelper + { + + private static readonly Thread _emptyThreadCache = new Thread(() => { }); + + static ThreadHelper() + { + _emptyThreadCache.Start(); + } + + /// + /// An individual thread doing nothing, and its always returns false. + /// + public static Thread EmptyThread + { + get => _emptyThreadCache; + } + + } +} diff --git a/StgSharp.Common/Threading/MainThreadAssert.cs b/StgSharp.Common/Threading/MainThreadAssert.cs new file mode 100644 index 00000000..3928ffa6 --- /dev/null +++ b/StgSharp.Common/Threading/MainThreadAssert.cs @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="MainThreadAssert" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Diagnostics; +using System.Threading; + +namespace StgSharp.Threading +{ + public static partial class ThreadHelper + { + + private static readonly int mainThreadId = Environment.CurrentManagedThreadId; + private static readonly ThreadLocal isNotMainThread = new( + () => Environment.CurrentManagedThreadId != mainThreadId); + + [Conditional("DEBUG")] + internal static void MainThreadAssert() + { + if (isNotMainThread.Value) { + throw new InvalidOperationException( + $"Attempt to call sensitive operation which can be only called from main thread from thread {Environment.CurrentManagedThreadId}."); + } + } + + } +} diff --git a/StgSharp.Common/Timing/TimeSourceProvider.cs b/StgSharp.Common/Timing/TimeSourceProvider.cs new file mode 100644 index 00000000..d07c2fdc --- /dev/null +++ b/StgSharp.Common/Timing/TimeSourceProvider.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TimeSourceProvider" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp; + +using System; +using System.Linq; +using System.Threading; + +namespace StgSharp.Timing +{ + public abstract class TimeSourceProviderBase + { + + public abstract long Frequency { get; } + + protected object SubscribeLock { get; } = new(); + + public void AddSubscriber(TimeSpanProvider subscriber) + { + lock (SubscribeLock) { + AddSubscriberUnsynced(subscriber); + } + } + + public abstract long GetCurrentTimeSpanTick(); + + public void RemoveSubscriber(TimeSpanProvider subscriber) + { + lock (SubscribeLock) { + RemoveSubscriberUnsynced(subscriber); + } + } + + public abstract void StartProvidingTime(); + + public abstract void StopProvidingTime(); + + protected abstract void AddSubscriberUnsynced(TimeSpanProvider subscriber); + + protected abstract void RemoveSubscriberUnsynced(TimeSpanProvider subscriber); + + } +} diff --git a/StgSharp.Common/Timing/TimeSpanProvider.cs b/StgSharp.Common/Timing/TimeSpanProvider.cs new file mode 100644 index 00000000..f847b1f5 --- /dev/null +++ b/StgSharp.Common/Timing/TimeSpanProvider.cs @@ -0,0 +1,94 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="TimeSpanProvider" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Common.Timing; +using System; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace StgSharp.Timing +{ + /// + /// TimeSpanProvider: uses a bound TimeSequence and TimeSourceProviderBase to publish span + /// ticks. Each OnSpanTick advances the sequence; when sequence ends provider unsubscribes. + /// + public partial class TimeSpanProvider + { + + // private bool _subscribed; + private int _emittedSpanCount; // legacy counter + + // internal ended flag (0 = running, 1 = ended) + private int _endedFlag; + private readonly TimeSequence _sequence; + private readonly TimeSourceProviderBase _timeSource; + + public TimeSpanProvider( + TimeSequence sequence, + TimeSourceProviderBase provider, + int maxWaitCount = 1) + { + ArgumentNullException.ThrowIfNull(provider); + ArgumentNullException.ThrowIfNull(sequence); + _timeSource = provider; + _sequence = sequence; + _sequence.StartFrom(provider); + provider.AddSubscriber(this); + + // _subscribed = true; + if (!s_unusedID.TryPop(out int id)) + { + id = Interlocked.Increment(ref s_maxID); + } + TokenID = id; + _size = maxWaitCount > 0 ? maxWaitCount : 1; + _event = new ManualResetEventSlim(initialState:false, spinCount:0); + _pendingSpans = 0; + } + + /// + /// True when the provider has reached its end and will not emit further spans. + /// + public bool IsEnded => Volatile.Read(ref _endedFlag) != 0; + + /// + /// Current emitted time in seconds relative to the sequence beginning. + /// + public double CurrentSecond + { + get => (double)(_sequence.PreviousFrameTick - _sequence.BeginningTick) / _timeSource.Frequency; + } + + public int CurrentSpan => _emittedSpanCount; + + public static TimeSourceProviderBase DefaultProvider => World.MainTimeProvider; + + public static explicit operator int(TimeSpanProvider provider) => provider?._emittedSpanCount ?? + 0; + + } +} \ No newline at end of file diff --git a/StgSharp.Mathematics/Numeric/MatrixCompute.Basic.cs b/StgSharp.Mathematics/Numeric/MatrixCompute.Basic.cs index 99bfe321..4200bd07 100644 --- a/StgSharp.Mathematics/Numeric/MatrixCompute.Basic.cs +++ b/StgSharp.Mathematics/Numeric/MatrixCompute.Basic.cs @@ -1,4 +1,8 @@ +<<<<<<< HEAD //----------------------------------------------------------------------- +======= +//----------------------------------------------------------------------- +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // ----------------------------------------------------------------------- // file="MatrixCompute.Basic" // Project: StgSharp @@ -30,7 +34,10 @@ using StgSharp.HighPerformance; using StgSharp.Internal; using System; using System.Collections.Generic; +<<<<<<< HEAD using System.ComponentModel.DataAnnotations.Schema; +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 using System.Linq; using System.Numerics; using System.Security.AccessControl; @@ -39,10 +46,20 @@ using System.Threading.Tasks; namespace StgSharp.Mathematics.Numeric { +<<<<<<< HEAD public static partial class MatrixCompute { public static unsafe void Add(Matrix left, Matrix right, Matrix ans) +======= + public static class MatrixCompute + { + + public static unsafe Matrix Add( + Matrix left, + Matrix right, + Matrix ans) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { if (left.ColumnLength != right.ColumnLength || left.RowLength != right.RowLength || @@ -58,7 +75,11 @@ namespace StgSharp.Mathematics.Numeric MatrixKernel* ansPtr = ans.Buffer; NativeIntrinsic.Intrinsic.f32_buffer_add(leftPtr, rightPtr, ansPtr, count); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } else if (count <= 1024) { MatrixParallelThread[] pool = MatrixParallel.LeadParallel(1); @@ -69,22 +90,35 @@ namespace StgSharp.Mathematics.Numeric NativeIntrinsic.Intrinsic.f32_buffer_add(leftPtr, rightPtr, ansPtr, count); MatrixParallel.ReturnParallelResources(ref pool); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } MatrixParallelTaskPackage* package = MatrixParallelFactory.CreateBaseTask(); package->Left = (nint)left.Buffer; package->Right = (nint)right.Buffer; package->Result = (nint)ans.Buffer; package->ElementSize = sizeof(float); +<<<<<<< HEAD package->PrimCount = ans.KernelColumnLength; package->SecCount = ans.KernelRowLength; +======= + package->PrimCount = left.KernelColumnLength; + package->SecCount = left.KernelRowLength; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 package->ComputeMode = new MatrixOpMode(MatrixOperationStyle.BUFFER_OP, MatrixOperationParam.LEFT_RIGHT_ANS_PARAM); package->ComputeHandle = (IntPtr)NativeIntrinsic.Intrinsic.f32_buffer_add; MatrixParallelHandle taskGroup = MatrixParallel.ScheduleTask(package); MatrixParallel.LaunchParallel(taskGroup, SleepMode.DeepSleep); taskGroup.Dispose(); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } public static unsafe void Fill(Matrix ans, float value) @@ -117,6 +151,7 @@ namespace StgSharp.Mathematics.Numeric taskGroup.Dispose(); } +<<<<<<< HEAD public static unsafe void Mul(Matrix left, Matrix right, Matrix ans) { // For matrix multiplication (left: MxK) * (right: KxN) => ans: MxN @@ -190,6 +225,22 @@ namespace StgSharp.Mathematics.Numeric } public static unsafe void Mul(Matrix left, float right, Matrix ans) +======= + public static unsafe Matrix Mul( + Matrix left, + Matrix right, + Matrix ans) + { + if (left.RowLength != right.ColumnLength || + left.RowLength != ans.RowLength || + right.ColumnLength != ans.ColumnLength) { + throw new IndexOutOfRangeException("Matrix dimensions must agree."); + } + throw new NotImplementedException(); + } + + public static unsafe Matrix Mul(Matrix left, float right, Matrix ans) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { if (left.ColumnLength != ans.ColumnLength || left.RowLength != ans.RowLength) { throw new IndexOutOfRangeException("Matrix dimensions must agree."); @@ -203,7 +254,11 @@ namespace StgSharp.Mathematics.Numeric MatrixKernel* ansPtr = ans.Buffer; NativeIntrinsic.Intrinsic.f32_buffer_scalar_mul(leftPtr, ansPtr, scalar, count); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } else if (count <= 1024) { MatrixParallelThread[] pool = MatrixParallel.LeadParallel(1); @@ -213,7 +268,11 @@ namespace StgSharp.Mathematics.Numeric NativeIntrinsic.Intrinsic.f32_buffer_scalar_mul(leftPtr, ansPtr, scalar, count); MatrixParallel.ReturnParallelResources(ref pool); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } MatrixParallelTaskPackage* package = MatrixParallelFactory.CreateBaseTask(); package->Right = (nint)left.Buffer; @@ -229,10 +288,20 @@ namespace StgSharp.Mathematics.Numeric MatrixParallel.LaunchParallel(taskGroup, SleepMode.DeepSleep); taskGroup.Dispose(); MatrixParallelFactory.Release(scalar); +<<<<<<< HEAD return; } public static unsafe void Sub(Matrix left, Matrix right, Matrix ans) +======= + return ans; + } + + public static unsafe Matrix Sub( + Matrix left, + Matrix right, + Matrix ans) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { if (left.ColumnLength != right.ColumnLength || left.RowLength != right.RowLength || @@ -248,7 +317,11 @@ namespace StgSharp.Mathematics.Numeric MatrixKernel* ansPtr = ans.Buffer; NativeIntrinsic.Intrinsic.f32_buffer_sub(leftPtr, rightPtr, ansPtr, count); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } else if (count <= 1024) { MatrixParallelThread[] pool = MatrixParallel.LeadParallel(1); @@ -259,7 +332,11 @@ namespace StgSharp.Mathematics.Numeric NativeIntrinsic.Intrinsic.f32_buffer_sub(leftPtr, rightPtr, ansPtr, count); MatrixParallel.ReturnParallelResources(ref pool); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } MatrixParallelTaskPackage* package = MatrixParallelFactory.CreateBaseTask(); package->Left = (nint)left.Buffer; @@ -274,7 +351,11 @@ namespace StgSharp.Mathematics.Numeric MatrixParallel.LaunchParallel(taskGroup, SleepMode.DeepSleep); taskGroup.Dispose(); +<<<<<<< HEAD return; +======= + return ans; +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } } diff --git a/StgSharp.Mathematics/Numeric/MatrixComputeModel.cs b/StgSharp.Mathematics/Numeric/MatrixComputeModel.cs index a96db5e0..b9c892c3 100644 --- a/StgSharp.Mathematics/Numeric/MatrixComputeModel.cs +++ b/StgSharp.Mathematics/Numeric/MatrixComputeModel.cs @@ -1,4 +1,8 @@ +<<<<<<< HEAD //----------------------------------------------------------------------- +======= +//----------------------------------------------------------------------- +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // ----------------------------------------------------------------------- // file="MatrixComputeModel" // Project: StgSharp @@ -76,13 +80,21 @@ namespace StgSharp.Mathematics.Numeric long offset = Unsafe.As(ref p->PrimTileOffset) * size; ((delegate* unmanaged[Cdecl]< void*, void*, ScalarPacket*, long, void>)p->ComputeHandle)((void*)(p->Right + offset), (void*)(p->Result + offset), +<<<<<<< HEAD p->Scalar, count); +======= + p->Scalar, count); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 MatrixParallelFactory.Release(p); } [MethodImpl(MethodImplOptions.AggressiveInlining)] +<<<<<<< HEAD internal static unsafe void KernelComputeBinary(MatrixParallelTaskPackage* p) +======= + internal static unsafe void Compute_Binary(MatrixParallelTaskPackage* p) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { int eSize = p->ElementSize; @@ -134,7 +146,11 @@ namespace StgSharp.Mathematics.Numeric } [MethodImpl(MethodImplOptions.AggressiveInlining)] +<<<<<<< HEAD internal static unsafe void KernelComputeBinaryScalar(MatrixParallelTaskPackage* p) +======= + internal static unsafe void Compute_BinaryScalar(MatrixParallelTaskPackage* p) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { int eSize = p->ElementSize; @@ -186,7 +202,11 @@ namespace StgSharp.Mathematics.Numeric } [MethodImpl(MethodImplOptions.AggressiveInlining)] +<<<<<<< HEAD internal static unsafe void KernelComputeUnary(MatrixParallelTaskPackage* p) +======= + internal static unsafe void Compute_Unary(MatrixParallelTaskPackage* p) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { int eSize = p->ElementSize; @@ -231,7 +251,11 @@ namespace StgSharp.Mathematics.Numeric } [MethodImpl(MethodImplOptions.AggressiveInlining)] +<<<<<<< HEAD internal static unsafe void KernelComputeUnaryScalar(MatrixParallelTaskPackage* p) +======= + internal static unsafe void Compute_UnaryScalar(MatrixParallelTaskPackage* p) +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { int eSize = p->ElementSize; @@ -275,7 +299,10 @@ namespace StgSharp.Mathematics.Numeric MatrixParallelFactory.Release(p); } +<<<<<<< HEAD internal static unsafe void PanelComputeBinary(MatrixParallelTaskPackage* p) { } +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 } } \ No newline at end of file diff --git a/StgSharp.Mathematics/Numeric/MatrixParallel.cs b/StgSharp.Mathematics/Numeric/MatrixParallel.cs index b2619463..b713c62a 100644 --- a/StgSharp.Mathematics/Numeric/MatrixParallel.cs +++ b/StgSharp.Mathematics/Numeric/MatrixParallel.cs @@ -1,4 +1,8 @@ +<<<<<<< HEAD //----------------------------------------------------------------------- +======= +//----------------------------------------------------------------------- +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // ----------------------------------------------------------------------- // file="MatrixParallel" // Project: StgSharp @@ -27,6 +31,7 @@ // ----------------------------------------------------------------------- using StgSharp.Collections; using System; +<<<<<<< HEAD using System.Collections.Generic; using System.Linq; using System.Text; @@ -35,6 +40,17 @@ using System.Threading.Tasks; namespace StgSharp.Mathematics.Numeric { public static class MatrixParallel +======= +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace StgSharp.Mathematics.Numeric +{ + public static partial class MatrixParallel +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 { private static bool _meaningful; @@ -96,4 +112,8 @@ namespace StgSharp.Mathematics.Numeric } } +<<<<<<< HEAD } +======= +} +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 diff --git a/StgSharp.Mathematics/Numeric/MatrixParallelThread.cs b/StgSharp.Mathematics/Numeric/MatrixParallelThread.cs index 0afa39ef..520cd90a 100644 --- a/StgSharp.Mathematics/Numeric/MatrixParallelThread.cs +++ b/StgSharp.Mathematics/Numeric/MatrixParallelThread.cs @@ -1,4 +1,8 @@ +<<<<<<< HEAD //----------------------------------------------------------------------- +======= +//----------------------------------------------------------------------- +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // ----------------------------------------------------------------------- // file="MatrixParallelThread" // Project: StgSharp @@ -114,6 +118,7 @@ namespace StgSharp.Mathematics.Numeric switch (p->ComputeMode.ParameterStyle) { case MatrixOperationParam.RIGHT_ANS_PARAM: +<<<<<<< HEAD MatrixComputeModel.KernelComputeUnary(p); break; case MatrixOperationParam.RIGHT_ANS_SCALAR_PARAM: @@ -124,6 +129,18 @@ namespace StgSharp.Mathematics.Numeric break; case MatrixOperationParam.LEFT_RIGHT_ANS_SCALAR_PARAM: MatrixComputeModel.KernelComputeBinaryScalar(p); +======= + MatrixComputeModel.Compute_Unary(p); + break; + case MatrixOperationParam.RIGHT_ANS_SCALAR_PARAM: + MatrixComputeModel.Compute_UnaryScalar(p); + break; + case MatrixOperationParam.LEFT_RIGHT_ANS_PARAM: + MatrixComputeModel.Compute_Binary(p); + break; + case MatrixOperationParam.LEFT_RIGHT_ANS_SCALAR_PARAM: + MatrixComputeModel.Compute_BinaryScalar(p); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 break; default: break; @@ -400,9 +417,13 @@ namespace StgSharp.Mathematics.Numeric private static extern IntPtr GetCurrentThread(); [DllImport("kernel32.dll")] +<<<<<<< HEAD private static extern nuint SetThreadAffinityMask( IntPtr hThread, nuint dwThreadAffinityMask); +======= + private static extern nuint SetThreadAffinityMask(IntPtr hThread, nuint dwThreadAffinityMask); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 [LibraryImport("kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] diff --git a/StgSharp.Mathematics/Numeric/TaskPackageUsage.md b/StgSharp.Mathematics/Numeric/TaskPackageUsage.md new file mode 100644 index 00000000..e69de29b diff --git a/StgSharp.Model/StgSharp.Model.csproj b/StgSharp.Model/StgSharp.Model.csproj new file mode 100644 index 00000000..0d74645a --- /dev/null +++ b/StgSharp.Model/StgSharp.Model.csproj @@ -0,0 +1,21 @@ + + + + net8.0 + enable + preview + x64 + True + MIT + True + False + True + Debug;Release;PerformanceDebug + + + + + + + + diff --git a/StgSharp.Native/StgSharp.Native.vcxproj b/StgSharp.Native/StgSharp.Native.vcxproj new file mode 100644 index 00000000..81129ad1 --- /dev/null +++ b/StgSharp.Native/StgSharp.Native.vcxproj @@ -0,0 +1,187 @@ + + + + + Debug + x64 + + + PerformanceDebug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {20cbff26-6746-402e-992c-7b643e9423eb} + StgSharpC + 10.0 + StgSharp.Native + + + + DynamicLibrary + true + Unicode + false + v143 + + + DynamicLibrary + false + true + Unicode + v143 + + + DynamicLibrary + false + true + Unicode + v143 + + + + + + + + + + + + + + + + + + $(SolutionDir)build + + + $(SolutionDir)build + false + + + $(SolutionDir)build + false + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + stdc11 + Disabled + true + All + true + true + Speed + $(ProjectDir)lib;$(ProjectDir)sn-head;%(AdditionalIncludeDirectories) + + + Console + true + opengl32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Speed + All + Default + stdc11 + CompileAsC + true + $(ProjectDir)lib;$(ProjectDir)sn-head;%(AdditionalIncludeDirectories) + + + Console + true + true + false + opengl32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + LinkVerbose + UseLinkTimeCodeGeneration + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Speed + All + Default + stdc11 + CompileAsC + true + $(ProjectDir)lib;$(ProjectDir)sn-head;%(AdditionalIncludeDirectories) + + + Console + true + true + false + opengl32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + LinkVerbose + UseLinkTimeCodeGeneration + + + + + + + + + + + + CCode + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StgSharp.Native/sn-head/StgSharpC.h b/StgSharp.Native/sn-head/StgSharpC.h new file mode 100644 index 00000000..7730729e --- /dev/null +++ b/StgSharp.Native/sn-head/StgSharpC.h @@ -0,0 +1,73 @@ +#ifdef _MSC_VER +#pragma once +#endif + +#ifndef SSC +#define SSC + +#include "ssc_internal.h" + +#define STBIDEF SSCAPI +#include "stb_image.h" + +#include "gl.h" +#include "wgl.h" +#include "glfw3.h" +#include +#include + +#ifndef SSCAPI_DEFINE + +#ifdef _WIN32 +#define SSCAPI __declspec(dllexport) +#elif defined _LINUX_ +#define SSCAPI __attribute__((dllexport)) +#elif defined _APPLE_ +#define SSCAPI __attribute__((visibility("default"))) +#else +#define SSCAPI +#endif + +#endif // ! SSCAPI_DEFINE + +#if __cplusplus +extern "C" { +#endif + +#define byte char +#define cs_char uint16_t +#define ssc_null_assert(ptr) assert(ptr != NULL) + +#define ALIGN(simdVec) _mm_loadu_ps(&simdVec) +#define ALIGN256(simdVec) _mm256_loadu_ps(&simdVec) +#define ALIGN512(simdVec) _mm512_loadu_ps(&simdVec) + +typedef struct Image { + int width; + int height; + int channel; + char *pixelPtr; +} Image; + +typedef char *(*imageLoader)(char const *filename, int *x, int *y, int *channels_in_file, + int desired_channels); + +SSCAPI char infolog[512]; +SSCAPI int SSCDECL glCheckShaderStat(GladGLContext *context, uint64_t shaderHandle, int key, + char **logRef); +SSCAPI void SSCDECL initGL(int majorVersion, int minorVersion); +SSCAPI unsigned int SSCDECL linkShaderProgram(GladGLContext *context, GLuint shadertype); +SSCAPI void SSCDECL loadImageData(char *location, Image *out, imageLoader loader); +SSCAPI GLFWglproc SSCDECL loadGlfuncDefault(char *procName); +SSCAPI void SSCDECL unloadImageData(Image *out); +SSCAPI char *SSCDECL readLog(void); + +#pragma endregion + +SSCAPI int SSCDECL load_intrinsic_function(void *intrinsic_context); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/StgSharp.Native/sn-head/gl.h b/StgSharp.Native/sn-head/gl.h new file mode 100644 index 00000000..192f3429 --- /dev/null +++ b/StgSharp.Native/sn-head/gl.h @@ -0,0 +1,12656 @@ +/** + * Loader generated by glad 2.0.5 on Fri Feb 16 00:51:02 2024 + * + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + * + * Generator: C/C++ + * Specification: gl + * Extensions: 619 + * + * APIs: + * - gl:core=4.6 + * + * Options: + * - ALIAS = False + * - DEBUG = False + * - HEADER_ONLY = False + * - LOADER = False + * - MX = True + * - ON_DEMAND = False + * + * Commandline: + * --api='gl:core=4.6' --extensions='GL_3DFX_multisample,GL_3DFX_tbuffer,GL_3DFX_texture_compression_FXT1,GL_AMD_blend_minmax_factor,GL_AMD_conservative_depth,GL_AMD_debug_output,GL_AMD_depth_clamp_separate,GL_AMD_draw_buffers_blend,GL_AMD_framebuffer_multisample_advanced,GL_AMD_framebuffer_sample_positions,GL_AMD_gcn_shader,GL_AMD_gpu_shader_half_float,GL_AMD_gpu_shader_int16,GL_AMD_gpu_shader_int64,GL_AMD_interleaved_elements,GL_AMD_multi_draw_indirect,GL_AMD_name_gen_delete,GL_AMD_occlusion_query_event,GL_AMD_performance_monitor,GL_AMD_pinned_memory,GL_AMD_query_buffer_object,GL_AMD_sample_positions,GL_AMD_seamless_cubemap_per_texture,GL_AMD_shader_atomic_counter_ops,GL_AMD_shader_ballot,GL_AMD_shader_explicit_vertex_parameter,GL_AMD_shader_gpu_shader_half_float_fetch,GL_AMD_shader_image_load_store_lod,GL_AMD_shader_stencil_export,GL_AMD_shader_trinary_minmax,GL_AMD_sparse_texture,GL_AMD_stencil_operation_extended,GL_AMD_texture_gather_bias_lod,GL_AMD_texture_texture4,GL_AMD_transform_feedback3_lines_triangles,GL_AMD_transform_feedback4,GL_AMD_vertex_shader_layer,GL_AMD_vertex_shader_tessellator,GL_AMD_vertex_shader_viewport_index,GL_APPLE_aux_depth_stencil,GL_APPLE_client_storage,GL_APPLE_element_array,GL_APPLE_fence,GL_APPLE_float_pixels,GL_APPLE_flush_buffer_range,GL_APPLE_object_purgeable,GL_APPLE_rgb_422,GL_APPLE_row_bytes,GL_APPLE_specular_vector,GL_APPLE_texture_range,GL_APPLE_transform_hint,GL_APPLE_vertex_array_object,GL_APPLE_vertex_array_range,GL_APPLE_vertex_program_evaluators,GL_APPLE_ycbcr_422,GL_ARB_ES2_compatibility,GL_ARB_ES3_1_compatibility,GL_ARB_ES3_2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_arrays_of_arrays,GL_ARB_base_instance,GL_ARB_bindless_texture,GL_ARB_blend_func_extended,GL_ARB_buffer_storage,GL_ARB_cl_event,GL_ARB_clear_buffer_object,GL_ARB_clear_texture,GL_ARB_clip_control,GL_ARB_color_buffer_float,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_compute_shader,GL_ARB_compute_variable_group_size,GL_ARB_conditional_render_inverted,GL_ARB_conservative_depth,GL_ARB_copy_buffer,GL_ARB_copy_image,GL_ARB_cull_distance,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_derivative_control,GL_ARB_direct_state_access,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_draw_elements_base_vertex,GL_ARB_draw_indirect,GL_ARB_draw_instanced,GL_ARB_enhanced_layouts,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_coord_conventions,GL_ARB_fragment_layer_viewport,GL_ARB_fragment_program,GL_ARB_fragment_program_shadow,GL_ARB_fragment_shader,GL_ARB_fragment_shader_interlock,GL_ARB_framebuffer_no_attachments,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_geometry_shader4,GL_ARB_get_program_binary,GL_ARB_get_texture_sub_image,GL_ARB_gl_spirv,GL_ARB_gpu_shader5,GL_ARB_gpu_shader_fp64,GL_ARB_gpu_shader_int64,GL_ARB_half_float_pixel,GL_ARB_half_float_vertex,GL_ARB_imaging,GL_ARB_indirect_parameters,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_map_buffer_alignment,GL_ARB_map_buffer_range,GL_ARB_matrix_palette,GL_ARB_multi_bind,GL_ARB_multi_draw_indirect,GL_ARB_multisample,GL_ARB_multitexture,GL_ARB_occlusion_query,GL_ARB_occlusion_query2,GL_ARB_parallel_shader_compile,GL_ARB_pipeline_statistics_query,GL_ARB_pixel_buffer_object,GL_ARB_point_parameters,GL_ARB_point_sprite,GL_ARB_polygon_offset_clamp,GL_ARB_post_depth_coverage,GL_ARB_program_interface_query,GL_ARB_provoking_vertex,GL_ARB_query_buffer_object,GL_ARB_robust_buffer_access_behavior,GL_ARB_robustness,GL_ARB_robustness_isolation,GL_ARB_sample_locations,GL_ARB_sample_shading,GL_ARB_sampler_objects,GL_ARB_seamless_cube_map,GL_ARB_seamless_cubemap_per_texture,GL_ARB_separate_shader_objects,GL_ARB_shader_atomic_counter_ops,GL_ARB_shader_atomic_counters,GL_ARB_shader_ballot,GL_ARB_shader_bit_encoding,GL_ARB_shader_clock,GL_ARB_shader_draw_parameters,GL_ARB_shader_group_vote,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_precision,GL_ARB_shader_stencil_export,GL_ARB_shader_storage_buffer_object,GL_ARB_shader_subroutine,GL_ARB_shader_texture_image_samples,GL_ARB_shader_texture_lod,GL_ARB_shader_viewport_layer_array,GL_ARB_shading_language_100,GL_ARB_shading_language_420pack,GL_ARB_shading_language_include,GL_ARB_shading_language_packing,GL_ARB_shadow,GL_ARB_shadow_ambient,GL_ARB_sparse_buffer,GL_ARB_sparse_texture,GL_ARB_sparse_texture2,GL_ARB_sparse_texture_clamp,GL_ARB_spirv_extensions,GL_ARB_stencil_texturing,GL_ARB_sync,GL_ARB_tessellation_shader,GL_ARB_texture_barrier,GL_ARB_texture_border_clamp,GL_ARB_texture_buffer_object,GL_ARB_texture_buffer_object_rgb32,GL_ARB_texture_buffer_range,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_cube_map_array,GL_ARB_texture_env_add,GL_ARB_texture_env_combine,GL_ARB_texture_env_crossbar,GL_ARB_texture_env_dot3,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_filter_minmax,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_mirror_clamp_to_edge,GL_ARB_texture_mirrored_repeat,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_query_levels,GL_ARB_texture_query_lod,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_texture_stencil8,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_ARB_texture_swizzle,GL_ARB_texture_view,GL_ARB_timer_query,GL_ARB_transform_feedback2,GL_ARB_transform_feedback3,GL_ARB_transform_feedback_instanced,GL_ARB_transform_feedback_overflow_query,GL_ARB_transpose_matrix,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_bgra,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_64bit,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_blend,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_10f_11f_11f_rev,GL_ARB_vertex_type_2_10_10_10_rev,GL_ARB_viewport_array,GL_ARB_window_pos,GL_ATI_draw_buffers,GL_ATI_element_array,GL_ATI_envmap_bumpmap,GL_ATI_fragment_shader,GL_ATI_map_object_buffer,GL_ATI_meminfo,GL_ATI_pixel_format_float,GL_ATI_pn_triangles,GL_ATI_separate_stencil,GL_ATI_text_fragment_shader,GL_ATI_texture_env_combine3,GL_ATI_texture_float,GL_ATI_texture_mirror_once,GL_ATI_vertex_array_object,GL_ATI_vertex_attrib_array_object,GL_ATI_vertex_streams,GL_EXT_422_pixels,GL_EXT_EGL_image_storage,GL_EXT_EGL_sync,GL_EXT_abgr,GL_EXT_bgra,GL_EXT_bindable_uniform,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_separate,GL_EXT_blend_logic_op,GL_EXT_blend_minmax,GL_EXT_blend_subtract,GL_EXT_clip_volume_hint,GL_EXT_cmyka,GL_EXT_color_subtable,GL_EXT_compiled_vertex_array,GL_EXT_convolution,GL_EXT_coordinate_frame,GL_EXT_copy_texture,GL_EXT_cull_vertex,GL_EXT_debug_label,GL_EXT_debug_marker,GL_EXT_depth_bounds_test,GL_EXT_direct_state_access,GL_EXT_draw_buffers2,GL_EXT_draw_instanced,GL_EXT_draw_range_elements,GL_EXT_external_buffer,GL_EXT_fog_coord,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_blit_layers,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_shader4,GL_EXT_gpu_program_parameters,GL_EXT_gpu_shader4,GL_EXT_histogram,GL_EXT_index_array_formats,GL_EXT_index_func,GL_EXT_index_material,GL_EXT_index_texture,GL_EXT_light_texture,GL_EXT_memory_object,GL_EXT_memory_object_fd,GL_EXT_memory_object_win32,GL_EXT_misc_attribute,GL_EXT_multi_draw_arrays,GL_EXT_multisample,GL_EXT_multiview_tessellation_geometry_shader,GL_EXT_multiview_texture_multisample,GL_EXT_multiview_timer_query,GL_EXT_packed_depth_stencil,GL_EXT_packed_float,GL_EXT_packed_pixels,GL_EXT_paletted_texture,GL_EXT_pixel_buffer_object,GL_EXT_pixel_transform,GL_EXT_pixel_transform_color_table,GL_EXT_point_parameters,GL_EXT_polygon_offset,GL_EXT_polygon_offset_clamp,GL_EXT_post_depth_coverage,GL_EXT_provoking_vertex,GL_EXT_raster_multisample,GL_EXT_rescale_normal,GL_EXT_secondary_color,GL_EXT_semaphore,GL_EXT_semaphore_fd,GL_EXT_semaphore_win32,GL_EXT_separate_shader_objects,GL_EXT_separate_specular_color,GL_EXT_shader_framebuffer_fetch,GL_EXT_shader_framebuffer_fetch_non_coherent,GL_EXT_shader_image_load_formatted,GL_EXT_shader_image_load_store,GL_EXT_shader_integer_mix,GL_EXT_shader_samples_identical,GL_EXT_shadow_funcs,GL_EXT_shared_texture_palette,GL_EXT_sparse_texture2,GL_EXT_stencil_clear_tag,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_subtexture,GL_EXT_texture,GL_EXT_texture3D,GL_EXT_texture_array,GL_EXT_texture_buffer_object,GL_EXT_texture_compression_latc,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_cube_map,GL_EXT_texture_env_add,GL_EXT_texture_env_combine,GL_EXT_texture_env_dot3,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_filter_minmax,GL_EXT_texture_integer,GL_EXT_texture_lod_bias,GL_EXT_texture_mirror_clamp,GL_EXT_texture_object,GL_EXT_texture_perturb_normal,GL_EXT_texture_sRGB,GL_EXT_texture_sRGB_R8,GL_EXT_texture_sRGB_RG8,GL_EXT_texture_sRGB_decode,GL_EXT_texture_shadow_lod,GL_EXT_texture_shared_exponent,GL_EXT_texture_snorm,GL_EXT_texture_storage,GL_EXT_texture_swizzle,GL_EXT_timer_query,GL_EXT_transform_feedback,GL_EXT_vertex_array,GL_EXT_vertex_array_bgra,GL_EXT_vertex_attrib_64bit,GL_EXT_vertex_shader,GL_EXT_vertex_weighting,GL_EXT_win32_keyed_mutex,GL_EXT_window_rectangles,GL_EXT_x11_sync_object,GL_GREMEDY_frame_terminator,GL_GREMEDY_string_marker,GL_HP_convolution_border_modes,GL_HP_image_transform,GL_HP_occlusion_test,GL_HP_texture_lighting,GL_IBM_cull_vertex,GL_IBM_multimode_draw_arrays,GL_IBM_rasterpos_clip,GL_IBM_static_data,GL_IBM_texture_mirrored_repeat,GL_IBM_vertex_array_lists,GL_INGR_blend_func_separate,GL_INGR_color_clamp,GL_INGR_interlace_read,GL_INTEL_blackhole_render,GL_INTEL_conservative_rasterization,GL_INTEL_fragment_shader_ordering,GL_INTEL_framebuffer_CMAA,GL_INTEL_map_texture,GL_INTEL_parallel_arrays,GL_INTEL_performance_query,GL_KHR_blend_equation_advanced,GL_KHR_blend_equation_advanced_coherent,GL_KHR_context_flush_control,GL_KHR_debug,GL_KHR_no_error,GL_KHR_parallel_shader_compile,GL_KHR_robust_buffer_access_behavior,GL_KHR_robustness,GL_KHR_shader_subgroup,GL_KHR_texture_compression_astc_hdr,GL_KHR_texture_compression_astc_ldr,GL_KHR_texture_compression_astc_sliced_3d,GL_MESAX_texture_stack,GL_MESA_framebuffer_flip_x,GL_MESA_framebuffer_flip_y,GL_MESA_framebuffer_swap_xy,GL_MESA_pack_invert,GL_MESA_program_binary_formats,GL_MESA_resize_buffers,GL_MESA_shader_integer_functions,GL_MESA_tile_raster_order,GL_MESA_window_pos,GL_MESA_ycbcr_texture,GL_NVX_blend_equation_advanced_multi_draw_buffers,GL_NVX_conditional_render,GL_NVX_gpu_memory_info,GL_NVX_gpu_multicast2,GL_NVX_linked_gpu_multicast,GL_NVX_progress_fence,GL_NV_alpha_to_coverage_dither_control,GL_NV_bindless_multi_draw_indirect,GL_NV_bindless_multi_draw_indirect_count,GL_NV_bindless_texture,GL_NV_blend_equation_advanced,GL_NV_blend_equation_advanced_coherent,GL_NV_blend_minmax_factor,GL_NV_blend_square,GL_NV_clip_space_w_scaling,GL_NV_command_list,GL_NV_compute_program5,GL_NV_compute_shader_derivatives,GL_NV_conditional_render,GL_NV_conservative_raster,GL_NV_conservative_raster_dilate,GL_NV_conservative_raster_pre_snap,GL_NV_conservative_raster_pre_snap_triangles,GL_NV_conservative_raster_underestimation,GL_NV_copy_depth_to_color,GL_NV_copy_image,GL_NV_deep_texture3D,GL_NV_depth_buffer_float,GL_NV_depth_clamp,GL_NV_draw_texture,GL_NV_draw_vulkan_image,GL_NV_evaluators,GL_NV_explicit_multisample,GL_NV_fence,GL_NV_fill_rectangle,GL_NV_float_buffer,GL_NV_fog_distance,GL_NV_fragment_coverage_to_color,GL_NV_fragment_program,GL_NV_fragment_program2,GL_NV_fragment_program4,GL_NV_fragment_program_option,GL_NV_fragment_shader_barycentric,GL_NV_fragment_shader_interlock,GL_NV_framebuffer_mixed_samples,GL_NV_framebuffer_multisample_coverage,GL_NV_geometry_program4,GL_NV_geometry_shader4,GL_NV_geometry_shader_passthrough,GL_NV_gpu_multicast,GL_NV_gpu_program4,GL_NV_gpu_program5,GL_NV_gpu_program5_mem_extended,GL_NV_gpu_shader5,GL_NV_half_float,GL_NV_internalformat_sample_query,GL_NV_light_max_exponent,GL_NV_memory_attachment,GL_NV_memory_object_sparse,GL_NV_mesh_shader,GL_NV_multisample_coverage,GL_NV_multisample_filter_hint,GL_NV_occlusion_query,GL_NV_packed_depth_stencil,GL_NV_parameter_buffer_object,GL_NV_parameter_buffer_object2,GL_NV_path_rendering,GL_NV_path_rendering_shared_edge,GL_NV_pixel_data_range,GL_NV_point_sprite,GL_NV_present_video,GL_NV_primitive_restart,GL_NV_primitive_shading_rate,GL_NV_query_resource,GL_NV_query_resource_tag,GL_NV_register_combiners,GL_NV_register_combiners2,GL_NV_representative_fragment_test,GL_NV_robustness_video_memory_purge,GL_NV_sample_locations,GL_NV_sample_mask_override_coverage,GL_NV_scissor_exclusive,GL_NV_shader_atomic_counters,GL_NV_shader_atomic_float,GL_NV_shader_atomic_float64,GL_NV_shader_atomic_fp16_vector,GL_NV_shader_atomic_int64,GL_NV_shader_buffer_load,GL_NV_shader_buffer_store,GL_NV_shader_storage_buffer_object,GL_NV_shader_subgroup_partitioned,GL_NV_shader_texture_footprint,GL_NV_shader_thread_group,GL_NV_shader_thread_shuffle,GL_NV_shading_rate_image,GL_NV_stereo_view_rendering,GL_NV_tessellation_program5,GL_NV_texgen_emboss,GL_NV_texgen_reflection,GL_NV_texture_barrier,GL_NV_texture_compression_vtc,GL_NV_texture_env_combine4,GL_NV_texture_expand_normal,GL_NV_texture_multisample,GL_NV_texture_rectangle,GL_NV_texture_rectangle_compressed,GL_NV_texture_shader,GL_NV_texture_shader2,GL_NV_texture_shader3,GL_NV_timeline_semaphore,GL_NV_transform_feedback,GL_NV_transform_feedback2,GL_NV_uniform_buffer_std430_layout,GL_NV_uniform_buffer_unified_memory,GL_NV_vdpau_interop,GL_NV_vdpau_interop2,GL_NV_vertex_array_range,GL_NV_vertex_array_range2,GL_NV_vertex_attrib_integer_64bit,GL_NV_vertex_buffer_unified_memory,GL_NV_vertex_program,GL_NV_vertex_program1_1,GL_NV_vertex_program2,GL_NV_vertex_program2_option,GL_NV_vertex_program3,GL_NV_vertex_program4,GL_NV_video_capture,GL_NV_viewport_array2,GL_NV_viewport_swizzle,GL_OES_byte_coordinates,GL_OES_compressed_paletted_texture,GL_OES_fixed_point,GL_OES_query_matrix,GL_OES_read_format,GL_OES_single_precision,GL_OML_interlace,GL_OML_resample,GL_OML_subsample,GL_OVR_multiview,GL_OVR_multiview2,GL_PGI_misc_hints,GL_PGI_vertex_hints,GL_REND_screen_coordinates,GL_S3_s3tc,GL_SGIS_detail_texture,GL_SGIS_fog_function,GL_SGIS_generate_mipmap,GL_SGIS_multisample,GL_SGIS_pixel_texture,GL_SGIS_point_line_texgen,GL_SGIS_point_parameters,GL_SGIS_sharpen_texture,GL_SGIS_texture4D,GL_SGIS_texture_border_clamp,GL_SGIS_texture_color_mask,GL_SGIS_texture_edge_clamp,GL_SGIS_texture_filter4,GL_SGIS_texture_lod,GL_SGIS_texture_select,GL_SGIX_async,GL_SGIX_async_histogram,GL_SGIX_async_pixel,GL_SGIX_blend_alpha_minmax,GL_SGIX_calligraphic_fragment,GL_SGIX_clipmap,GL_SGIX_convolution_accuracy,GL_SGIX_depth_pass_instrument,GL_SGIX_depth_texture,GL_SGIX_flush_raster,GL_SGIX_fog_offset,GL_SGIX_fragment_lighting,GL_SGIX_framezoom,GL_SGIX_igloo_interface,GL_SGIX_instruments,GL_SGIX_interlace,GL_SGIX_ir_instrument1,GL_SGIX_list_priority,GL_SGIX_pixel_texture,GL_SGIX_pixel_tiles,GL_SGIX_polynomial_ffd,GL_SGIX_reference_plane,GL_SGIX_resample,GL_SGIX_scalebias_hint,GL_SGIX_shadow,GL_SGIX_shadow_ambient,GL_SGIX_sprite,GL_SGIX_subsample,GL_SGIX_tag_sample_buffer,GL_SGIX_texture_add_env,GL_SGIX_texture_coordinate_clamp,GL_SGIX_texture_lod_bias,GL_SGIX_texture_multi_buffer,GL_SGIX_texture_scale_bias,GL_SGIX_vertex_preclip,GL_SGIX_ycrcb,GL_SGIX_ycrcb_subsample,GL_SGIX_ycrcba,GL_SGI_color_matrix,GL_SGI_color_table,GL_SGI_texture_color_table,GL_SUNX_constant_data,GL_SUN_convolution_border_modes,GL_SUN_global_alpha,GL_SUN_mesh_array,GL_SUN_slice_accum,GL_SUN_triangle_list,GL_SUN_vertex,GL_WIN_phong_shading,GL_WIN_specular_fog' c --mx + * + * Online: + * http://glad.sh/#api=gl%3Acore%3D4.6&generator=c&options=MX + * + */ + +#ifndef GLAD_GL_H_ +#define GLAD_GL_H_ + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif +#ifdef __gl_h_ +#error OpenGL (gl.h) header already included (API: gl), remove previous include! +#endif +#define __gl_h_ 1 +#ifdef __gl3_h_ +#error OpenGL (gl3.h) header already included (API: gl), remove previous include! +#endif +#define __gl3_h_ 1 +#ifdef __glext_h_ +#error OpenGL (glext.h) header already included (API: gl), remove previous include! +#endif +#define __glext_h_ 1 +#ifdef __gl3ext_h_ +#error OpenGL (gl3ext.h) header already included (API: gl), remove previous include! +#endif +#define __gl3ext_h_ 1 +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#define GLAD_GL +#define GLAD_OPTION_GL_MX + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef GLAD_PLATFORM_H_ +#define GLAD_PLATFORM_H_ + +#ifndef GLAD_PLATFORM_WIN32 +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) +#define GLAD_PLATFORM_WIN32 1 +#else +#define GLAD_PLATFORM_WIN32 0 +#endif +#endif + +#ifndef GLAD_PLATFORM_APPLE +#ifdef __APPLE__ +#define GLAD_PLATFORM_APPLE 1 +#else +#define GLAD_PLATFORM_APPLE 0 +#endif +#endif + +#ifndef GLAD_PLATFORM_EMSCRIPTEN +#ifdef __EMSCRIPTEN__ +#define GLAD_PLATFORM_EMSCRIPTEN 1 +#else +#define GLAD_PLATFORM_EMSCRIPTEN 0 +#endif +#endif + +#ifndef GLAD_PLATFORM_UWP +#if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) +#ifdef __has_include +#if __has_include() +#define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 +#endif +#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ +#define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 +#endif +#endif + +#ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY +#include +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && \ + WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#define GLAD_PLATFORM_UWP 1 +#endif +#endif + +#ifndef GLAD_PLATFORM_UWP +#define GLAD_PLATFORM_UWP 0 +#endif +#endif + +#ifdef __GNUC__ +#define GLAD_GNUC_EXTENSION __extension__ +#else +#define GLAD_GNUC_EXTENSION +#endif + +#define GLAD_UNUSED(x) (void)(x) + +#ifndef GLAD_API_CALL +#if defined(GLAD_API_CALL_EXPORT) +#if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) +#if defined(GLAD_API_CALL_EXPORT_BUILD) +#if defined(__GNUC__) +#define GLAD_API_CALL __attribute__((dllexport)) extern +#else +#define GLAD_API_CALL __declspec(dllexport) extern +#endif +#else +#if defined(__GNUC__) +#define GLAD_API_CALL __attribute__((dllimport)) extern +#else +#define GLAD_API_CALL __declspec(dllimport) extern +#endif +#endif +#elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) +#define GLAD_API_CALL __attribute__((visibility("default"))) extern +#else +#define GLAD_API_CALL extern +#endif +#else +#define GLAD_API_CALL extern +#endif +#endif + +#ifdef APIENTRY +#define GLAD_API_PTR APIENTRY +#elif GLAD_PLATFORM_WIN32 +#define GLAD_API_PTR __stdcall +#else +#define GLAD_API_PTR +#endif + +#ifndef GLAPI +#define GLAPI GLAD_API_CALL +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY GLAD_API_PTR +#endif + +#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) +#define GLAD_VERSION_MAJOR(version) (version / 10000) +#define GLAD_VERSION_MINOR(version) (version % 10000) + +#define GLAD_GENERATOR_VERSION "2.0.5" + +typedef void (*GLADapiproc)(void); + +typedef GLADapiproc (*GLADloadfunc)(const char *name); +typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); + +typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); +typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, + ...); + +#endif /* GLAD_PLATFORM_H_ */ + +#define GL_1PASS_EXT 0x80A1 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_EXT 0x80CC +#define GL_422_REV_AVERAGE_EXT 0x80CF +#define GL_422_REV_EXT 0x80CD +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_ABGR_EXT 0x8000 +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_ADD_ATI 0x8963 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_ALL_PIXELS_AMD 0xFFFFFFFF +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_ALPHA 0x1906 +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16F_ARB 0x881C +#define GL_ALPHA16F_EXT 0x881C +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_ALPHA16_EXT 0x803E +#define GL_ALPHA16_SNORM 0x9018 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA8_SNORM 0x9014 +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#define GL_ALPHA_MAX_SGIX 0x8321 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_REF_COMMAND_NV 0x000F +#define GL_ALPHA_SNORM 0x9010 +#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D +#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F +#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E +#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF +#define GL_ALREADY_SIGNALED 0x911A +#define GL_ALWAYS 0x0207 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_AND 0x1501 +#define GL_AND_INVERTED 0x1504 +#define GL_AND_REVERSE 0x1502 +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_ARC_TO_NV 0xFE +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#define GL_ARRAY_SIZE 0x92FB +#define GL_ARRAY_STRIDE 0x92FE +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_ASYNC_MARKER_SGIX 0x8329 +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 +#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ATTENUATION_EXT 0x834D +#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#define GL_AVERAGE_EXT 0x8335 +#define GL_AVERAGE_HP 0x8160 +#define GL_BACK 0x0405 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_RIGHT 0x0403 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_BEVEL_NV 0x90A6 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_BGRA8_EXT 0x93A1 +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA_INTEGER 0x8D9B +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_BGR_EXT 0x80E0 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC +#define GL_BLEND 0x0BE2 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_COLOR_COMMAND_NV 0x000B +#define GL_BLEND_COLOR_EXT 0x8005 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#define GL_BLEND_EQUATION_EXT 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLOCK_INDEX 0x92FD +#define GL_BLUE 0x1905 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_BLUE_NV 0x1905 +#define GL_BOLD_BIT_NV 0x01 +#define GL_BOOL 0x8B56 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_BUFFER 0x82E0 +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_BUFFER_USAGE 0x8765 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_TARGET_ATI 0x877C +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_BYTE 0x1400 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_CCW 0x0901 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLEAR 0x1500 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 +#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 +#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_CMYKA_EXT 0x800D +#define GL_CMYK_EXT 0x800C +#define GL_CND0_ATI 0x896B +#define GL_CND_ATI 0x896A +#define GL_COLOR 0x1800 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_COLORBURN_KHR 0x929A +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORDODGE_NV 0x9299 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_COLOR_ENCODING 0x8296 +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_COMBINE4_NV 0x8503 +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_COMPILE_STATUS 0x8B81 +#define GL_COMPLETION_STATUS_ARB 0x91B1 +#define GL_COMPLETION_STATUS_KHR 0x91B1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_RG 0x8226 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 +#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_CONDITION_SATISFIED 0x911C +#define GL_CONFORMANT_NV 0x9374 +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_CONJOINT_NV 0x9284 +#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B +#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 +#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A +#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D +#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_CONSTANT_ARB 0x8576 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_CONSTANT_EXT 0x8576 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_FLAGS 0x821E +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_CONTEXT_LOST 0x0507 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 +#define GL_CONTINUOUS_AMD 0x9007 +#define GL_CONTRAST_NV 0x92A1 +#define GL_CONVEX_HULL_NV 0x908B +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_2_ATI 0x8943 +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_COORD_REPLACE_ARB 0x8862 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_CUBIC_EXT 0x8334 +#define GL_CUBIC_HP 0x815F +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_CULL_MODES_NV 0x86E0 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_IBM 103050 +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_CURRENT_QUERY 0x8865 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_CW 0x0900 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 +#define GL_DARKEN_KHR 0x9297 +#define GL_DARKEN_NV 0x9297 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DECODE_EXT 0x8A49 +#define GL_DECR 0x1E03 +#define GL_DECR_WRAP 0x8508 +#define GL_DECR_WRAP_EXT 0x8508 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_DELETE_STATUS 0x8B80 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DEPTH 0x1801 +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +#define GL_DEPTH_CLAMP 0x864F +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_NV 0x864F +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DETACHED_BUFFERS_NV 0x95AB +#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 +#define GL_DETACHED_TEXTURES_NV 0x95AA +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DIFFERENCE_KHR 0x929E +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISCARD_ATI 0x8763 +#define GL_DISCARD_NV 0x8530 +#define GL_DISCRETE_AMD 0x9006 +#define GL_DISJOINT_NV 0x9283 +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +#define GL_DITHER 0x0BD0 +#define GL_DONT_CARE 0x1100 +#define GL_DOT2_ADD_ATI 0x896C +#define GL_DOT3_ATI 0x8966 +#define GL_DOT3_RGBA_ARB 0x86AF +#define GL_DOT3_RGBA_EXT 0x8741 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT4_ATI 0x8967 +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_DOUBLE 0x140A +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 +#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 +#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 +#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 +#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_DSDT_NV 0x86F5 +#define GL_DST_ALPHA 0x0304 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_COLOR 0x0306 +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_BIAS_NV 0x8717 +#define GL_DT_SCALE_NV 0x8711 +#define GL_DU8DV8_ATI 0x877A +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_DUDV_ATI 0x8779 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_DYNAMIC_COPY_ARB 0x88EA +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_MAP_NV 0x855F +#define GL_EQUAL 0x0202 +#define GL_EQUIV 0x1509 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_EXCLUSIVE_EXT 0x8F11 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXTENSIONS 0x1F03 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_EYE_PLANE 0x2502 +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_EYE_RADIAL_NV 0x855B +#define GL_E_TIMES_F_NV 0x8531 +#define GL_FACTOR_MAX_AMD 0x901D +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FAILURE_NV 0x9030 +#define GL_FALSE 0 +#define GL_FASTEST 0x1101 +#define GL_FENCE_APPLE 0x8A0B +#define GL_FENCE_CONDITION_NV 0x84F4 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FIELDS_NV 0x8E27 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FILE_NAME_NV 0x9074 +#define GL_FILL 0x1B02 +#define GL_FILL_RECTANGLE_NV 0x933C +#define GL_FILTER 0x829A +#define GL_FILTER4_SGIS 0x8146 +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_FIXED 0x140C +#define GL_FIXED_OES 0x140C +#define GL_FIXED_ONLY 0x891D +#define GL_FIXED_ONLY_ARB 0x891D +#define GL_FLOAT 0x1406 +#define GL_FLOAT16_MAT2_AMD 0x91C5 +#define GL_FLOAT16_MAT2x3_AMD 0x91C8 +#define GL_FLOAT16_MAT2x4_AMD 0x91C9 +#define GL_FLOAT16_MAT3_AMD 0x91C6 +#define GL_FLOAT16_MAT3x2_AMD 0x91CA +#define GL_FLOAT16_MAT3x4_AMD 0x91CB +#define GL_FLOAT16_MAT4_AMD 0x91C7 +#define GL_FLOAT16_MAT4x2_AMD 0x91CC +#define GL_FLOAT16_MAT4x3_AMD 0x91CD +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_FOG 0x0B60 +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_FRAGMENT_INPUT_NV 0x936D +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 +#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_FRAMEBUFFER 0x8D40 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC +#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAME_NV 0x8E26 +#define GL_FRONT 0x0404 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_FRONT_FACE 0x0B46 +#define GL_FRONT_FACE_COMMAND_NV 0x0012 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEQUAL 0x0206 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GREATER 0x0204 +#define GL_GREEN 0x1904 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_GREEN_NV 0x1904 +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_HALF_APPLE 0x140B +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_HALF_FLOAT 0x140B +#define GL_HALF_FLOAT_ARB 0x140B +#define GL_HALF_FLOAT_NV 0x140B +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_HARDLIGHT_KHR 0x929B +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_HIGH_INT 0x8DF5 +#define GL_HILO16_NV 0x86F8 +#define GL_HILO8_NV 0x885E +#define GL_HILO_NV 0x86F4 +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HI_BIAS_NV 0x8714 +#define GL_HI_SCALE_NV 0x870E +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_IDENTITY_NV 0x862A +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_INCLUSIVE_EXT 0x8F10 +#define GL_INCR 0x1E02 +#define GL_INCR_WRAP 0x8507 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +#define GL_INT 0x1404 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_ARB 0x140E +#define GL_INT64_NV 0x140E +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_INTENSITY16_EXT 0x804D +#define GL_INTENSITY16_SNORM 0x901B +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_INGR 0x8568 +#define GL_INTERLACE_READ_OML 0x8981 +#define GL_INTERLACE_SGIX 0x8094 +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_INT_2_10_10_10_REV 0x8D9F +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_INVALID_INDEX 0xFFFFFFFF +#define GL_INVALID_OPERATION 0x0502 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_INVARIANT_EXT 0x87C2 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVERSE_NV 0x862B +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_INVERT 0x150A +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#define GL_ISOLINES 0x8E7A +#define GL_IS_PER_PATCH 0x92E7 +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_KEEP 0x1E00 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_LAYER_NV 0x8DAA +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LEFT 0x0406 +#define GL_LEQUAL 0x0203 +#define GL_LERP_ATI 0x8969 +#define GL_LESS 0x0201 +#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#define GL_LINE 0x1B01 +#define GL_LINEAR 0x2601 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_LINES 0x0001 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_LINE_STRIP 0x0003 +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_LINE_TO_NV 0x04 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_COMMAND_NV 0x000D +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINK_STATUS 0x8B82 +#define GL_LIST_PRIORITY_SGIX 0x8182 +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_EXT 0x87C4 +#define GL_LOCATION 0x930E +#define GL_LOCATION_COMPONENT 0x934A +#define GL_LOCATION_INDEX 0x930F +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_LOW_FLOAT 0x8DF0 +#define GL_LOW_INT 0x8DF3 +#define GL_LO_BIAS_NV 0x8715 +#define GL_LO_SCALE_NV 0x870F +#define GL_LUID_SIZE_EXT 8 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_MAD_ATI 0x8968 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_MAJOR_VERSION 0x821B +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP2_BINORMAL_EXT 0x8447 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX7_NV 0x8637 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX_EXT 0x87C0 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MATRIX_STRIDE 0x92FF +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_MAX 0x8008 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 +#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD +#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_MAX_EXT 0x8008 +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_LGPU_GPUS_NVX 0x92BA +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 +#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 +#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 +#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 +#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 +#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 +#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 +#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 +#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 +#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 +#define GL_MAX_MESH_VIEWS_NV 0x9557 +#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 +#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 +#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D +#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C +#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A +#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A +#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E +#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 +#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 +#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 +#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B +#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 +#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +#define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VIEWPORTS 0x825B +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 +#define GL_MEMORY_ATTACHABLE_NV 0x95A8 +#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 +#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 +#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF +#define GL_MESH_OUTPUT_TYPE_NV 0x957B +#define GL_MESH_PRIMITIVES_OUT_NV 0x957A +#define GL_MESH_SHADER_BIT_NV 0x00000040 +#define GL_MESH_SHADER_NV 0x9559 +#define GL_MESH_SUBROUTINE_NV 0x957C +#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E +#define GL_MESH_VERTICES_OUT_NV 0x9579 +#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E +#define GL_MIN 0x8007 +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_MINOR_VERSION 0x821C +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MIN_EXT 0x8007 +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIPMAP 0x8293 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW1_EXT 0x850A +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_MOVE_TO_NV 0x02 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOV_ATI 0x8961 +#define GL_MULTICAST_GPUS_NV 0x92BA +#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_MULTIPLY_NV 0x9294 +#define GL_MULTISAMPLE 0x809D +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_MUL_ATI 0x8964 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +#define GL_NAME_LENGTH 0x92F9 +#define GL_NAND 0x150E +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NEAREST 0x2600 +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEVER 0x0200 +#define GL_NEXT_BUFFER_NV -2 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_NICEST 0x1102 +#define GL_NONE 0 +#define GL_NOOP 0x1505 +#define GL_NOP_COMMAND_NV 0x0001 +#define GL_NOR 0x1508 +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_NOTEQUAL 0x0205 +#define GL_NO_ERROR 0 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_NUM_EXTENSIONS 0x821D +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 +#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_OBJECT_TYPE 0x9112 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#define GL_OFFSET 0x92FC +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_ONE 1 +#define GL_ONE_EXT 0x87DE +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_OPERAND2_ALPHA_EXT 0x859A +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND3_ALPHA_NV 0x859B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_MOV_EXT 0x8799 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_SUB_EXT 0x8796 +#define GL_OR 0x1507 +#define GL_OR_INVERTED 0x150D +#define GL_OR_REVERSE 0x150B +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_OVERLAY_KHR 0x9296 +#define GL_OVERLAY_NV 0x9296 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_PACK_INVERT_MESA 0x8758 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_PARAMETER_BUFFER 0x80EE +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING 0x80EF +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_PATCHES 0x000E +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERTURB_EXT 0x85AE +#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 +#define GL_PER_GPU_STORAGE_NV 0x9548 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#define GL_PHONG_HINT_WIN 0x80EB +#define GL_PHONG_WIN 0x80EA +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE +#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_POINT 0x1B00 +#define GL_POINTS 0x0000 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_PRESENT_DURATION_NV 0x8E2B +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESERVE_ATI 0x8762 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_PRIMITIVES_SUBMITTED 0x82EF +#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF +#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PROGRAM 0x82E2 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_PURGEABLE_APPLE 0x8A1D +#define GL_PURGED_CONTEXT_RESET_NV 0x92BB +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_QUADS 0x0007 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_QUERY 0x82E3 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 +#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 +#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 +#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 +#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 +#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_TARGET 0x82EA +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_R16 0x822A +#define GL_R16F 0x822D +#define GL_R16F_EXT 0x822D +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R16_SNORM 0x8F98 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R32F 0x822E +#define GL_R32F_EXT 0x822E +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_R3_G3_B2 0x2A10 +#define GL_R8 0x8229 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R8_EXT 0x8229 +#define GL_R8_SNORM 0x8F94 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_READ_BUFFER 0x0C02 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_READ_ONLY 0x88B8 +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#define GL_READ_WRITE 0x88BA +#define GL_READ_WRITE_ARB 0x88BA +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_RECT_NV 0xF6 +#define GL_RED 0x1903 +#define GL_REDUCE_EXT 0x8016 +#define GL_RED_BIT_ATI 0x00000001 +#define GL_RED_INTEGER 0x8D94 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_RED_NV 0x1903 +#define GL_RED_SNORM 0x8F90 +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 +#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_REFLECTION_MAP_NV 0x8512 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_2_ATI 0x8923 +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERER 0x1F01 +#define GL_RENDER_GPU_MASK_NV 0x9558 +#define GL_REPEAT 0x2901 +#define GL_REPLACE 0x1E01 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACE_EXT 0x8062 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 +#define GL_RESCALE_NORMAL_EXT 0x803A +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_RESTART_SUN 0x0001 +#define GL_RETAINED_APPLE 0x8A1B +#define GL_RG 0x8227 +#define GL_RG16 0x822C +#define GL_RG16F 0x822F +#define GL_RG16F_EXT 0x822F +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG16_SNORM 0x8F99 +#define GL_RG32F 0x8230 +#define GL_RG32F_EXT 0x8230 +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_RG8 0x822B +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG8_EXT 0x822B +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB 0x1907 +#define GL_RGB10 0x8052 +#define GL_RGB10_A2 0x8059 +#define GL_RGB10_A2UI 0x906F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGB16F 0x881B +#define GL_RGB16F_ARB 0x881B +#define GL_RGB16F_EXT 0x881B +#define GL_RGB16I 0x8D89 +#define GL_RGB16I_EXT 0x8D89 +#define GL_RGB16UI 0x8D77 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_RGB16_EXT 0x8054 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGB2_EXT 0x804E +#define GL_RGB32F 0x8815 +#define GL_RGB32F_ARB 0x8815 +#define GL_RGB32F_EXT 0x8815 +#define GL_RGB32I 0x8D83 +#define GL_RGB32I_EXT 0x8D83 +#define GL_RGB32UI 0x8D71 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_RGB4 0x804F +#define GL_RGB4_EXT 0x804F +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGB5 0x8050 +#define GL_RGB565 0x8D62 +#define GL_RGB5_A1 0x8057 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB8I 0x8D8F +#define GL_RGB8I_EXT 0x8D8F +#define GL_RGB8UI 0x8D7D +#define GL_RGB8UI_EXT 0x8D7D +#define GL_RGB8_EXT 0x8051 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGB9_E5 0x8C3D +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_RGBA 0x1908 +#define GL_RGBA12 0x805A +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16 0x805B +#define GL_RGBA16F 0x881A +#define GL_RGBA16F_ARB 0x881A +#define GL_RGBA16F_EXT 0x881A +#define GL_RGBA16I 0x8D88 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGBA16UI 0x8D76 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGBA16_EXT 0x805B +#define GL_RGBA16_SNORM 0x8F9B +#define GL_RGBA2 0x8055 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA32F 0x8814 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGBA32I 0x8D82 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGBA32UI 0x8D70 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGBA4 0x8056 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA8 0x8058 +#define GL_RGBA8I 0x8D8E +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGBA8UI 0x8D7C +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGBA8_EXT 0x8058 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#define GL_RGBA_SNORM 0x8F93 +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGB_RAW_422_APPLE 0x8A51 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_RGB_SNORM 0x8F92 +#define GL_RG_INTEGER 0x8228 +#define GL_RG_SNORM 0x8F91 +#define GL_RIGHT 0x0407 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_ROUND_NV 0x90A4 +#define GL_SAMPLER 0x82E6 +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_SCALAR_EXT 0x87BE +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 +#define GL_SCISSOR_COMMAND_NV 0x0011 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_SCREEN_KHR 0x9295 +#define GL_SCREEN_NV 0x9295 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 +#define GL_SEMAPHORE_TYPE_NV 0x95B3 +#define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#define GL_SET 0x150F +#define GL_SET_AMD 0x874A +#define GL_SHADER 0x82E1 +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 +#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_TYPE 0x8B4F +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F +#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 +#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A +#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B +#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 +#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C +#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D +#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E +#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B +#define GL_SHADING_RATE_IMAGE_NV 0x9563 +#define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 +#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E +#define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 +#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D +#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C +#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 +#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE +#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF +#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_SHARED_EDGE_NV 0xC0 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +#define GL_SHORT 0x1402 +#define GL_SIGNALED 0x9119 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SKIP_COMPONENTS1_NV -6 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_DECODE_EXT 0x8A4A +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_SLICE_ACCUM_SUN 0x85CC +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_SM_COUNT_NV 0x933B +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SPARE0_NV 0x852E +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_SPARE1_NV 0x852F +#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 +#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +#define GL_SPIR_V_BINARY 0x9552 +#define GL_SPIR_V_BINARY_ARB 0x9552 +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SQUARE_NV 0x90A3 +#define GL_SR8_EXT 0x8FBD +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC1_COLOR 0x88F9 +#define GL_SRC_ALPHA 0x0302 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_COLOR 0x0300 +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_SRG8_EXT 0x8FBE +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_STATIC_ATI 0x8760 +#define GL_STATIC_COPY 0x88E6 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_REF_COMMAND_NV 0x000C +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STEREO 0x0C33 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_SHARED_APPLE 0x85BF +#define GL_STREAM_COPY 0x88E2 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 +#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 +#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 +#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 +#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 +#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 +#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 +#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 +#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 +#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 +#define GL_SUBGROUP_SIZE_KHR 0x9532 +#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 +#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_SUB_ATI 0x8965 +#define GL_SUCCESS_NV 0x902F +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TASK_SHADER_BIT_NV 0x00000080 +#define GL_TASK_SHADER_NV 0x955A +#define GL_TASK_SUBROUTINE_NV 0x957D +#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F +#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F +#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 +#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_TEXTURE 0x1702 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_TEXTURE31_ARB 0x84DF +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#define GL_TEXTURE_NORMAL_EXT 0x85AF +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 +#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_TARGET 0x1006 +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 +#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 +#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF +#define GL_TIMESTAMP 0x8E28 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC +#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_NV 0x862C +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_FAN 0x0006 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_TRUE 1 +#define GL_TYPE 0x92FA +#define GL_UNCORRELATED_NV 0x9282 +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNSIGNALED 0x9118 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_UNSIGNED_INT64_ARB 0x140F +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_UPLOAD_GPU_MASK_NVX 0x954A +#define GL_UPPER_LEFT 0x8CA2 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_UTF16_NV 0x909B +#define GL_UTF8_NV 0x909A +#define GL_UUID_SIZE_EXT 16 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_EXT 0x87C1 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_VECTOR_EXT 0x87BF +#define GL_VENDOR 0x1F00 +#define GL_VERSION 0x1F02 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 +#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_VERTEX_TEXTURE 0x829B +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_VERTICES_SUBMITTED 0x82EE +#define GL_VERTICES_SUBMITTED_ARB 0x82EE +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIEWPORT 0x0BA2 +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_VIEWPORT_COMMAND_NV 0x0010 +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C +#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D +#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 +#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B +#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 +#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 +#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 +#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 +#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 +#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 +#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 +#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 +#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 +#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 +#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A +#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B +#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C +#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D +#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E +#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_EAC_R11 0x9383 +#define GL_VIEW_CLASS_EAC_RG11 0x9384 +#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 +#define GL_VIEW_CLASS_ETC2_RGB 0x9385 +#define GL_VIEW_CLASS_ETC2_RGBA 0x9386 +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_WAIT_FAILED 0x911D +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WEIGHTED_AVERAGE_ARB 0x9367 +#define GL_WEIGHTED_AVERAGE_EXT 0x9367 +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_WINDOW_RECTANGLE_EXT 0x8F12 +#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 +#define GL_WRAP_BORDER_SUN 0x81D4 +#define GL_WRITE_DISCARD_NV 0x88BE +#define GL_WRITE_ONLY 0x88B9 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_W_EXT 0x87D8 +#define GL_XOR 0x1506 +#define GL_XOR_NV 0x1506 +#define GL_X_EXT 0x87D5 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_YCBCR_MESA 0x8757 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCRCBA_SGIX 0x8319 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#define GL_YCRCB_SGIX 0x8318 +#define GL_Y_EXT 0x87D6 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_ZERO 0 +#define GL_ZERO_EXT 0x87DD +#define GL_ZERO_TO_ONE 0x935F +#define GL_Z_EXT 0x87D7 + +#include "khrplatform.h" +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; +typedef int GLint; +typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; +typedef int GLsizei; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglClientBufferEXT; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_intptr_t GLintptr; +#else +typedef khronos_intptr_t GLintptr; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_intptr_t GLintptrARB; +#else +typedef khronos_intptr_t GLintptrARB; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_ssize_t GLsizeiptr; +#else +typedef khronos_ssize_t GLsizeiptr; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_ssize_t GLsizeiptrARB; +#else +typedef khronos_ssize_t GLsizeiptrARB; +#endif +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void(GLAD_API_PTR *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, + GLsizei length, const GLchar *message, + const void *userParam); +typedef void(GLAD_API_PTR *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, + GLsizei length, const GLchar *message, + const void *userParam); +typedef void(GLAD_API_PTR *GLDEBUGPROCKHR)(GLenum source, GLenum type, GLuint id, GLenum severity, + GLsizei length, const GLchar *message, + const void *userParam); +typedef void(GLAD_API_PTR *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, + GLsizei length, const GLchar *message, void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; +typedef void(GLAD_API_PTR *GLVULKANPROCNV)(void); + +#define GL_VERSION_1_0 1 +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_VERSION_1_4 1 +#define GL_VERSION_1_5 1 +#define GL_VERSION_2_0 1 +#define GL_VERSION_2_1 1 +#define GL_VERSION_3_0 1 +#define GL_VERSION_3_1 1 +#define GL_VERSION_3_2 1 +#define GL_VERSION_3_3 1 +#define GL_VERSION_4_0 1 +#define GL_VERSION_4_1 1 +#define GL_VERSION_4_2 1 +#define GL_VERSION_4_3 1 +#define GL_VERSION_4_4 1 +#define GL_VERSION_4_5 1 +#define GL_VERSION_4_6 1 +#define GL_3DFX_multisample 1 +#define GL_3DFX_tbuffer 1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_AMD_blend_minmax_factor 1 +#define GL_AMD_conservative_depth 1 +#define GL_AMD_debug_output 1 +#define GL_AMD_depth_clamp_separate 1 +#define GL_AMD_draw_buffers_blend 1 +#define GL_AMD_framebuffer_multisample_advanced 1 +#define GL_AMD_framebuffer_sample_positions 1 +#define GL_AMD_gcn_shader 1 +#define GL_AMD_gpu_shader_half_float 1 +#define GL_AMD_gpu_shader_int16 1 +#define GL_AMD_gpu_shader_int64 1 +#define GL_AMD_interleaved_elements 1 +#define GL_AMD_multi_draw_indirect 1 +#define GL_AMD_name_gen_delete 1 +#define GL_AMD_occlusion_query_event 1 +#define GL_AMD_performance_monitor 1 +#define GL_AMD_pinned_memory 1 +#define GL_AMD_query_buffer_object 1 +#define GL_AMD_sample_positions 1 +#define GL_AMD_seamless_cubemap_per_texture 1 +#define GL_AMD_shader_atomic_counter_ops 1 +#define GL_AMD_shader_ballot 1 +#define GL_AMD_shader_explicit_vertex_parameter 1 +#define GL_AMD_shader_gpu_shader_half_float_fetch 1 +#define GL_AMD_shader_image_load_store_lod 1 +#define GL_AMD_shader_stencil_export 1 +#define GL_AMD_shader_trinary_minmax 1 +#define GL_AMD_sparse_texture 1 +#define GL_AMD_stencil_operation_extended 1 +#define GL_AMD_texture_gather_bias_lod 1 +#define GL_AMD_texture_texture4 1 +#define GL_AMD_transform_feedback3_lines_triangles 1 +#define GL_AMD_transform_feedback4 1 +#define GL_AMD_vertex_shader_layer 1 +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_AMD_vertex_shader_viewport_index 1 +#define GL_APPLE_aux_depth_stencil 1 +#define GL_APPLE_client_storage 1 +#define GL_APPLE_element_array 1 +#define GL_APPLE_fence 1 +#define GL_APPLE_float_pixels 1 +#define GL_APPLE_flush_buffer_range 1 +#define GL_APPLE_object_purgeable 1 +#define GL_APPLE_rgb_422 1 +#define GL_APPLE_row_bytes 1 +#define GL_APPLE_specular_vector 1 +#define GL_APPLE_texture_range 1 +#define GL_APPLE_transform_hint 1 +#define GL_APPLE_vertex_array_object 1 +#define GL_APPLE_vertex_array_range 1 +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_APPLE_ycbcr_422 1 +#define GL_ARB_ES2_compatibility 1 +#define GL_ARB_ES3_1_compatibility 1 +#define GL_ARB_ES3_2_compatibility 1 +#define GL_ARB_ES3_compatibility 1 +#define GL_ARB_arrays_of_arrays 1 +#define GL_ARB_base_instance 1 +#define GL_ARB_bindless_texture 1 +#define GL_ARB_blend_func_extended 1 +#define GL_ARB_buffer_storage 1 +#define GL_ARB_cl_event 1 +#define GL_ARB_clear_buffer_object 1 +#define GL_ARB_clear_texture 1 +#define GL_ARB_clip_control 1 +#define GL_ARB_color_buffer_float 1 +#define GL_ARB_compatibility 1 +#define GL_ARB_compressed_texture_pixel_storage 1 +#define GL_ARB_compute_shader 1 +#define GL_ARB_compute_variable_group_size 1 +#define GL_ARB_conditional_render_inverted 1 +#define GL_ARB_conservative_depth 1 +#define GL_ARB_copy_buffer 1 +#define GL_ARB_copy_image 1 +#define GL_ARB_cull_distance 1 +#define GL_ARB_debug_output 1 +#define GL_ARB_depth_buffer_float 1 +#define GL_ARB_depth_clamp 1 +#define GL_ARB_depth_texture 1 +#define GL_ARB_derivative_control 1 +#define GL_ARB_direct_state_access 1 +#define GL_ARB_draw_buffers 1 +#define GL_ARB_draw_buffers_blend 1 +#define GL_ARB_draw_elements_base_vertex 1 +#define GL_ARB_draw_indirect 1 +#define GL_ARB_draw_instanced 1 +#define GL_ARB_enhanced_layouts 1 +#define GL_ARB_explicit_attrib_location 1 +#define GL_ARB_explicit_uniform_location 1 +#define GL_ARB_fragment_coord_conventions 1 +#define GL_ARB_fragment_layer_viewport 1 +#define GL_ARB_fragment_program 1 +#define GL_ARB_fragment_program_shadow 1 +#define GL_ARB_fragment_shader 1 +#define GL_ARB_fragment_shader_interlock 1 +#define GL_ARB_framebuffer_no_attachments 1 +#define GL_ARB_framebuffer_object 1 +#define GL_ARB_framebuffer_sRGB 1 +#define GL_ARB_geometry_shader4 1 +#define GL_ARB_get_program_binary 1 +#define GL_ARB_get_texture_sub_image 1 +#define GL_ARB_gl_spirv 1 +#define GL_ARB_gpu_shader5 1 +#define GL_ARB_gpu_shader_fp64 1 +#define GL_ARB_gpu_shader_int64 1 +#define GL_ARB_half_float_pixel 1 +#define GL_ARB_half_float_vertex 1 +#define GL_ARB_imaging 1 +#define GL_ARB_indirect_parameters 1 +#define GL_ARB_instanced_arrays 1 +#define GL_ARB_internalformat_query 1 +#define GL_ARB_internalformat_query2 1 +#define GL_ARB_invalidate_subdata 1 +#define GL_ARB_map_buffer_alignment 1 +#define GL_ARB_map_buffer_range 1 +#define GL_ARB_matrix_palette 1 +#define GL_ARB_multi_bind 1 +#define GL_ARB_multi_draw_indirect 1 +#define GL_ARB_multisample 1 +#define GL_ARB_multitexture 1 +#define GL_ARB_occlusion_query 1 +#define GL_ARB_occlusion_query2 1 +#define GL_ARB_parallel_shader_compile 1 +#define GL_ARB_pipeline_statistics_query 1 +#define GL_ARB_pixel_buffer_object 1 +#define GL_ARB_point_parameters 1 +#define GL_ARB_point_sprite 1 +#define GL_ARB_polygon_offset_clamp 1 +#define GL_ARB_post_depth_coverage 1 +#define GL_ARB_program_interface_query 1 +#define GL_ARB_provoking_vertex 1 +#define GL_ARB_query_buffer_object 1 +#define GL_ARB_robust_buffer_access_behavior 1 +#define GL_ARB_robustness 1 +#define GL_ARB_robustness_isolation 1 +#define GL_ARB_sample_locations 1 +#define GL_ARB_sample_shading 1 +#define GL_ARB_sampler_objects 1 +#define GL_ARB_seamless_cube_map 1 +#define GL_ARB_seamless_cubemap_per_texture 1 +#define GL_ARB_separate_shader_objects 1 +#define GL_ARB_shader_atomic_counter_ops 1 +#define GL_ARB_shader_atomic_counters 1 +#define GL_ARB_shader_ballot 1 +#define GL_ARB_shader_bit_encoding 1 +#define GL_ARB_shader_clock 1 +#define GL_ARB_shader_draw_parameters 1 +#define GL_ARB_shader_group_vote 1 +#define GL_ARB_shader_image_load_store 1 +#define GL_ARB_shader_image_size 1 +#define GL_ARB_shader_objects 1 +#define GL_ARB_shader_precision 1 +#define GL_ARB_shader_stencil_export 1 +#define GL_ARB_shader_storage_buffer_object 1 +#define GL_ARB_shader_subroutine 1 +#define GL_ARB_shader_texture_image_samples 1 +#define GL_ARB_shader_texture_lod 1 +#define GL_ARB_shader_viewport_layer_array 1 +#define GL_ARB_shading_language_100 1 +#define GL_ARB_shading_language_420pack 1 +#define GL_ARB_shading_language_include 1 +#define GL_ARB_shading_language_packing 1 +#define GL_ARB_shadow 1 +#define GL_ARB_shadow_ambient 1 +#define GL_ARB_sparse_buffer 1 +#define GL_ARB_sparse_texture 1 +#define GL_ARB_sparse_texture2 1 +#define GL_ARB_sparse_texture_clamp 1 +#define GL_ARB_spirv_extensions 1 +#define GL_ARB_stencil_texturing 1 +#define GL_ARB_sync 1 +#define GL_ARB_tessellation_shader 1 +#define GL_ARB_texture_barrier 1 +#define GL_ARB_texture_border_clamp 1 +#define GL_ARB_texture_buffer_object 1 +#define GL_ARB_texture_buffer_object_rgb32 1 +#define GL_ARB_texture_buffer_range 1 +#define GL_ARB_texture_compression 1 +#define GL_ARB_texture_compression_bptc 1 +#define GL_ARB_texture_compression_rgtc 1 +#define GL_ARB_texture_cube_map 1 +#define GL_ARB_texture_cube_map_array 1 +#define GL_ARB_texture_env_add 1 +#define GL_ARB_texture_env_combine 1 +#define GL_ARB_texture_env_crossbar 1 +#define GL_ARB_texture_env_dot3 1 +#define GL_ARB_texture_filter_anisotropic 1 +#define GL_ARB_texture_filter_minmax 1 +#define GL_ARB_texture_float 1 +#define GL_ARB_texture_gather 1 +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_ARB_texture_multisample 1 +#define GL_ARB_texture_non_power_of_two 1 +#define GL_ARB_texture_query_levels 1 +#define GL_ARB_texture_query_lod 1 +#define GL_ARB_texture_rectangle 1 +#define GL_ARB_texture_rg 1 +#define GL_ARB_texture_rgb10_a2ui 1 +#define GL_ARB_texture_stencil8 1 +#define GL_ARB_texture_storage 1 +#define GL_ARB_texture_storage_multisample 1 +#define GL_ARB_texture_swizzle 1 +#define GL_ARB_texture_view 1 +#define GL_ARB_timer_query 1 +#define GL_ARB_transform_feedback2 1 +#define GL_ARB_transform_feedback3 1 +#define GL_ARB_transform_feedback_instanced 1 +#define GL_ARB_transform_feedback_overflow_query 1 +#define GL_ARB_transpose_matrix 1 +#define GL_ARB_uniform_buffer_object 1 +#define GL_ARB_vertex_array_bgra 1 +#define GL_ARB_vertex_array_object 1 +#define GL_ARB_vertex_attrib_64bit 1 +#define GL_ARB_vertex_attrib_binding 1 +#define GL_ARB_vertex_blend 1 +#define GL_ARB_vertex_buffer_object 1 +#define GL_ARB_vertex_program 1 +#define GL_ARB_vertex_shader 1 +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#define GL_ARB_viewport_array 1 +#define GL_ARB_window_pos 1 +#define GL_ATI_draw_buffers 1 +#define GL_ATI_element_array 1 +#define GL_ATI_envmap_bumpmap 1 +#define GL_ATI_fragment_shader 1 +#define GL_ATI_map_object_buffer 1 +#define GL_ATI_meminfo 1 +#define GL_ATI_pixel_format_float 1 +#define GL_ATI_pn_triangles 1 +#define GL_ATI_separate_stencil 1 +#define GL_ATI_text_fragment_shader 1 +#define GL_ATI_texture_env_combine3 1 +#define GL_ATI_texture_float 1 +#define GL_ATI_texture_mirror_once 1 +#define GL_ATI_vertex_array_object 1 +#define GL_ATI_vertex_attrib_array_object 1 +#define GL_ATI_vertex_streams 1 +#define GL_EXT_422_pixels 1 +#define GL_EXT_EGL_image_storage 1 +#define GL_EXT_EGL_sync 1 +#define GL_EXT_abgr 1 +#define GL_EXT_bgra 1 +#define GL_EXT_bindable_uniform 1 +#define GL_EXT_blend_color 1 +#define GL_EXT_blend_equation_separate 1 +#define GL_EXT_blend_func_separate 1 +#define GL_EXT_blend_logic_op 1 +#define GL_EXT_blend_minmax 1 +#define GL_EXT_blend_subtract 1 +#define GL_EXT_clip_volume_hint 1 +#define GL_EXT_cmyka 1 +#define GL_EXT_color_subtable 1 +#define GL_EXT_compiled_vertex_array 1 +#define GL_EXT_convolution 1 +#define GL_EXT_coordinate_frame 1 +#define GL_EXT_copy_texture 1 +#define GL_EXT_cull_vertex 1 +#define GL_EXT_debug_label 1 +#define GL_EXT_debug_marker 1 +#define GL_EXT_depth_bounds_test 1 +#define GL_EXT_direct_state_access 1 +#define GL_EXT_draw_buffers2 1 +#define GL_EXT_draw_instanced 1 +#define GL_EXT_draw_range_elements 1 +#define GL_EXT_external_buffer 1 +#define GL_EXT_fog_coord 1 +#define GL_EXT_framebuffer_blit 1 +#define GL_EXT_framebuffer_blit_layers 1 +#define GL_EXT_framebuffer_multisample 1 +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_EXT_framebuffer_object 1 +#define GL_EXT_framebuffer_sRGB 1 +#define GL_EXT_geometry_shader4 1 +#define GL_EXT_gpu_program_parameters 1 +#define GL_EXT_gpu_shader4 1 +#define GL_EXT_histogram 1 +#define GL_EXT_index_array_formats 1 +#define GL_EXT_index_func 1 +#define GL_EXT_index_material 1 +#define GL_EXT_index_texture 1 +#define GL_EXT_light_texture 1 +#define GL_EXT_memory_object 1 +#define GL_EXT_memory_object_fd 1 +#define GL_EXT_memory_object_win32 1 +#define GL_EXT_misc_attribute 1 +#define GL_EXT_multi_draw_arrays 1 +#define GL_EXT_multisample 1 +#define GL_EXT_multiview_tessellation_geometry_shader 1 +#define GL_EXT_multiview_texture_multisample 1 +#define GL_EXT_multiview_timer_query 1 +#define GL_EXT_packed_depth_stencil 1 +#define GL_EXT_packed_float 1 +#define GL_EXT_packed_pixels 1 +#define GL_EXT_paletted_texture 1 +#define GL_EXT_pixel_buffer_object 1 +#define GL_EXT_pixel_transform 1 +#define GL_EXT_pixel_transform_color_table 1 +#define GL_EXT_point_parameters 1 +#define GL_EXT_polygon_offset 1 +#define GL_EXT_polygon_offset_clamp 1 +#define GL_EXT_post_depth_coverage 1 +#define GL_EXT_provoking_vertex 1 +#define GL_EXT_raster_multisample 1 +#define GL_EXT_rescale_normal 1 +#define GL_EXT_secondary_color 1 +#define GL_EXT_semaphore 1 +#define GL_EXT_semaphore_fd 1 +#define GL_EXT_semaphore_win32 1 +#define GL_EXT_separate_shader_objects 1 +#define GL_EXT_separate_specular_color 1 +#define GL_EXT_shader_framebuffer_fetch 1 +#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 +#define GL_EXT_shader_image_load_formatted 1 +#define GL_EXT_shader_image_load_store 1 +#define GL_EXT_shader_integer_mix 1 +#define GL_EXT_shader_samples_identical 1 +#define GL_EXT_shadow_funcs 1 +#define GL_EXT_shared_texture_palette 1 +#define GL_EXT_sparse_texture2 1 +#define GL_EXT_stencil_clear_tag 1 +#define GL_EXT_stencil_two_side 1 +#define GL_EXT_stencil_wrap 1 +#define GL_EXT_subtexture 1 +#define GL_EXT_texture 1 +#define GL_EXT_texture3D 1 +#define GL_EXT_texture_array 1 +#define GL_EXT_texture_buffer_object 1 +#define GL_EXT_texture_compression_latc 1 +#define GL_EXT_texture_compression_rgtc 1 +#define GL_EXT_texture_compression_s3tc 1 +#define GL_EXT_texture_cube_map 1 +#define GL_EXT_texture_env_add 1 +#define GL_EXT_texture_env_combine 1 +#define GL_EXT_texture_env_dot3 1 +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_EXT_texture_filter_minmax 1 +#define GL_EXT_texture_integer 1 +#define GL_EXT_texture_lod_bias 1 +#define GL_EXT_texture_mirror_clamp 1 +#define GL_EXT_texture_object 1 +#define GL_EXT_texture_perturb_normal 1 +#define GL_EXT_texture_sRGB 1 +#define GL_EXT_texture_sRGB_R8 1 +#define GL_EXT_texture_sRGB_RG8 1 +#define GL_EXT_texture_sRGB_decode 1 +#define GL_EXT_texture_shadow_lod 1 +#define GL_EXT_texture_shared_exponent 1 +#define GL_EXT_texture_snorm 1 +#define GL_EXT_texture_storage 1 +#define GL_EXT_texture_swizzle 1 +#define GL_EXT_timer_query 1 +#define GL_EXT_transform_feedback 1 +#define GL_EXT_vertex_array 1 +#define GL_EXT_vertex_array_bgra 1 +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_EXT_vertex_shader 1 +#define GL_EXT_vertex_weighting 1 +#define GL_EXT_win32_keyed_mutex 1 +#define GL_EXT_window_rectangles 1 +#define GL_EXT_x11_sync_object 1 +#define GL_GREMEDY_frame_terminator 1 +#define GL_GREMEDY_string_marker 1 +#define GL_HP_convolution_border_modes 1 +#define GL_HP_image_transform 1 +#define GL_HP_occlusion_test 1 +#define GL_HP_texture_lighting 1 +#define GL_IBM_cull_vertex 1 +#define GL_IBM_multimode_draw_arrays 1 +#define GL_IBM_rasterpos_clip 1 +#define GL_IBM_static_data 1 +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_IBM_vertex_array_lists 1 +#define GL_INGR_blend_func_separate 1 +#define GL_INGR_color_clamp 1 +#define GL_INGR_interlace_read 1 +#define GL_INTEL_blackhole_render 1 +#define GL_INTEL_conservative_rasterization 1 +#define GL_INTEL_fragment_shader_ordering 1 +#define GL_INTEL_framebuffer_CMAA 1 +#define GL_INTEL_map_texture 1 +#define GL_INTEL_parallel_arrays 1 +#define GL_INTEL_performance_query 1 +#define GL_KHR_blend_equation_advanced 1 +#define GL_KHR_blend_equation_advanced_coherent 1 +#define GL_KHR_context_flush_control 1 +#define GL_KHR_debug 1 +#define GL_KHR_no_error 1 +#define GL_KHR_parallel_shader_compile 1 +#define GL_KHR_robust_buffer_access_behavior 1 +#define GL_KHR_robustness 1 +#define GL_KHR_shader_subgroup 1 +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_KHR_texture_compression_astc_ldr 1 +#define GL_KHR_texture_compression_astc_sliced_3d 1 +#define GL_MESAX_texture_stack 1 +#define GL_MESA_framebuffer_flip_x 1 +#define GL_MESA_framebuffer_flip_y 1 +#define GL_MESA_framebuffer_swap_xy 1 +#define GL_MESA_pack_invert 1 +#define GL_MESA_program_binary_formats 1 +#define GL_MESA_resize_buffers 1 +#define GL_MESA_shader_integer_functions 1 +#define GL_MESA_tile_raster_order 1 +#define GL_MESA_window_pos 1 +#define GL_MESA_ycbcr_texture 1 +#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 +#define GL_NVX_conditional_render 1 +#define GL_NVX_gpu_memory_info 1 +#define GL_NVX_gpu_multicast2 1 +#define GL_NVX_linked_gpu_multicast 1 +#define GL_NVX_progress_fence 1 +#define GL_NV_alpha_to_coverage_dither_control 1 +#define GL_NV_bindless_multi_draw_indirect 1 +#define GL_NV_bindless_multi_draw_indirect_count 1 +#define GL_NV_bindless_texture 1 +#define GL_NV_blend_equation_advanced 1 +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_NV_blend_minmax_factor 1 +#define GL_NV_blend_square 1 +#define GL_NV_clip_space_w_scaling 1 +#define GL_NV_command_list 1 +#define GL_NV_compute_program5 1 +#define GL_NV_compute_shader_derivatives 1 +#define GL_NV_conditional_render 1 +#define GL_NV_conservative_raster 1 +#define GL_NV_conservative_raster_dilate 1 +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_NV_conservative_raster_pre_snap_triangles 1 +#define GL_NV_conservative_raster_underestimation 1 +#define GL_NV_copy_depth_to_color 1 +#define GL_NV_copy_image 1 +#define GL_NV_deep_texture3D 1 +#define GL_NV_depth_buffer_float 1 +#define GL_NV_depth_clamp 1 +#define GL_NV_draw_texture 1 +#define GL_NV_draw_vulkan_image 1 +#define GL_NV_evaluators 1 +#define GL_NV_explicit_multisample 1 +#define GL_NV_fence 1 +#define GL_NV_fill_rectangle 1 +#define GL_NV_float_buffer 1 +#define GL_NV_fog_distance 1 +#define GL_NV_fragment_coverage_to_color 1 +#define GL_NV_fragment_program 1 +#define GL_NV_fragment_program2 1 +#define GL_NV_fragment_program4 1 +#define GL_NV_fragment_program_option 1 +#define GL_NV_fragment_shader_barycentric 1 +#define GL_NV_fragment_shader_interlock 1 +#define GL_NV_framebuffer_mixed_samples 1 +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_NV_geometry_program4 1 +#define GL_NV_geometry_shader4 1 +#define GL_NV_geometry_shader_passthrough 1 +#define GL_NV_gpu_multicast 1 +#define GL_NV_gpu_program4 1 +#define GL_NV_gpu_program5 1 +#define GL_NV_gpu_program5_mem_extended 1 +#define GL_NV_gpu_shader5 1 +#define GL_NV_half_float 1 +#define GL_NV_internalformat_sample_query 1 +#define GL_NV_light_max_exponent 1 +#define GL_NV_memory_attachment 1 +#define GL_NV_memory_object_sparse 1 +#define GL_NV_mesh_shader 1 +#define GL_NV_multisample_coverage 1 +#define GL_NV_multisample_filter_hint 1 +#define GL_NV_occlusion_query 1 +#define GL_NV_packed_depth_stencil 1 +#define GL_NV_parameter_buffer_object 1 +#define GL_NV_parameter_buffer_object2 1 +#define GL_NV_path_rendering 1 +#define GL_NV_path_rendering_shared_edge 1 +#define GL_NV_pixel_data_range 1 +#define GL_NV_point_sprite 1 +#define GL_NV_present_video 1 +#define GL_NV_primitive_restart 1 +#define GL_NV_primitive_shading_rate 1 +#define GL_NV_query_resource 1 +#define GL_NV_query_resource_tag 1 +#define GL_NV_register_combiners 1 +#define GL_NV_register_combiners2 1 +#define GL_NV_representative_fragment_test 1 +#define GL_NV_robustness_video_memory_purge 1 +#define GL_NV_sample_locations 1 +#define GL_NV_sample_mask_override_coverage 1 +#define GL_NV_scissor_exclusive 1 +#define GL_NV_shader_atomic_counters 1 +#define GL_NV_shader_atomic_float 1 +#define GL_NV_shader_atomic_float64 1 +#define GL_NV_shader_atomic_fp16_vector 1 +#define GL_NV_shader_atomic_int64 1 +#define GL_NV_shader_buffer_load 1 +#define GL_NV_shader_buffer_store 1 +#define GL_NV_shader_storage_buffer_object 1 +#define GL_NV_shader_subgroup_partitioned 1 +#define GL_NV_shader_texture_footprint 1 +#define GL_NV_shader_thread_group 1 +#define GL_NV_shader_thread_shuffle 1 +#define GL_NV_shading_rate_image 1 +#define GL_NV_stereo_view_rendering 1 +#define GL_NV_tessellation_program5 1 +#define GL_NV_texgen_emboss 1 +#define GL_NV_texgen_reflection 1 +#define GL_NV_texture_barrier 1 +#define GL_NV_texture_compression_vtc 1 +#define GL_NV_texture_env_combine4 1 +#define GL_NV_texture_expand_normal 1 +#define GL_NV_texture_multisample 1 +#define GL_NV_texture_rectangle 1 +#define GL_NV_texture_rectangle_compressed 1 +#define GL_NV_texture_shader 1 +#define GL_NV_texture_shader2 1 +#define GL_NV_texture_shader3 1 +#define GL_NV_timeline_semaphore 1 +#define GL_NV_transform_feedback 1 +#define GL_NV_transform_feedback2 1 +#define GL_NV_uniform_buffer_std430_layout 1 +#define GL_NV_uniform_buffer_unified_memory 1 +#define GL_NV_vdpau_interop 1 +#define GL_NV_vdpau_interop2 1 +#define GL_NV_vertex_array_range 1 +#define GL_NV_vertex_array_range2 1 +#define GL_NV_vertex_attrib_integer_64bit 1 +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_NV_vertex_program 1 +#define GL_NV_vertex_program1_1 1 +#define GL_NV_vertex_program2 1 +#define GL_NV_vertex_program2_option 1 +#define GL_NV_vertex_program3 1 +#define GL_NV_vertex_program4 1 +#define GL_NV_video_capture 1 +#define GL_NV_viewport_array2 1 +#define GL_NV_viewport_swizzle 1 +#define GL_OES_byte_coordinates 1 +#define GL_OES_compressed_paletted_texture 1 +#define GL_OES_fixed_point 1 +#define GL_OES_query_matrix 1 +#define GL_OES_read_format 1 +#define GL_OES_single_precision 1 +#define GL_OML_interlace 1 +#define GL_OML_resample 1 +#define GL_OML_subsample 1 +#define GL_OVR_multiview 1 +#define GL_OVR_multiview2 1 +#define GL_PGI_misc_hints 1 +#define GL_PGI_vertex_hints 1 +#define GL_REND_screen_coordinates 1 +#define GL_S3_s3tc 1 +#define GL_SGIS_detail_texture 1 +#define GL_SGIS_fog_function 1 +#define GL_SGIS_generate_mipmap 1 +#define GL_SGIS_multisample 1 +#define GL_SGIS_pixel_texture 1 +#define GL_SGIS_point_line_texgen 1 +#define GL_SGIS_point_parameters 1 +#define GL_SGIS_sharpen_texture 1 +#define GL_SGIS_texture4D 1 +#define GL_SGIS_texture_border_clamp 1 +#define GL_SGIS_texture_color_mask 1 +#define GL_SGIS_texture_edge_clamp 1 +#define GL_SGIS_texture_filter4 1 +#define GL_SGIS_texture_lod 1 +#define GL_SGIS_texture_select 1 +#define GL_SGIX_async 1 +#define GL_SGIX_async_histogram 1 +#define GL_SGIX_async_pixel 1 +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_SGIX_calligraphic_fragment 1 +#define GL_SGIX_clipmap 1 +#define GL_SGIX_convolution_accuracy 1 +#define GL_SGIX_depth_pass_instrument 1 +#define GL_SGIX_depth_texture 1 +#define GL_SGIX_flush_raster 1 +#define GL_SGIX_fog_offset 1 +#define GL_SGIX_fragment_lighting 1 +#define GL_SGIX_framezoom 1 +#define GL_SGIX_igloo_interface 1 +#define GL_SGIX_instruments 1 +#define GL_SGIX_interlace 1 +#define GL_SGIX_ir_instrument1 1 +#define GL_SGIX_list_priority 1 +#define GL_SGIX_pixel_texture 1 +#define GL_SGIX_pixel_tiles 1 +#define GL_SGIX_polynomial_ffd 1 +#define GL_SGIX_reference_plane 1 +#define GL_SGIX_resample 1 +#define GL_SGIX_scalebias_hint 1 +#define GL_SGIX_shadow 1 +#define GL_SGIX_shadow_ambient 1 +#define GL_SGIX_sprite 1 +#define GL_SGIX_subsample 1 +#define GL_SGIX_tag_sample_buffer 1 +#define GL_SGIX_texture_add_env 1 +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_SGIX_texture_lod_bias 1 +#define GL_SGIX_texture_multi_buffer 1 +#define GL_SGIX_texture_scale_bias 1 +#define GL_SGIX_vertex_preclip 1 +#define GL_SGIX_ycrcb 1 +#define GL_SGIX_ycrcb_subsample 1 +#define GL_SGIX_ycrcba 1 +#define GL_SGI_color_matrix 1 +#define GL_SGI_color_table 1 +#define GL_SGI_texture_color_table 1 +#define GL_SUNX_constant_data 1 +#define GL_SUN_convolution_border_modes 1 +#define GL_SUN_global_alpha 1 +#define GL_SUN_mesh_array 1 +#define GL_SUN_slice_accum 1 +#define GL_SUN_triangle_list 1 +#define GL_SUN_vertex 1 +#define GL_WIN_phong_shading 1 +#define GL_WIN_specular_fog 1 + +typedef void(GLAD_API_PTR *PFNGLACCUMXOESPROC)(GLenum op, GLfixed value); +typedef GLboolean(GLAD_API_PTR *PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC)(GLuint memory, GLuint64 key, + GLuint timeout); +typedef void(GLAD_API_PTR *PFNGLACTIVEPROGRAMEXTPROC)(GLuint program); +typedef void(GLAD_API_PTR *PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); +typedef void(GLAD_API_PTR *PFNGLACTIVESTENCILFACEEXTPROC)(GLenum face); +typedef void(GLAD_API_PTR *PFNGLACTIVETEXTUREPROC)(GLenum texture); +typedef void(GLAD_API_PTR *PFNGLACTIVETEXTUREARBPROC)(GLenum texture); +typedef void(GLAD_API_PTR *PFNGLACTIVEVARYINGNVPROC)(GLuint program, const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, + GLuint arg1, GLuint arg1Rep, + GLuint arg1Mod); +typedef void(GLAD_API_PTR *PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, + GLuint arg1, GLuint arg1Rep, + GLuint arg1Mod, GLuint arg2, + GLuint arg2Rep, GLuint arg2Mod); +typedef void(GLAD_API_PTR *PFNGLALPHAFRAGMENTOP3ATIPROC)( + GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, + GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void(GLAD_API_PTR *PFNGLALPHAFUNCXOESPROC)(GLenum func, GLfixed ref); +typedef void(GLAD_API_PTR *PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)(void); +typedef void(GLAD_API_PTR *PFNGLAPPLYTEXTUREEXTPROC)(GLenum mode); +typedef GLboolean(GLAD_API_PTR *PFNGLAREPROGRAMSRESIDENTNVPROC)(GLsizei n, const GLuint *programs, + GLboolean *residences); +typedef GLboolean(GLAD_API_PTR *PFNGLARETEXTURESRESIDENTEXTPROC)(GLsizei n, const GLuint *textures, + GLboolean *residences); +typedef void(GLAD_API_PTR *PFNGLARRAYELEMENTEXTPROC)(GLint i); +typedef void(GLAD_API_PTR *PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, + GLsizei stride, GLuint buffer, GLuint offset); +typedef GLuint(GLAD_API_PTR *PFNGLASYNCCOPYBUFFERSUBDATANVXPROC)( + GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, + const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, + GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, + GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, + const GLuint64 *signalValueArray); +typedef GLuint(GLAD_API_PTR *PFNGLASYNCCOPYIMAGESUBDATANVXPROC)( + GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, + const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, 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, GLsizei signalSemaphoreCount, + const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +typedef void(GLAD_API_PTR *PFNGLASYNCMARKERSGIXPROC)(GLuint marker); +typedef void(GLAD_API_PTR *PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj); +typedef void(GLAD_API_PTR *PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +typedef void(GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERNVPROC)(GLuint id, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERNVXPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLBEGINFRAGMENTSHADERATIPROC)(void); +typedef void(GLAD_API_PTR *PFNGLBEGINOCCLUSIONQUERYNVPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLBEGINPERFMONITORAMDPROC)(GLuint monitor); +typedef void(GLAD_API_PTR *PFNGLBEGINPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void(GLAD_API_PTR *PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +typedef void(GLAD_API_PTR *PFNGLBEGINQUERYARBPROC)(GLenum target, GLuint id); +typedef void(GLAD_API_PTR *PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); +typedef void(GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +typedef void(GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)(GLenum primitiveMode); +typedef void(GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKNVPROC)(GLenum primitiveMode); +typedef void(GLAD_API_PTR *PFNGLBEGINVERTEXSHADEREXTPROC)(void); +typedef void(GLAD_API_PTR *PFNGLBEGINVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void(GLAD_API_PTR *PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, + const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, + const GLcharARB *name); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERBASEEXTPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERBASENVPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFEROFFSETEXTPROC)(GLenum target, GLuint index, GLuint buffer, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFEROFFSETNVPROC)(GLenum target, GLuint index, GLuint buffer, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERRANGEEXTPROC)(GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERRANGENVPROC)(GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, + const GLuint *buffers); +typedef void(GLAD_API_PTR *PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, + const GLuint *buffers, + const GLintptr *offsets, + const GLsizeiptr *sizes); +typedef void(GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, + const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color, + const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, + GLuint index, const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +typedef void(GLAD_API_PTR *PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); +typedef void(GLAD_API_PTR *PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, + GLboolean layered, GLint layer, GLenum access, + GLenum format); +typedef void(GLAD_API_PTR *PFNGLBINDIMAGETEXTUREEXTPROC)(GLuint index, GLuint texture, GLint level, + GLboolean layered, GLint layer, + GLenum access, GLint format); +typedef void(GLAD_API_PTR *PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, + const GLuint *textures); +typedef GLuint(GLAD_API_PTR *PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); +typedef GLuint(GLAD_API_PTR *PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); +typedef void(GLAD_API_PTR *PFNGLBINDMULTITEXTUREEXTPROC)(GLenum texunit, GLenum target, + GLuint texture); +typedef GLuint(GLAD_API_PTR *PFNGLBINDPARAMETEREXTPROC)(GLenum value); +typedef void(GLAD_API_PTR *PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); +typedef void(GLAD_API_PTR *PFNGLBINDPROGRAMNVPROC)(GLenum target, GLuint id); +typedef void(GLAD_API_PTR *PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void(GLAD_API_PTR *PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +typedef void(GLAD_API_PTR *PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, + const GLuint *samplers); +typedef void(GLAD_API_PTR *PFNGLBINDSHADINGRATEIMAGENVPROC)(GLuint texture); +typedef GLuint(GLAD_API_PTR *PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, + GLenum value); +typedef void(GLAD_API_PTR *PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +typedef void(GLAD_API_PTR *PFNGLBINDTEXTUREEXTPROC)(GLenum target, GLuint texture); +typedef void(GLAD_API_PTR *PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture); +typedef GLuint(GLAD_API_PTR *PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); +typedef void(GLAD_API_PTR *PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, + const GLuint *textures); +typedef void(GLAD_API_PTR *PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); +typedef void(GLAD_API_PTR *PFNGLBINDTRANSFORMFEEDBACKNVPROC)(GLenum target, GLuint id); +typedef void(GLAD_API_PTR *PFNGLBINDVERTEXARRAYPROC)(GLuint array); +typedef void(GLAD_API_PTR *PFNGLBINDVERTEXARRAYAPPLEPROC)(GLuint array); +typedef void(GLAD_API_PTR *PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, + GLintptr offset, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, + const GLuint *buffers, + const GLintptr *offsets, + const GLsizei *strides); +typedef void(GLAD_API_PTR *PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)(GLuint video_capture_slot, + GLuint stream, + GLenum frame_region, + GLintptrARB offset); +typedef void(GLAD_API_PTR *PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)(GLuint video_capture_slot, + GLuint stream, + GLenum frame_region, + GLenum target, GLuint texture); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3BEXTPROC)(GLbyte bx, GLbyte by, GLbyte bz); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3BVEXTPROC)(const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3DEXTPROC)(GLdouble bx, GLdouble by, GLdouble bz); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3DVEXTPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3FEXTPROC)(GLfloat bx, GLfloat by, GLfloat bz); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3FVEXTPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3IEXTPROC)(GLint bx, GLint by, GLint bz); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3IVEXTPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3SEXTPROC)(GLshort bx, GLshort by, GLshort bz); +typedef void(GLAD_API_PTR *PFNGLBINORMAL3SVEXTPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLBINORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLBITMAPXOESPROC)(GLsizei width, GLsizei height, GLfixed xorig, + GLfixed yorig, GLfixed xmove, GLfixed ymove, + const GLubyte *bitmap); +typedef void(GLAD_API_PTR *PFNGLBLENDBARRIERKHRPROC)(void); +typedef void(GLAD_API_PTR *PFNGLBLENDBARRIERNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, + GLfloat alpha); +typedef void(GLAD_API_PTR *PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, + GLfloat alpha); +typedef void(GLAD_API_PTR *PFNGLBLENDCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, + GLfixed alpha); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONEXTPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONINDEXEDAMDPROC)(GLuint buf, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum modeRGB, + GLenum modeAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, + GLenum modeAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, + GLenum modeAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCINDEXEDAMDPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, + GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, + GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEINGRPROC)(GLenum sfactorRGB, GLenum dfactorRGB, + GLenum sfactorAlpha, + GLenum dfactorAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum srcRGB, + GLenum dstRGB, GLenum srcAlpha, + GLenum dstAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, + GLenum srcAlpha, GLenum dstAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, + GLenum srcAlpha, GLenum dstAlpha); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void(GLAD_API_PTR *PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void(GLAD_API_PTR *PFNGLBLENDPARAMETERINVPROC)(GLenum pname, GLint value); +typedef void(GLAD_API_PTR *PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, + GLint srcY1, GLint dstX0, GLint dstY0, + GLint dstX1, GLint dstY1, GLbitfield mask, + GLenum filter); +typedef void(GLAD_API_PTR *PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, + GLint srcY1, GLint dstX0, GLint dstY0, + GLint dstX1, GLint dstY1, GLbitfield mask, + GLenum filter); +typedef void(GLAD_API_PTR *PFNGLBLITFRAMEBUFFERLAYEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, + GLint srcY1, GLint srcLayer, + GLint dstX0, GLint dstY0, GLint dstX1, + GLint dstY1, GLint dstLayer, + GLbitfield mask, GLenum filter); +typedef void(GLAD_API_PTR *PFNGLBLITFRAMEBUFFERLAYERSEXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, + GLint srcY1, GLint dstX0, GLint dstY0, + GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); +typedef void(GLAD_API_PTR *PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, + GLuint drawFramebuffer, GLint srcX0, + GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, + GLint dstY1, GLbitfield mask, + GLenum filter); +typedef void(GLAD_API_PTR *PFNGLBUFFERADDRESSRANGENVPROC)(GLenum pname, GLuint index, + GLuint64EXT address, GLsizeiptr length); +typedef void(GLAD_API_PTR *PFNGLBUFFERATTACHMEMORYNVPROC)(GLenum target, GLuint memory, + GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, + GLenum usage); +typedef void(GLAD_API_PTR *PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, + const void *data, GLenum usage); +typedef void(GLAD_API_PTR *PFNGLBUFFERPAGECOMMITMENTARBPROC)(GLenum target, GLintptr offset, + GLsizeiptr size, GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLBUFFERPAGECOMMITMENTMEMNVPROC)(GLenum target, GLintptr offset, + GLsizeiptr size, GLuint memory, + GLuint64 memOffset, + GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLBUFFERPARAMETERIAPPLEPROC)(GLenum target, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void *data, + GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLBUFFERSTORAGEEXTERNALEXTPROC)(GLenum target, GLintptr offset, + GLsizeiptr size, + GLeglClientBufferEXT clientBuffer, + GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLBUFFERSTORAGEMEMEXTPROC)(GLenum target, GLsizeiptr size, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, + const void *data); +typedef void(GLAD_API_PTR *PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, + GLsizeiptrARB size, const void *data); +typedef void(GLAD_API_PTR *PFNGLCALLCOMMANDLISTNVPROC)(GLuint list); +typedef GLenum(GLAD_API_PTR *PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +typedef GLenum(GLAD_API_PTR *PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); +typedef GLenum(GLAD_API_PTR *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, + GLenum target); +typedef GLenum(GLAD_API_PTR *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)(GLuint framebuffer, + GLenum target); +typedef void(GLAD_API_PTR *PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +typedef void(GLAD_API_PTR *PFNGLCLAMPCOLORARBPROC)(GLenum target, GLenum clamp); +typedef void(GLAD_API_PTR *PFNGLCLEARPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLCLEARACCUMXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, + GLfixed alpha); +typedef void(GLAD_API_PTR *PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, + GLenum format, GLenum type, const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, + GLintptr offset, GLsizeiptr size, + GLenum format, GLenum type, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, + GLint stencil); +typedef void(GLAD_API_PTR *PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, + const GLint *value); +typedef void(GLAD_API_PTR *PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, + GLfloat alpha); +typedef void(GLAD_API_PTR *PFNGLCLEARCOLORIIEXTPROC)(GLint red, GLint green, GLint blue, + GLint alpha); +typedef void(GLAD_API_PTR *PFNGLCLEARCOLORIUIEXTPROC)(GLuint red, GLuint green, GLuint blue, + GLuint alpha); +typedef void(GLAD_API_PTR *PFNGLCLEARCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, + GLfixed alpha); +typedef void(GLAD_API_PTR *PFNGLCLEARDEPTHPROC)(GLdouble depth); +typedef void(GLAD_API_PTR *PFNGLCLEARDEPTHDNVPROC)(GLdouble depth); +typedef void(GLAD_API_PTR *PFNGLCLEARDEPTHFPROC)(GLfloat d); +typedef void(GLAD_API_PTR *PFNGLCLEARDEPTHFOESPROC)(GLclampf depth); +typedef void(GLAD_API_PTR *PFNGLCLEARDEPTHXOESPROC)(GLfixed depth); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, + GLenum format, GLenum type, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLenum internalformat, + GLenum format, GLenum type, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, + GLintptr offset, GLsizeiptr size, + GLenum format, GLenum type, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, + GLenum internalformat, + GLsizeiptr offset, GLsizeiptr size, + GLenum format, GLenum type, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, + GLint drawbuffer, GLfloat depth, + GLint stencil); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, + GLint drawbuffer, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, + GLint drawbuffer, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, + GLint drawbuffer, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLCLEARSTENCILPROC)(GLint s); +typedef void(GLAD_API_PTR *PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, + GLenum type, const void *data); +typedef void(GLAD_API_PTR *PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, + GLenum type, const void *data); +typedef void(GLAD_API_PTR *PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture); +typedef void(GLAD_API_PTR *PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)(GLenum stream); +typedef void(GLAD_API_PTR *PFNGLCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC)(GLsizei fenceObjectCount, + const GLuint *semaphoreArray, + const GLuint64 *fenceValueArray); +typedef GLenum(GLAD_API_PTR *PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, + GLuint64 timeout); +typedef void(GLAD_API_PTR *PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth); +typedef void(GLAD_API_PTR *PFNGLCLIPPLANEFOESPROC)(GLenum plane, const GLfloat *equation); +typedef void(GLAD_API_PTR *PFNGLCLIPPLANEXOESPROC)(GLenum plane, const GLfixed *equation); +typedef void(GLAD_API_PTR *PFNGLCOLOR3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, + GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLCOLOR3FVERTEX3FVSUNPROC)(const GLfloat *c, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void(GLAD_API_PTR *PFNGLCOLOR3HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLCOLOR3XOESPROC)(GLfixed red, GLfixed green, GLfixed blue); +typedef void(GLAD_API_PTR *PFNGLCOLOR3XVOESPROC)(const GLfixed *components); +typedef void(GLAD_API_PTR *PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, + GLfloat a, GLfloat nx, GLfloat ny, + GLfloat nz, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *c, const GLfloat *n, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, + GLhalfNV alpha); +typedef void(GLAD_API_PTR *PFNGLCOLOR4HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLCOLOR4UBVERTEX2FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, + GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLCOLOR4UBVERTEX2FVSUNPROC)(const GLubyte *c, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLCOLOR4UBVERTEX3FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, + GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLCOLOR4UBVERTEX3FVSUNPROC)(const GLubyte *c, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLCOLOR4XOESPROC)(GLfixed red, GLfixed green, GLfixed blue, + GLfixed alpha); +typedef void(GLAD_API_PTR *PFNGLCOLOR4XVOESPROC)(const GLfixed *components); +typedef void(GLAD_API_PTR *PFNGLCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, + GLuint dstMod, GLuint arg1, GLuint arg1Rep, + GLuint arg1Mod); +typedef void(GLAD_API_PTR *PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, + GLuint dstMod, GLuint arg1, GLuint arg1Rep, + GLuint arg1Mod, GLuint arg2, + GLuint arg2Rep, GLuint arg2Mod); +typedef void(GLAD_API_PTR *PFNGLCOLORFRAGMENTOP3ATIPROC)(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); +typedef void(GLAD_API_PTR *PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, + GLboolean alpha); +typedef void(GLAD_API_PTR *PFNGLCOLORMASKINDEXEDEXTPROC)(GLuint index, GLboolean r, GLboolean g, + GLboolean b, GLboolean a); +typedef void(GLAD_API_PTR *PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, + GLboolean a); +typedef void(GLAD_API_PTR *PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, + GLsizei count, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, + const void **pointer, GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLCOLORPOINTERVINTELPROC)(GLint size, GLenum type, + const void **pointer); +typedef void(GLAD_API_PTR *PFNGLCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLsizei count, + GLenum format, GLenum type, const void *data); +typedef void(GLAD_API_PTR *PFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat, + GLsizei width, GLenum format, GLenum type, + const void *table); +typedef void(GLAD_API_PTR *PFNGLCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, + GLsizei width, GLenum format, GLenum type, + const void *table); +typedef void(GLAD_API_PTR *PFNGLCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion, GLenum variable, + GLenum input, GLenum mapping, + GLenum componentUsage); +typedef void(GLAD_API_PTR *PFNGLCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion, GLenum abOutput, + GLenum cdOutput, GLenum sumOutput, + GLenum scale, GLenum bias, + GLboolean abDotProduct, + GLboolean cdDotProduct, GLboolean muxSum); +typedef void(GLAD_API_PTR *PFNGLCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLCOMMANDLISTSEGMENTSNVPROC)(GLuint list, GLuint segments); +typedef void(GLAD_API_PTR *PFNGLCOMPILECOMMANDLISTNVPROC)(GLuint list); +typedef void(GLAD_API_PTR *PFNGLCOMPILESHADERPROC)(GLuint shader); +typedef void(GLAD_API_PTR *PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj); +typedef void(GLAD_API_PTR *PFNGLCOMPILESHADERINCLUDEARBPROC)(GLuint shader, GLsizei count, + const GLchar *const *path, + const GLint *length); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)( + GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, + GLint border, GLsizei imageSize, const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)( + GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, + GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)( + GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLint xoffset, + GLsizei width, GLenum format, + GLsizei imageSize, + const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)( + GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)( + 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); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLint border, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLint border, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLsizei height, GLint border, + GLsizei imageSize, const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLsizei height, GLint border, + GLsizei imageSize, const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, + GLint border, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, + GLint border, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, + GLint xoffset, GLsizei width, + GLenum format, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, + GLint xoffset, GLsizei width, + GLenum format, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLenum internalformat, + GLsizei width, GLint border, + GLsizei imageSize, + const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLenum internalformat, + GLsizei width, GLsizei height, + GLint border, GLsizei imageSize, + const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)( + GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, + GLint xoffset, GLsizei width, + GLenum format, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLint xoffset, + GLsizei width, GLenum format, + GLsizei imageSize, + const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLsizei imageSize, + const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)( + GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)( + GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void(GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)( + 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); +typedef void(GLAD_API_PTR *PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)(GLenum pname, GLfloat value); +typedef void(GLAD_API_PTR *PFNGLCONSERVATIVERASTERPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const void *image); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const void *image); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERFEXTPROC)(GLenum target, GLenum pname, + GLfloat params); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERIEXTPROC)(GLenum target, GLenum pname, + GLint params); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERXOESPROC)(GLenum target, GLenum pname, + GLfixed param); +typedef void(GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, + const GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, + GLintptr readOffset, GLintptr writeOffset, + GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLCOPYCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLint x, + GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)(GLenum target, + GLenum internalformat, GLint x, + GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)(GLenum target, + GLenum internalformat, GLint x, + GLint y, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYIMAGESUBDATAPROC)(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); +typedef void(GLAD_API_PTR *PFNGLCOPYIMAGESUBDATANVPROC)( + 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); +typedef void(GLAD_API_PTR *PFNGLCOPYMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, + GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, + GLsizei height, GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLint xoffset, GLint x, + GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLint xoffset, + GLint yoffset, GLint x, GLint y, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, + GLint x, GLint y, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, + GLintptr readOffset, + GLintptr writeOffset, GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLCOPYPATHNVPROC)(GLuint resultPath, GLuint srcPath); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, + GLenum internalformat, GLint x, GLint y, + GLsizei width, GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXIMAGE1DEXTPROC)(GLenum target, GLint level, + GLenum internalformat, GLint x, GLint y, + GLsizei width, GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, + GLenum internalformat, GLint x, GLint y, + GLsizei width, GLsizei height, GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXIMAGE2DEXTPROC)(GLenum target, GLint level, + GLenum internalformat, GLint x, GLint y, + GLsizei width, GLsizei height, GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, + GLint x, GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, + GLint x, GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint x, GLint y, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint x, GLint y, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLint x, + GLint y, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLint x, + GLint y, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, + GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, + GLsizei height, GLint border); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, + GLint xoffset, GLint x, GLint y, + GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLint xoffset, GLint x, + GLint y, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, + GLint xoffset, GLint yoffset, GLint x, + GLint y, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLint xoffset, + GLint yoffset, GLint x, GLint y, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, GLint y, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, + const void *paths, GLuint pathBase, + GLenum coverMode, + GLenum transformType, + const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLCOVERFILLPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void(GLAD_API_PTR *PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)( + GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, + GLenum transformType, const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLCOVERSTROKEPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void(GLAD_API_PTR *PFNGLCOVERAGEMODULATIONNVPROC)(GLenum components); +typedef void(GLAD_API_PTR *PFNGLCOVERAGEMODULATIONTABLENVPROC)(GLsizei n, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint *buffers); +typedef void(GLAD_API_PTR *PFNGLCREATECOMMANDLISTSNVPROC)(GLsizei n, GLuint *lists); +typedef void(GLAD_API_PTR *PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); +typedef void(GLAD_API_PTR *PFNGLCREATEMEMORYOBJECTSEXTPROC)(GLsizei n, GLuint *memoryObjects); +typedef void(GLAD_API_PTR *PFNGLCREATEPERFQUERYINTELPROC)(GLuint queryId, GLuint *queryHandle); +typedef GLuint(GLAD_API_PTR *PFNGLCREATEPROGRAMPROC)(void); +typedef GLhandleARB(GLAD_API_PTR *PFNGLCREATEPROGRAMOBJECTARBPROC)(void); +typedef void(GLAD_API_PTR *PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); +typedef GLuint(GLAD_API_PTR *PFNGLCREATEPROGRESSFENCENVXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); +typedef void(GLAD_API_PTR *PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint *samplers); +typedef void(GLAD_API_PTR *PFNGLCREATESEMAPHORESNVPROC)(GLsizei n, GLuint *semaphores); +typedef GLuint(GLAD_API_PTR *PFNGLCREATESHADERPROC)(GLenum type); +typedef GLhandleARB(GLAD_API_PTR *PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType); +typedef GLuint(GLAD_API_PTR *PFNGLCREATESHADERPROGRAMEXTPROC)(GLenum type, const GLchar *string); +typedef GLuint(GLAD_API_PTR *PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, + const GLchar *const *strings); +typedef void(GLAD_API_PTR *PFNGLCREATESTATESNVPROC)(GLsizei n, GLuint *states); +typedef GLsync(GLAD_API_PTR *PFNGLCREATESYNCFROMCLEVENTARBPROC)(struct _cl_context *context, + struct _cl_event *event, + GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint *textures); +typedef void(GLAD_API_PTR *PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); +typedef void(GLAD_API_PTR *PFNGLCULLFACEPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLCULLPARAMETERDVEXTPROC)(GLenum pname, GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLCULLPARAMETERFVEXTPROC)(GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLCURRENTPALETTEMATRIXARBPROC)(GLint index); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, + const void *userParam); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, + void *userParam); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, + const void *userParam); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, + GLenum severity, GLsizei count, + const GLuint *ids, GLboolean enabled); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, + GLenum severity, GLsizei count, + const GLuint *ids, GLboolean enabled); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, + GLsizei count, const GLuint *ids, + GLboolean enabled); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, + GLenum severity, GLsizei length, + const GLchar *buf); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, + GLuint id, GLsizei length, + const GLchar *buf); +typedef void(GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, + GLenum severity, GLsizei length, + const GLchar *buf); +typedef void(GLAD_API_PTR *PFNGLDEFORMSGIXPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLDEFORMATIONMAP3DSGIXPROC)(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); +typedef void(GLAD_API_PTR *PFNGLDEFORMATIONMAP3FSGIXPROC)(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); +typedef void(GLAD_API_PTR *PFNGLDELETEASYNCMARKERSSGIXPROC)(GLuint marker, GLsizei range); +typedef void(GLAD_API_PTR *PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); +typedef void(GLAD_API_PTR *PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint *buffers); +typedef void(GLAD_API_PTR *PFNGLDELETECOMMANDLISTSNVPROC)(GLsizei n, const GLuint *lists); +typedef void(GLAD_API_PTR *PFNGLDELETEFENCESAPPLEPROC)(GLsizei n, const GLuint *fences); +typedef void(GLAD_API_PTR *PFNGLDELETEFENCESNVPROC)(GLsizei n, const GLuint *fences); +typedef void(GLAD_API_PTR *PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); +typedef void(GLAD_API_PTR *PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint *framebuffers); +typedef void(GLAD_API_PTR *PFNGLDELETEMEMORYOBJECTSEXTPROC)(GLsizei n, const GLuint *memoryObjects); +typedef void(GLAD_API_PTR *PFNGLDELETENAMEDSTRINGARBPROC)(GLint namelen, const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLDELETENAMESAMDPROC)(GLenum identifier, GLuint num, + const GLuint *names); +typedef void(GLAD_API_PTR *PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj); +typedef void(GLAD_API_PTR *PFNGLDELETEOCCLUSIONQUERIESNVPROC)(GLsizei n, const GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLDELETEPATHSNVPROC)(GLuint path, GLsizei range); +typedef void(GLAD_API_PTR *PFNGLDELETEPERFMONITORSAMDPROC)(GLsizei n, GLuint *monitors); +typedef void(GLAD_API_PTR *PFNGLDELETEPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void(GLAD_API_PTR *PFNGLDELETEPROGRAMPROC)(GLuint program); +typedef void(GLAD_API_PTR *PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint *pipelines); +typedef void(GLAD_API_PTR *PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint *programs); +typedef void(GLAD_API_PTR *PFNGLDELETEPROGRAMSNVPROC)(GLsizei n, const GLuint *programs); +typedef void(GLAD_API_PTR *PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLDELETEQUERIESARBPROC)(GLsizei n, const GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLDELETEQUERYRESOURCETAGNVPROC)(GLsizei n, const GLint *tagIds); +typedef void(GLAD_API_PTR *PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); +typedef void(GLAD_API_PTR *PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint *renderbuffers); +typedef void(GLAD_API_PTR *PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); +typedef void(GLAD_API_PTR *PFNGLDELETESEMAPHORESEXTPROC)(GLsizei n, const GLuint *semaphores); +typedef void(GLAD_API_PTR *PFNGLDELETESHADERPROC)(GLuint shader); +typedef void(GLAD_API_PTR *PFNGLDELETESTATESNVPROC)(GLsizei n, const GLuint *states); +typedef void(GLAD_API_PTR *PFNGLDELETESYNCPROC)(GLsync sync); +typedef void(GLAD_API_PTR *PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); +typedef void(GLAD_API_PTR *PFNGLDELETETEXTURESEXTPROC)(GLsizei n, const GLuint *textures); +typedef void(GLAD_API_PTR *PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLDELETETRANSFORMFEEDBACKSNVPROC)(GLsizei n, const GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); +typedef void(GLAD_API_PTR *PFNGLDELETEVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint *arrays); +typedef void(GLAD_API_PTR *PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLDEPTHBOUNDSEXTPROC)(GLclampd zmin, GLclampd zmax); +typedef void(GLAD_API_PTR *PFNGLDEPTHBOUNDSDNVPROC)(GLdouble zmin, GLdouble zmax); +typedef void(GLAD_API_PTR *PFNGLDEPTHFUNCPROC)(GLenum func); +typedef void(GLAD_API_PTR *PFNGLDEPTHMASKPROC)(GLboolean flag); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEARRAYDVNVPROC)(GLuint first, GLsizei count, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEINDEXEDDNVPROC)(GLuint index, GLdouble n, GLdouble f); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEDNVPROC)(GLdouble zNear, GLdouble zFar); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEFOESPROC)(GLclampf n, GLclampf f); +typedef void(GLAD_API_PTR *PFNGLDEPTHRANGEXOESPROC)(GLfixed n, GLfixed f); +typedef void(GLAD_API_PTR *PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, + GLhandleARB attachedObj); +typedef void(GLAD_API_PTR *PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +typedef void(GLAD_API_PTR *PFNGLDETAILTEXFUNCSGISPROC)(GLenum target, GLsizei n, + const GLfloat *points); +typedef void(GLAD_API_PTR *PFNGLDISABLEPROC)(GLenum cap); +typedef void(GLAD_API_PTR *PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void(GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void(GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISABLEIPROC)(GLenum target, GLuint index); +typedef void(GLAD_API_PTR *PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, + GLuint num_groups_z); +typedef void(GLAD_API_PTR *PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)( + GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, + GLuint group_size_y, GLuint group_size_z); +typedef void(GLAD_API_PTR *PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, + GLsizei instancecount); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDARBPROC)(GLenum mode, GLint first, GLsizei count, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, + GLsizei count, + GLsizei instancecount, + GLuint baseinstance); +typedef void(GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDEXTPROC)(GLenum mode, GLint start, GLsizei count, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLDRAWBUFFERPROC)(GLenum buf); +typedef void(GLAD_API_PTR *PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); +typedef void(GLAD_API_PTR *PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum *bufs); +typedef void(GLAD_API_PTR *PFNGLDRAWBUFFERSATIPROC)(GLsizei n, const GLenum *bufs); +typedef void(GLAD_API_PTR *PFNGLDRAWCOMMANDSADDRESSNVPROC)(GLenum primitiveMode, + const GLuint64 *indirects, + const GLsizei *sizes, GLuint count); +typedef void(GLAD_API_PTR *PFNGLDRAWCOMMANDSNVPROC)(GLenum primitiveMode, GLuint buffer, + const GLintptr *indirects, const GLsizei *sizes, + GLuint count); +typedef void(GLAD_API_PTR *PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)(const GLuint64 *indirects, + const GLsizei *sizes, + const GLuint *states, + const GLuint *fbos, GLuint count); +typedef void(GLAD_API_PTR *PFNGLDRAWCOMMANDSSTATESNVPROC)(GLuint buffer, const GLintptr *indirects, + const GLsizei *sizes, + const GLuint *states, const GLuint *fbos, + GLuint count); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, GLint first, GLsizei count); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, + const void *indices); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, + const void *indices, GLint basevertex); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, + const void *indirect); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, + const void *indices, + GLsizei instancecount); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDARBPROC)(GLenum mode, GLsizei count, + GLenum type, const void *indices, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, + GLenum type, + const void *indices, + GLsizei instancecount, + GLuint baseinstance); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, + GLenum type, + const void *indices, + GLsizei instancecount, + GLint basevertex); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)( + GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, + GLint basevertex, GLuint baseinstance); +typedef void(GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, + GLenum type, const void *indices, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLDRAWMESHARRAYSSUNPROC)(GLenum mode, GLint first, GLsizei count, + GLsizei width); +typedef void(GLAD_API_PTR *PFNGLDRAWMESHTASKSINDIRECTNVPROC)(GLintptr indirect); +typedef void(GLAD_API_PTR *PFNGLDRAWMESHTASKSNVPROC)(GLuint first, GLuint count); +typedef void(GLAD_API_PTR *PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, + GLuint end, GLint first, + GLsizei count); +typedef void(GLAD_API_PTR *PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, + GLsizei count); +typedef void(GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, + GLsizei count, GLenum type, + const void *indices); +typedef void(GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, + GLuint end, GLsizei count, + GLenum type, const void *indices, + GLint basevertex); +typedef void(GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSEXTPROC)(GLenum mode, GLuint start, GLuint end, + GLsizei count, GLenum type, + const void *indices); +typedef void(GLAD_API_PTR *PFNGLDRAWTEXTURENVPROC)(GLuint texture, GLuint sampler, GLfloat x0, + GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, + GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef void(GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); +typedef void(GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, + GLsizei instancecount); +typedef void(GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKNVPROC)(GLenum mode, GLuint id); +typedef void(GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, + GLuint stream); +typedef void(GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, + GLuint stream, + GLsizei instancecount); +typedef void(GLAD_API_PTR *PFNGLDRAWVKIMAGENVPROC)(GLuint64 vkImage, GLuint sampler, GLfloat x0, + GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, + GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef void(GLAD_API_PTR *PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC)(GLenum target, GLeglImageOES image, + const GLint *attrib_list); +typedef void(GLAD_API_PTR *PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC)(GLuint texture, + GLeglImageOES image, + const GLint *attrib_list); +typedef void(GLAD_API_PTR *PFNGLEDGEFLAGFORMATNVPROC)(GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, + const GLboolean *pointer); +typedef void(GLAD_API_PTR *PFNGLEDGEFLAGPOINTERLISTIBMPROC)(GLint stride, const GLboolean **pointer, + GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLELEMENTPOINTERAPPLEPROC)(GLenum type, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLENABLEPROC)(GLenum cap); +typedef void(GLAD_API_PTR *PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void(GLAD_API_PTR *PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void(GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void(GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void(GLAD_API_PTR *PFNGLENABLEIPROC)(GLenum target, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENDCONDITIONALRENDERPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDCONDITIONALRENDERNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDCONDITIONALRENDERNVXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDFRAGMENTSHADERATIPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDOCCLUSIONQUERYNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDPERFMONITORAMDPROC)(GLuint monitor); +typedef void(GLAD_API_PTR *PFNGLENDPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void(GLAD_API_PTR *PFNGLENDQUERYPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLENDQUERYARBPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); +typedef void(GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKEXTPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDVERTEXSHADEREXTPROC)(void); +typedef void(GLAD_API_PTR *PFNGLENDVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void(GLAD_API_PTR *PFNGLEVALCOORD1XOESPROC)(GLfixed u); +typedef void(GLAD_API_PTR *PFNGLEVALCOORD1XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLEVALCOORD2XOESPROC)(GLfixed u, GLfixed v); +typedef void(GLAD_API_PTR *PFNGLEVALCOORD2XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLEVALMAPSNVPROC)(GLenum target, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLEVALUATEDEPTHVALUESARBPROC)(void); +typedef void(GLAD_API_PTR *PFNGLEXECUTEPROGRAMNVPROC)(GLenum target, GLuint id, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void(GLAD_API_PTR *PFNGLFEEDBACKBUFFERXOESPROC)(GLsizei n, GLenum type, + const GLfixed *buffer); +typedef GLsync(GLAD_API_PTR *PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input, + GLenum mapping, GLenum componentUsage); +typedef void(GLAD_API_PTR *PFNGLFINISHPROC)(void); +typedef GLint(GLAD_API_PTR *PFNGLFINISHASYNCSGIXPROC)(GLuint *markerp); +typedef void(GLAD_API_PTR *PFNGLFINISHFENCEAPPLEPROC)(GLuint fence); +typedef void(GLAD_API_PTR *PFNGLFINISHFENCENVPROC)(GLuint fence); +typedef void(GLAD_API_PTR *PFNGLFINISHOBJECTAPPLEPROC)(GLenum object, GLint name); +typedef void(GLAD_API_PTR *PFNGLFINISHTEXTURESUNXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLFLUSHPROC)(void); +typedef void(GLAD_API_PTR *PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, + GLsizeiptr length); +typedef void(GLAD_API_PTR *PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)(GLenum target, GLintptr offset, + GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr length); +typedef void(GLAD_API_PTR *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr length); +typedef void(GLAD_API_PTR *PFNGLFLUSHPIXELDATARANGENVPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLFLUSHRASTERSGIXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLFLUSHSTATICDATAIBMPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void *pointer); +typedef void(GLAD_API_PTR *PFNGLFLUSHVERTEXARRAYRANGENVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDPOINTERLISTIBMPROC)(GLenum type, GLint stride, + const void **pointer, GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDDEXTPROC)(GLdouble coord); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDDVEXTPROC)(const GLdouble *coord); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDFEXTPROC)(GLfloat coord); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDFVEXTPROC)(const GLfloat *coord); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDHNVPROC)(GLhalfNV fog); +typedef void(GLAD_API_PTR *PFNGLFOGCOORDHVNVPROC)(const GLhalfNV *fog); +typedef void(GLAD_API_PTR *PFNGLFOGFUNCSGISPROC)(GLsizei n, const GLfloat *points); +typedef void(GLAD_API_PTR *PFNGLFOGXOESPROC)(GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLFOGXVOESPROC)(GLenum pname, const GLfixed *param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTCOLORMATERIALSGIXPROC)(GLenum face, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTCOVERAGECOLORNVPROC)(GLuint color); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELFSGIXPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELISGIXPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTFSGIXPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTISGIXPROC)(GLenum light, GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTMATERIALFSGIXPROC)(GLenum face, GLenum pname, + GLfloat param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTMATERIALISGIXPROC)(GLenum face, GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLFRAMETERMINATORGREMEDYPROC)(void); +typedef void(GLAD_API_PTR *PFNGLFRAMEZOOMSGIXPROC)(GLint factor); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)(GLuint framebuffer, GLsizei n, + const GLenum *bufs); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC)(void); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERPARAMETERIMESAPROC)(GLenum target, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERREADBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, + GLenum renderbuffertarget, + GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, + GLenum renderbuffertarget, + GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, + GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLenum target, GLuint start, + GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLenum target, + GLuint numsamples, + GLuint pixelindex, + const GLfloat *values); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level, GLint zoffset); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level, GLint zoffset); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level, + GLenum face); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level, + GLenum face); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level, + GLint layer); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level, + GLint layer); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)(GLenum target, GLenum attachment, + GLuint texture, GLint level, + GLint layer); +typedef void(GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)(GLenum target, + GLenum attachment, + GLuint texture, GLint level, + GLint baseViewIndex, + GLsizei numViews); +typedef void(GLAD_API_PTR *PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLFRONTFACEPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLFRUSTUMFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, + GLfloat n, GLfloat f); +typedef void(GLAD_API_PTR *PFNGLFRUSTUMXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, + GLfixed n, GLfixed f); +typedef GLuint(GLAD_API_PTR *PFNGLGENASYNCMARKERSSGIXPROC)(GLsizei range); +typedef void(GLAD_API_PTR *PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); +typedef void(GLAD_API_PTR *PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint *buffers); +typedef void(GLAD_API_PTR *PFNGLGENFENCESAPPLEPROC)(GLsizei n, GLuint *fences); +typedef void(GLAD_API_PTR *PFNGLGENFENCESNVPROC)(GLsizei n, GLuint *fences); +typedef GLuint(GLAD_API_PTR *PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); +typedef void(GLAD_API_PTR *PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); +typedef void(GLAD_API_PTR *PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint *framebuffers); +typedef void(GLAD_API_PTR *PFNGLGENNAMESAMDPROC)(GLenum identifier, GLuint num, GLuint *names); +typedef void(GLAD_API_PTR *PFNGLGENOCCLUSIONQUERIESNVPROC)(GLsizei n, GLuint *ids); +typedef GLuint(GLAD_API_PTR *PFNGLGENPATHSNVPROC)(GLsizei range); +typedef void(GLAD_API_PTR *PFNGLGENPERFMONITORSAMDPROC)(GLsizei n, GLuint *monitors); +typedef void(GLAD_API_PTR *PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); +typedef void(GLAD_API_PTR *PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint *programs); +typedef void(GLAD_API_PTR *PFNGLGENPROGRAMSNVPROC)(GLsizei n, GLuint *programs); +typedef void(GLAD_API_PTR *PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLGENQUERIESARBPROC)(GLsizei n, GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLGENQUERYRESOURCETAGNVPROC)(GLsizei n, GLint *tagIds); +typedef void(GLAD_API_PTR *PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); +typedef void(GLAD_API_PTR *PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint *renderbuffers); +typedef void(GLAD_API_PTR *PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); +typedef void(GLAD_API_PTR *PFNGLGENSEMAPHORESEXTPROC)(GLsizei n, GLuint *semaphores); +typedef GLuint(GLAD_API_PTR *PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, + GLenum range, GLuint components); +typedef void(GLAD_API_PTR *PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); +typedef void(GLAD_API_PTR *PFNGLGENTEXTURESEXTPROC)(GLsizei n, GLuint *textures); +typedef void(GLAD_API_PTR *PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLGENTRANSFORMFEEDBACKSNVPROC)(GLsizei n, GLuint *ids); +typedef void(GLAD_API_PTR *PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); +typedef void(GLAD_API_PTR *PFNGLGENVERTEXARRAYSAPPLEPROC)(GLsizei n, GLuint *arrays); +typedef GLuint(GLAD_API_PTR *PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); +typedef void(GLAD_API_PTR *PFNGLGENERATEMIPMAPPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLGENERATEMULTITEXMIPMAPEXTPROC)(GLenum texunit, GLenum target); +typedef void(GLAD_API_PTR *PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture); +typedef void(GLAD_API_PTR *PFNGLGENERATETEXTUREMIPMAPEXTPROC)(GLuint texture, GLenum target); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, + GLuint bufferIndex, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, + GLsizei *length, GLint *size, GLenum *type, + GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, + GLsizei maxLength, GLsizei *length, + GLint *size, GLenum *type, GLcharARB *name); +typedef void(GLAD_API_PTR *PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, + GLuint index, GLsizei bufSize, + GLsizei *length, GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, + GLenum shadertype, GLuint index, + GLsizei bufSize, + GLsizei *length, GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, + GLuint index, GLenum pname, + GLint *values); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, + GLsizei *length, GLint *size, GLenum *type, + GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index, + GLsizei maxLength, GLsizei *length, + GLint *size, GLenum *type, + GLcharARB *name); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, + GLuint uniformBlockIndex, + GLsizei bufSize, GLsizei *length, + GLchar *uniformBlockName); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, + GLuint uniformBlockIndex, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, + GLsizei bufSize, GLsizei *length, + GLchar *uniformName); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, + const GLuint *uniformIndices, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETACTIVEVARYINGNVPROC)(GLuint program, GLuint index, + GLsizei bufSize, GLsizei *length, + GLsizei *size, GLenum *type, GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj, + GLsizei maxCount, GLsizei *count, + GLhandleARB *obj); +typedef void(GLAD_API_PTR *PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, + GLsizei *count, GLuint *shaders); +typedef GLint(GLAD_API_PTR *PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, + const GLcharARB *name); +typedef void(GLAD_API_PTR *PFNGLGETBOOLEANINDEXEDVEXTPROC)(GLenum target, GLuint index, + GLboolean *data); +typedef void(GLAD_API_PTR *PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); +typedef void(GLAD_API_PTR *PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, + GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERPARAMETERUI64VNVPROC)(GLenum target, GLenum pname, + GLuint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, + void **params); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, + GLsizeiptr size, void *data); +typedef void(GLAD_API_PTR *PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, + GLsizeiptrARB size, void *data); +typedef void(GLAD_API_PTR *PFNGLGETCLIPPLANEFOESPROC)(GLenum plane, GLfloat *equation); +typedef void(GLAD_API_PTR *PFNGLGETCLIPPLANEXOESPROC)(GLenum plane, GLfixed *equation); +typedef void(GLAD_API_PTR *PFNGLGETCOLORTABLEEXTPROC)(GLenum target, GLenum format, GLenum type, + void *data); +typedef void(GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETCOLORTABLESGIPROC)(GLenum target, GLenum format, GLenum type, + void *table); +typedef void(GLAD_API_PTR *PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, + GLenum variable, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, + GLenum variable, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, + GLfloat *params); +typedef GLuint(GLAD_API_PTR *PFNGLGETCOMMANDHEADERNVPROC)(GLenum tokenID, GLuint size); +typedef void(GLAD_API_PTR *PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, + GLint lod, void *img); +typedef void(GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); +typedef void(GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, + void *img); +typedef void(GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, + GLsizei bufSize, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, + GLint lod, void *img); +typedef void(GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLsizei bufSize, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETCONVOLUTIONFILTEREXTPROC)(GLenum target, GLenum format, + GLenum type, void *image); +typedef void(GLAD_API_PTR *PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, + GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLGETCOVERAGEMODULATIONTABLENVPROC)(GLsizei bufSize, GLfloat *v); +typedef GLuint(GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, + GLenum *sources, GLenum *types, + GLuint *ids, GLenum *severities, + GLsizei *lengths, GLchar *messageLog); +typedef GLuint(GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufSize, + GLenum *categories, GLenum *severities, + GLuint *ids, GLsizei *lengths, + GLchar *message); +typedef GLuint(GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, + GLenum *sources, GLenum *types, + GLuint *ids, GLenum *severities, + GLsizei *lengths, GLchar *messageLog); +typedef void(GLAD_API_PTR *PFNGLGETDETAILTEXFUNCSGISPROC)(GLenum target, GLfloat *points); +typedef void(GLAD_API_PTR *PFNGLGETDOUBLEINDEXEDVEXTPROC)(GLenum target, GLuint index, + GLdouble *data); +typedef void(GLAD_API_PTR *PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble *data); +typedef void(GLAD_API_PTR *PFNGLGETDOUBLEI_VEXTPROC)(GLenum pname, GLuint index, GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); +typedef GLenum(GLAD_API_PTR *PFNGLGETERRORPROC)(void); +typedef void(GLAD_API_PTR *PFNGLGETFENCEIVNVPROC)(GLuint fence, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, + GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, + GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFIRSTPERFQUERYIDINTELPROC)(GLuint *queryId); +typedef void(GLAD_API_PTR *PFNGLGETFIXEDVOESPROC)(GLenum pname, GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLGETFLOATINDEXEDVEXTPROC)(GLenum target, GLuint index, + GLfloat *data); +typedef void(GLAD_API_PTR *PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data); +typedef void(GLAD_API_PTR *PFNGLGETFLOATI_VEXTPROC)(GLenum pname, GLuint index, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); +typedef void(GLAD_API_PTR *PFNGLGETFOGFUNCSGISPROC)(GLfloat *points); +typedef GLint(GLAD_API_PTR *PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, + GLenum attachment, + GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, + GLenum attachment, + GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC)(GLenum target, GLenum pname, + GLuint numsamples, + GLuint pixelindex, GLsizei size, + GLfloat *values); +typedef void(GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC)(GLenum target, GLenum pname, + GLint *params); +typedef GLenum(GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSPROC)(void); +typedef GLenum(GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); +typedef GLhandleARB(GLAD_API_PTR *PFNGLGETHANDLEARBPROC)(GLenum pname); +typedef void(GLAD_API_PTR *PFNGLGETHISTOGRAMEXTPROC)(GLenum target, GLboolean reset, GLenum format, + GLenum type, void *values); +typedef void(GLAD_API_PTR *PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETHISTOGRAMPARAMETERXVOESPROC)(GLenum target, GLenum pname, + GLfixed *params); +typedef GLuint64(GLAD_API_PTR *PFNGLGETIMAGEHANDLEARBPROC)(GLuint texture, GLint level, + GLboolean layered, GLint layer, + GLenum format); +typedef GLuint64(GLAD_API_PTR *PFNGLGETIMAGEHANDLENVPROC)(GLuint texture, GLint level, + GLboolean layered, GLint layer, + GLenum format); +typedef void(GLAD_API_PTR *PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETINFOLOGARBPROC)(GLhandleARB obj, GLsizei maxLength, + GLsizei *length, GLcharARB *infoLog); +typedef GLint(GLAD_API_PTR *PFNGLGETINSTRUMENTSSGIXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); +typedef void(GLAD_API_PTR *PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); +typedef void(GLAD_API_PTR *PFNGLGETINTEGERINDEXEDVEXTPROC)(GLenum target, GLuint index, + GLint *data); +typedef void(GLAD_API_PTR *PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); +typedef void(GLAD_API_PTR *PFNGLGETINTEGERUI64I_VNVPROC)(GLenum value, GLuint index, + GLuint64EXT *result); +typedef void(GLAD_API_PTR *PFNGLGETINTEGERUI64VNVPROC)(GLenum value, GLuint64EXT *result); +typedef void(GLAD_API_PTR *PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); +typedef void(GLAD_API_PTR *PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)(GLenum target, + GLenum internalformat, + GLsizei samples, GLenum pname, + GLsizei count, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, + GLenum pname, GLsizei count, + GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, + GLenum pname, GLsizei count, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, + GLboolean *data); +typedef void(GLAD_API_PTR *PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat *data); +typedef void(GLAD_API_PTR *PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint *data); +typedef void(GLAD_API_PTR *PFNGLGETLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLGETLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, + GLboolean *data); +typedef void(GLAD_API_PTR *PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, + GLfloat *data); +typedef void(GLAD_API_PTR *PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, + GLint *data); +typedef void(GLAD_API_PTR *PFNGLGETMAPATTRIBPARAMETERFVNVPROC)(GLenum target, GLuint index, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMAPATTRIBPARAMETERIVNVPROC)(GLenum target, GLuint index, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, + GLsizei ustride, GLsizei vstride, + GLboolean packed, void *points); +typedef void(GLAD_API_PTR *PFNGLGETMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMAPXVOESPROC)(GLenum target, GLenum query, GLfixed *v); +typedef void(GLAD_API_PTR *PFNGLGETMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC)( + GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC)(GLuint memoryObject, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMINMAXEXTPROC)(GLenum target, GLboolean reset, GLenum format, + GLenum type, void *values); +typedef void(GLAD_API_PTR *PFNGLGETMINMAXPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMINMAXPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, + GLenum format, GLenum type, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); +typedef void(GLAD_API_PTR *PFNGLGETMULTISAMPLEFVNVPROC)(GLenum pname, GLuint index, GLfloat *val); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, + GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)(GLuint buffer, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)(GLuint buffer, GLenum pname, + GLuint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, + void **params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)(GLuint buffer, GLenum pname, + void **params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, void *data); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, void *data); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, + GLenum attachment, + GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLuint framebuffer, + GLenum attachment, + GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC)( + GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, + GLfloat *values); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, + GLenum pname, GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)(GLuint program, + GLenum target, + GLuint index, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)(GLuint program, + GLenum target, + GLuint index, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)(GLuint program, + GLenum target, GLuint index, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)(GLuint program, + GLenum target, GLuint index, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, + GLenum pname, void *string); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDPROGRAMIVEXTPROC)(GLuint program, GLenum target, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)(GLuint renderbuffer, + GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDSTRINGARBPROC)(GLint namelen, const GLchar *name, + GLsizei bufSize, GLint *stringlen, + GLchar *string); +typedef void(GLAD_API_PTR *PFNGLGETNAMEDSTRINGIVARBPROC)(GLint namelen, const GLchar *name, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNEXTPERFQUERYIDINTELPROC)(GLuint queryId, GLuint *nextQueryId); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, + GLsizei *length, GLchar *label); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTLABELEXTPROC)(GLenum type, GLuint object, GLsizei bufSize, + GLsizei *length, GLchar *label); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTPARAMETERIVAPPLEPROC)(GLenum objectType, GLuint name, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETOBJECTPTRLABELPROC)(const void *ptr, GLsizei bufSize, + GLsizei *length, GLchar *label); +typedef void(GLAD_API_PTR *PFNGLGETOCCLUSIONQUERYIVNVPROC)(GLuint id, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETOCCLUSIONQUERYUIVNVPROC)(GLuint id, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETPATHCOMMANDSNVPROC)(GLuint path, GLubyte *commands); +typedef void(GLAD_API_PTR *PFNGLGETPATHCOORDSNVPROC)(GLuint path, GLfloat *coords); +typedef void(GLAD_API_PTR *PFNGLGETPATHDASHARRAYNVPROC)(GLuint path, GLfloat *dashArray); +typedef GLfloat(GLAD_API_PTR *PFNGLGETPATHLENGTHNVPROC)(GLuint path, GLsizei startSegment, + GLsizei numSegments); +typedef void(GLAD_API_PTR *PFNGLGETPATHMETRICRANGENVPROC)(GLbitfield metricQueryMask, + GLuint firstPathName, GLsizei numPaths, + GLsizei stride, GLfloat *metrics); +typedef void(GLAD_API_PTR *PFNGLGETPATHMETRICSNVPROC)(GLbitfield metricQueryMask, GLsizei numPaths, + GLenum pathNameType, const void *paths, + GLuint pathBase, GLsizei stride, + GLfloat *metrics); +typedef void(GLAD_API_PTR *PFNGLGETPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, + GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLGETPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, GLint *value); +typedef void(GLAD_API_PTR *PFNGLGETPATHSPACINGNVPROC)(GLenum pathListMode, GLsizei numPaths, + GLenum pathNameType, const void *paths, + GLuint pathBase, GLfloat advanceScale, + GLfloat kerningScale, GLenum transformType, + GLfloat *returnedSpacing); +typedef void(GLAD_API_PTR *PFNGLGETPERFCOUNTERINFOINTELPROC)( + GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, + GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, + GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, + GLuint64 *rawCounterMaxValue); +typedef void(GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)(GLuint monitor, GLenum pname, + GLsizei dataSize, GLuint *data, + GLint *bytesWritten); +typedef void(GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)(GLuint group, GLuint counter, + GLenum pname, void *data); +typedef void(GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)(GLuint group, GLuint counter, + GLsizei bufSize, + GLsizei *length, + GLchar *counterString); +typedef void(GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERSAMDPROC)(GLuint group, GLint *numCounters, + GLint *maxActiveCounters, + GLsizei counterSize, + GLuint *counters); +typedef void(GLAD_API_PTR *PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)(GLuint group, GLsizei bufSize, + GLsizei *length, + GLchar *groupString); +typedef void(GLAD_API_PTR *PFNGLGETPERFMONITORGROUPSAMDPROC)(GLint *numGroups, GLsizei groupsSize, + GLuint *groups); +typedef void(GLAD_API_PTR *PFNGLGETPERFQUERYDATAINTELPROC)(GLuint queryHandle, GLuint flags, + GLsizei dataSize, void *data, + GLuint *bytesWritten); +typedef void(GLAD_API_PTR *PFNGLGETPERFQUERYIDBYNAMEINTELPROC)(GLchar *queryName, GLuint *queryId); +typedef void(GLAD_API_PTR *PFNGLGETPERFQUERYINFOINTELPROC)(GLuint queryId, GLuint queryNameLength, + GLchar *queryName, GLuint *dataSize, + GLuint *noCounters, GLuint *noInstances, + GLuint *capsMask); +typedef void(GLAD_API_PTR *PFNGLGETPIXELMAPXVPROC)(GLenum map, GLint size, GLfixed *values); +typedef void(GLAD_API_PTR *PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPOINTERINDEXEDVEXTPROC)(GLenum target, GLuint index, + void **data); +typedef void(GLAD_API_PTR *PFNGLGETPOINTERI_VEXTPROC)(GLenum pname, GLuint index, void **params); +typedef void(GLAD_API_PTR *PFNGLGETPOINTERVPROC)(GLenum pname, void **params); +typedef void(GLAD_API_PTR *PFNGLGETPOINTERVEXTPROC)(GLenum pname, void **params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, + GLsizei *length, GLenum *binaryFormat, + void *binary); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)(GLenum target, GLuint index, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)(GLenum target, GLuint index, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, + GLsizei *length, GLchar *infoLog); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)(GLenum target, GLuint index, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)(GLenum target, GLuint index, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)(GLuint id, GLsizei len, + const GLubyte *name, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)(GLuint id, GLsizei len, + const GLubyte *name, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMPARAMETERDVNVPROC)(GLenum target, GLuint index, + GLenum pname, GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMPARAMETERFVNVPROC)(GLenum target, GLuint index, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, + GLsizei *length, GLchar *infoLog); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, + GLint *params); +typedef GLuint(GLAD_API_PTR *PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, + GLenum programInterface, + const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, + GLenum programInterface, + const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, + GLenum programInterface, + const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, + GLuint index, GLsizei bufSize, + GLsizei *length, GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMRESOURCEFVNVPROC)(GLuint program, GLenum programInterface, + GLuint index, GLsizei propCount, + const GLenum *props, GLsizei count, + GLsizei *length, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, + GLuint index, GLsizei propCount, + const GLenum *props, GLsizei count, + GLsizei *length, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, + GLenum pname, GLint *values); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void *string); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMSTRINGNVPROC)(GLuint id, GLenum pname, GLubyte *program); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)(GLenum target, GLuint index, + GLuint *param); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETPROGRAMIVNVPROC)(GLuint id, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, + GLenum pname, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, + GLenum pname, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTI64VEXTPROC)(GLuint id, GLenum pname, + GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTIVARBPROC)(GLuint id, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTUI64VEXTPROC)(GLuint id, GLenum pname, + GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYOBJECTUIVARBPROC)(GLuint id, GLenum pname, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETSEMAPHOREPARAMETERIVNVPROC)(GLuint semaphore, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC)(GLuint semaphore, GLenum pname, + GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETSEPARABLEFILTEREXTPROC)(GLenum target, GLenum format, + GLenum type, void *row, void *column, + void *span); +typedef void(GLAD_API_PTR *PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, + GLsizei *length, GLchar *infoLog); +typedef void(GLAD_API_PTR *PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, + GLenum precisiontype, GLint *range, + GLint *precision); +typedef void(GLAD_API_PTR *PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, + GLsizei *length, GLchar *source); +typedef void(GLAD_API_PTR *PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj, GLsizei maxLength, + GLsizei *length, GLcharARB *source); +typedef void(GLAD_API_PTR *PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETSHADINGRATEIMAGEPALETTENVPROC)(GLuint viewport, GLuint entry, + GLenum *rate); +typedef void(GLAD_API_PTR *PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC)(GLenum rate, GLuint samples, + GLuint index, + GLint *location); +typedef void(GLAD_API_PTR *PFNGLGETSHARPENTEXFUNCSGISPROC)(GLenum target, GLfloat *points); +typedef GLushort(GLAD_API_PTR *PFNGLGETSTAGEINDEXNVPROC)(GLenum shadertype); +typedef const GLubyte *(GLAD_API_PTR *PFNGLGETSTRINGPROC)(GLenum name); +typedef const GLubyte *(GLAD_API_PTR *PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +typedef GLuint(GLAD_API_PTR *PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, + const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, + GLenum shadertype, + const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, + GLsizei *length, GLint *values); +typedef void(GLAD_API_PTR *PFNGLGETTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat *param); +typedef void(GLAD_API_PTR *PFNGLGETTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETTEXENVXVOESPROC)(GLenum target, GLenum pname, GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, + GLfloat *weights); +typedef void(GLAD_API_PTR *PFNGLGETTEXGENXVOESPROC)(GLenum coord, GLenum pname, GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, + GLenum type, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERXVOESPROC)(GLenum target, GLint level, + GLenum pname, GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)(GLenum target, GLenum pname, + void **params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, + GLfixed *params); +typedef GLuint64(GLAD_API_PTR *PFNGLGETTEXTUREHANDLEARBPROC)(GLuint texture); +typedef GLuint64(GLAD_API_PTR *PFNGLGETTEXTUREHANDLENVPROC)(GLuint texture); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, + GLenum type, GLsizei bufSize, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, + GLenum format, GLenum type, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)(GLuint texture, GLenum target, + GLint level, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)(GLuint texture, GLenum target, + GLint level, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, GLint *params); +typedef GLuint64(GLAD_API_PTR *PFNGLGETTEXTURESAMPLERHANDLEARBPROC)(GLuint texture, GLuint sampler); +typedef GLuint64(GLAD_API_PTR *PFNGLGETTEXTURESAMPLERHANDLENVPROC)(GLuint texture, GLuint sampler); +typedef void(GLAD_API_PTR *PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, GLenum type, GLsizei bufSize, + void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETTRACKMATRIXIVNVPROC)(GLenum target, GLuint address, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, + GLsizei bufSize, GLsizei *length, + GLsizei *size, GLenum *type, + GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)(GLuint program, GLuint index, + GLsizei bufSize, + GLsizei *length, GLsizei *size, + GLenum *type, GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)(GLuint program, GLuint index, + GLint *location); +typedef void(GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, + GLuint index, GLint64 *param); +typedef void(GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, + GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint *param); +typedef GLuint(GLAD_API_PTR *PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, + const GLchar *uniformBlockName); +typedef GLint(GLAD_API_PTR *PFNGLGETUNIFORMBUFFERSIZEEXTPROC)(GLuint program, GLint location); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, + const GLchar *const *uniformNames, + GLuint *uniformIndices); +typedef GLint(GLAD_API_PTR *PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); +typedef GLint(GLAD_API_PTR *PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, + const GLcharARB *name); +typedef GLintptr(GLAD_API_PTR *PFNGLGETUNIFORMOFFSETEXTPROC)(GLuint program, GLint location); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMI64VARBPROC)(GLuint program, GLint location, + GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMI64VNVPROC)(GLuint program, GLint location, + GLint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMUI64VARBPROC)(GLuint program, GLint location, + GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMUI64VNVPROC)(GLuint program, GLint location, + GLuint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETUNSIGNEDBYTEI_VEXTPROC)(GLenum target, GLuint index, + GLubyte *data); +typedef void(GLAD_API_PTR *PFNGLGETUNSIGNEDBYTEVEXTPROC)(GLenum pname, GLubyte *data); +typedef void(GLAD_API_PTR *PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, + GLboolean *data); +typedef void(GLAD_API_PTR *PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat *data); +typedef void(GLAD_API_PTR *PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint *data); +typedef void(GLAD_API_PTR *PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void **data); +typedef GLint(GLAD_API_PTR *PFNGLGETVARYINGLOCATIONNVPROC)(GLuint program, const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, + GLenum pname, GLint64 *param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, + GLenum pname, GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)(GLuint vaobj, GLuint index, + GLenum pname, GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYINTEGERVEXTPROC)(GLuint vaobj, GLenum pname, + GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)(GLuint vaobj, GLuint index, + GLenum pname, void **param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYPOINTERVEXTPROC)(GLuint vaobj, GLenum pname, + void **param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint *param); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)(GLuint index, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)(GLuint index, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBLDVEXTPROC)(GLuint index, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBLI64VNVPROC)(GLuint index, GLenum pname, + GLint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBLUI64VARBPROC)(GLuint index, GLenum pname, + GLuint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBLUI64VNVPROC)(GLuint index, GLenum pname, + GLuint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, + void **pointer); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, + void **pointer); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVNVPROC)(GLuint index, GLenum pname, + void **pointer); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVNVPROC)(GLuint index, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVNVPROC)(GLuint index, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVNVPROC)(GLuint index, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)(GLuint video_capture_slot, + GLuint stream, GLenum pname, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)(GLuint video_capture_slot, + GLuint stream, GLenum pname, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)(GLuint video_capture_slot, + GLuint stream, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOCAPTUREIVNVPROC)(GLuint video_capture_slot, GLenum pname, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOI64VNVPROC)(GLuint video_slot, GLenum pname, + GLint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOIVNVPROC)(GLuint video_slot, GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOUI64VNVPROC)(GLuint video_slot, GLenum pname, + GLuint64EXT *params); +typedef void(GLAD_API_PTR *PFNGLGETVIDEOUIVNVPROC)(GLuint video_slot, GLenum pname, GLuint *params); +typedef GLVULKANPROCNV(GLAD_API_PTR *PFNGLGETVKPROCADDRNVPROC)(const GLchar *name); +typedef void(GLAD_API_PTR *PFNGLGETNCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, + GLsizei bufSize, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, + GLsizei bufSize, void *img); +typedef void(GLAD_API_PTR *PFNGLGETNTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, + GLenum type, GLsizei bufSize, void *pixels); +typedef void(GLAD_API_PTR *PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, + GLenum type, GLsizei bufSize, void *img); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMDVPROC)(GLuint program, GLint location, GLsizei bufSize, + GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, + GLsizei bufSize, GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, + GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, + GLsizei bufSize, GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMI64VARBPROC)(GLuint program, GLint location, + GLsizei bufSize, GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, + GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, + GLsizei bufSize, GLint *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMUI64VARBPROC)(GLuint program, GLint location, + GLsizei bufSize, GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, + GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, + GLsizei bufSize, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORBSUNPROC)(GLbyte factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORDSUNPROC)(GLdouble factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORFSUNPROC)(GLfloat factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORISUNPROC)(GLint factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORSSUNPROC)(GLshort factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORUBSUNPROC)(GLubyte factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORUISUNPROC)(GLuint factor); +typedef void(GLAD_API_PTR *PFNGLGLOBALALPHAFACTORUSSUNPROC)(GLushort factor); +typedef void(GLAD_API_PTR *PFNGLHINTPROC)(GLenum target, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLHINTPGIPROC)(GLenum target, GLint mode); +typedef void(GLAD_API_PTR *PFNGLHISTOGRAMEXTPROC)(GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink); +typedef void(GLAD_API_PTR *PFNGLIGLOOINTERFACESGIXPROC)(GLenum pname, const void *params); +typedef void(GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERFHPPROC)(GLenum target, GLenum pname, + GLfloat param); +typedef void(GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERIHPPROC)(GLenum target, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLIMPORTMEMORYFDEXTPROC)(GLuint memory, GLuint64 size, + GLenum handleType, GLint fd); +typedef void(GLAD_API_PTR *PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC)(GLuint memory, GLuint64 size, + GLenum handleType, void *handle); +typedef void(GLAD_API_PTR *PFNGLIMPORTMEMORYWIN32NAMEEXTPROC)(GLuint memory, GLuint64 size, + GLenum handleType, const void *name); +typedef void(GLAD_API_PTR *PFNGLIMPORTSEMAPHOREFDEXTPROC)(GLuint semaphore, GLenum handleType, + GLint fd); +typedef void(GLAD_API_PTR *PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC)(GLuint semaphore, + GLenum handleType, void *handle); +typedef void(GLAD_API_PTR *PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC)(GLuint semaphore, + GLenum handleType, + const void *name); +typedef GLsync(GLAD_API_PTR *PFNGLIMPORTSYNCEXTPROC)(GLenum external_sync_type, + GLintptr external_sync, GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLINDEXFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLINDEXFUNCEXTPROC)(GLenum func, GLclampf ref); +typedef void(GLAD_API_PTR *PFNGLINDEXMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLINDEXPOINTERLISTIBMPROC)(GLenum type, GLint stride, + const void **pointer, GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLINDEXXOESPROC)(GLfixed component); +typedef void(GLAD_API_PTR *PFNGLINDEXXVOESPROC)(const GLfixed *component); +typedef void(GLAD_API_PTR *PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void(GLAD_API_PTR *PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar *marker); +typedef void(GLAD_API_PTR *PFNGLINSTRUMENTSBUFFERSGIXPROC)(GLsizei size, GLint *buffer); +typedef void(GLAD_API_PTR *PFNGLINTERPOLATEPATHSNVPROC)(GLuint resultPath, GLuint pathA, + GLuint pathB, GLfloat weight); +typedef void(GLAD_API_PTR *PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr length); +typedef void(GLAD_API_PTR *PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, + const GLenum *attachments); +typedef void(GLAD_API_PTR *PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, + GLsizei numAttachments, + const GLenum *attachments); +typedef void(GLAD_API_PTR *PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)( + GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, + const GLenum *attachments, GLint x, + GLint y, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); +typedef void(GLAD_API_PTR *PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth); +typedef GLboolean(GLAD_API_PTR *PFNGLISASYNCMARKERSGIXPROC)(GLuint marker); +typedef GLboolean(GLAD_API_PTR *PFNGLISBUFFERPROC)(GLuint buffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISBUFFERARBPROC)(GLuint buffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISBUFFERRESIDENTNVPROC)(GLenum target); +typedef GLboolean(GLAD_API_PTR *PFNGLISCOMMANDLISTNVPROC)(GLuint list); +typedef GLboolean(GLAD_API_PTR *PFNGLISENABLEDPROC)(GLenum cap); +typedef GLboolean(GLAD_API_PTR *PFNGLISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef GLboolean(GLAD_API_PTR *PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +typedef GLboolean(GLAD_API_PTR *PFNGLISFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean(GLAD_API_PTR *PFNGLISFENCENVPROC)(GLuint fence); +typedef GLboolean(GLAD_API_PTR *PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean(GLAD_API_PTR *PFNGLISIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean(GLAD_API_PTR *PFNGLISMEMORYOBJECTEXTPROC)(GLuint memoryObject); +typedef GLboolean(GLAD_API_PTR *PFNGLISNAMEAMDPROC)(GLenum identifier, GLuint name); +typedef GLboolean(GLAD_API_PTR *PFNGLISNAMEDBUFFERRESIDENTNVPROC)(GLuint buffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISNAMEDSTRINGARBPROC)(GLint namelen, const GLchar *name); +typedef GLboolean(GLAD_API_PTR *PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISOCCLUSIONQUERYNVPROC)(GLuint id); +typedef GLboolean(GLAD_API_PTR *PFNGLISPATHNVPROC)(GLuint path); +typedef GLboolean(GLAD_API_PTR *PFNGLISPOINTINFILLPATHNVPROC)(GLuint path, GLuint mask, GLfloat x, + GLfloat y); +typedef GLboolean(GLAD_API_PTR *PFNGLISPOINTINSTROKEPATHNVPROC)(GLuint path, GLfloat x, GLfloat y); +typedef GLboolean(GLAD_API_PTR *PFNGLISPROGRAMPROC)(GLuint program); +typedef GLboolean(GLAD_API_PTR *PFNGLISPROGRAMARBPROC)(GLuint program); +typedef GLboolean(GLAD_API_PTR *PFNGLISPROGRAMNVPROC)(GLuint id); +typedef GLboolean(GLAD_API_PTR *PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef GLboolean(GLAD_API_PTR *PFNGLISQUERYPROC)(GLuint id); +typedef GLboolean(GLAD_API_PTR *PFNGLISQUERYARBPROC)(GLuint id); +typedef GLboolean(GLAD_API_PTR *PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); +typedef GLboolean(GLAD_API_PTR *PFNGLISSAMPLERPROC)(GLuint sampler); +typedef GLboolean(GLAD_API_PTR *PFNGLISSEMAPHOREEXTPROC)(GLuint semaphore); +typedef GLboolean(GLAD_API_PTR *PFNGLISSHADERPROC)(GLuint shader); +typedef GLboolean(GLAD_API_PTR *PFNGLISSTATENVPROC)(GLuint state); +typedef GLboolean(GLAD_API_PTR *PFNGLISSYNCPROC)(GLsync sync); +typedef GLboolean(GLAD_API_PTR *PFNGLISTEXTUREPROC)(GLuint texture); +typedef GLboolean(GLAD_API_PTR *PFNGLISTEXTUREEXTPROC)(GLuint texture); +typedef GLboolean(GLAD_API_PTR *PFNGLISTEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean(GLAD_API_PTR *PFNGLISTEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean(GLAD_API_PTR *PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); +typedef GLboolean(GLAD_API_PTR *PFNGLISTRANSFORMFEEDBACKNVPROC)(GLuint id); +typedef GLboolean(GLAD_API_PTR *PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); +typedef GLboolean(GLAD_API_PTR *PFNGLISVERTEXARRAYPROC)(GLuint array); +typedef GLboolean(GLAD_API_PTR *PFNGLISVERTEXARRAYAPPLEPROC)(GLuint array); +typedef GLboolean(GLAD_API_PTR *PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)(GLuint index, GLenum pname); +typedef void(GLAD_API_PTR *PFNGLLGPUCOPYIMAGESUBDATANVXPROC)( + GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, + GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, + GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, + GLsizei depth); +typedef void(GLAD_API_PTR *PFNGLLGPUINTERLOCKNVXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC)(GLbitfield gpuMask, GLuint buffer, + GLintptr offset, GLsizeiptr size, + const void *data); +typedef void(GLAD_API_PTR *PFNGLLABELOBJECTEXTPROC)(GLenum type, GLuint object, GLsizei length, + const GLchar *label); +typedef void(GLAD_API_PTR *PFNGLLIGHTENVISGIXPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLLIGHTMODELXOESPROC)(GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLLIGHTMODELXVOESPROC)(GLenum pname, const GLfixed *param); +typedef void(GLAD_API_PTR *PFNGLLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLLIGHTXVOESPROC)(GLenum light, GLenum pname, const GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLLINEWIDTHPROC)(GLfloat width); +typedef void(GLAD_API_PTR *PFNGLLINEWIDTHXOESPROC)(GLfixed width); +typedef void(GLAD_API_PTR *PFNGLLINKPROGRAMPROC)(GLuint program); +typedef void(GLAD_API_PTR *PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj); +typedef void(GLAD_API_PTR *PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)( + GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, + const GLuint *states, const GLuint *fbos, GLuint count); +typedef void(GLAD_API_PTR *PFNGLLISTPARAMETERFSGIXPROC)(GLuint list, GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLLISTPARAMETERISGIXPROC)(GLuint list, GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLLOADMATRIXXOESPROC)(const GLfixed *m); +typedef void(GLAD_API_PTR *PFNGLLOADPROGRAMNVPROC)(GLenum target, GLuint id, GLsizei len, + const GLubyte *program); +typedef void(GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXDARBPROC)(const GLdouble *m); +typedef void(GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXFARBPROC)(const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXXOESPROC)(const GLfixed *m); +typedef void(GLAD_API_PTR *PFNGLLOCKARRAYSEXTPROC)(GLint first, GLsizei count); +typedef void(GLAD_API_PTR *PFNGLLOGICOPPROC)(GLenum opcode); +typedef void(GLAD_API_PTR *PFNGLMAKEBUFFERNONRESIDENTNVPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLMAKEBUFFERRESIDENTNVPROC)(GLenum target, GLenum access); +typedef void(GLAD_API_PTR *PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void(GLAD_API_PTR *PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void(GLAD_API_PTR *PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle, GLenum access); +typedef void(GLAD_API_PTR *PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle, GLenum access); +typedef void(GLAD_API_PTR *PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)(GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)(GLuint buffer, GLenum access); +typedef void(GLAD_API_PTR *PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void(GLAD_API_PTR *PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void(GLAD_API_PTR *PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef void(GLAD_API_PTR *PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef void(GLAD_API_PTR *PFNGLMAP1XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, + GLint order, GLfixed points); +typedef void(GLAD_API_PTR *PFNGLMAP2XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, + GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, + GLint vorder, GLfixed points); +typedef void *(GLAD_API_PTR *PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +typedef void *(GLAD_API_PTR *PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); +typedef void *(GLAD_API_PTR *PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, + GLsizeiptr length, GLbitfield access); +typedef void(GLAD_API_PTR *PFNGLMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, + GLsizei ustride, GLsizei vstride, + GLint uorder, GLint vorder, + GLboolean packed, const void *points); +typedef void(GLAD_API_PTR *PFNGLMAPGRID1XOESPROC)(GLint n, GLfixed u1, GLfixed u2); +typedef void(GLAD_API_PTR *PFNGLMAPGRID2XOESPROC)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, + GLfixed v2); +typedef void *(GLAD_API_PTR *PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access); +typedef void *(GLAD_API_PTR *PFNGLMAPNAMEDBUFFEREXTPROC)(GLuint buffer, GLenum access); +typedef void *(GLAD_API_PTR *PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr length, GLbitfield access); +typedef void *(GLAD_API_PTR *PFNGLMAPNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr length, GLbitfield access); +typedef void *(GLAD_API_PTR *PFNGLMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void *(GLAD_API_PTR *PFNGLMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level, + GLbitfield access, GLint *stride, + GLenum *layout); +typedef void(GLAD_API_PTR *PFNGLMAPVERTEXATTRIB1DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, + GLdouble u2, GLint stride, GLint order, + const GLdouble *points); +typedef void(GLAD_API_PTR *PFNGLMAPVERTEXATTRIB1FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, + GLfloat u2, GLint stride, GLint order, + const GLfloat *points); +typedef void(GLAD_API_PTR *PFNGLMAPVERTEXATTRIB2DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, + GLdouble u2, GLint ustride, + GLint uorder, GLdouble v1, GLdouble v2, + GLint vstride, GLint vorder, + const GLdouble *points); +typedef void(GLAD_API_PTR *PFNGLMAPVERTEXATTRIB2FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, + GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, + GLint vorder, const GLfloat *points); +typedef void(GLAD_API_PTR *PFNGLMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLMATERIALXVOESPROC)(GLenum face, GLenum pname, const GLfixed *param); +typedef void(GLAD_API_PTR *PFNGLMATRIXFRUSTUMEXTPROC)(GLenum mode, GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, GLdouble zNear, + GLdouble zFar); +typedef void(GLAD_API_PTR *PFNGLMATRIXINDEXPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLMATRIXINDEXUBVARBPROC)(GLint size, const GLubyte *indices); +typedef void(GLAD_API_PTR *PFNGLMATRIXINDEXUIVARBPROC)(GLint size, const GLuint *indices); +typedef void(GLAD_API_PTR *PFNGLMATRIXINDEXUSVARBPROC)(GLint size, const GLushort *indices); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOAD3X2FNVPROC)(GLenum matrixMode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOAD3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOADIDENTITYEXTPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOADTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOADTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOADDEXTPROC)(GLenum mode, const GLdouble *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXLOADFEXTPROC)(GLenum mode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULT3X2FNVPROC)(GLenum matrixMode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULT3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULTTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULTTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULTDEXTPROC)(GLenum mode, const GLdouble *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXMULTFEXTPROC)(GLenum mode, const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMATRIXORTHOEXTPROC)(GLenum mode, GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, GLdouble zNear, + GLdouble zFar); +typedef void(GLAD_API_PTR *PFNGLMATRIXPOPEXTPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLMATRIXPUSHEXTPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLMATRIXROTATEDEXTPROC)(GLenum mode, GLdouble angle, GLdouble x, + GLdouble y, GLdouble z); +typedef void(GLAD_API_PTR *PFNGLMATRIXROTATEFEXTPROC)(GLenum mode, GLfloat angle, GLfloat x, + GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLMATRIXSCALEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLMATRIXSCALEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLMATRIXTRANSLATEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLMATRIXTRANSLATEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLMAXSHADERCOMPILERTHREADSARBPROC)(GLuint count); +typedef void(GLAD_API_PTR *PFNGLMAXSHADERCOMPILERTHREADSKHRPROC)(GLuint count); +typedef void(GLAD_API_PTR *PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); +typedef void(GLAD_API_PTR *PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); +typedef void(GLAD_API_PTR *PFNGLMEMORYBARRIEREXTPROC)(GLbitfield barriers); +typedef void(GLAD_API_PTR *PFNGLMEMORYOBJECTPARAMETERIVEXTPROC)(GLuint memoryObject, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLMINSAMPLESHADINGPROC)(GLfloat value); +typedef void(GLAD_API_PTR *PFNGLMINSAMPLESHADINGARBPROC)(GLfloat value); +typedef void(GLAD_API_PTR *PFNGLMINMAXEXTPROC)(GLenum target, GLenum internalformat, + GLboolean sink); +typedef void(GLAD_API_PTR *PFNGLMULTMATRIXXOESPROC)(const GLfixed *m); +typedef void(GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXDARBPROC)(const GLdouble *m); +typedef void(GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXFARBPROC)(const GLfloat *m); +typedef void(GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXXOESPROC)(const GLfixed *m); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, + const GLsizei *count, GLsizei drawcount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSEXTPROC)(GLenum mode, const GLint *first, + const GLsizei *count, GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect, + GLsizei drawcount, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)(GLenum mode, const void *indirect, + GLsizei primcount, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)( + GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, + GLint vertexBufferCount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)(GLenum mode, + const void *indirect, + GLsizei drawCount, + GLsizei stride, + GLint vertexBufferCount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)(GLenum mode, const void *indirect, + GLintptr drawcount, + GLsizei maxdrawcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)(GLenum mode, + const void *indirect, + GLintptr drawcount, + GLsizei maxdrawcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, const GLint *first, + const GLsizei *count, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, + GLenum type, const void *const *indices, + GLsizei drawcount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, + GLenum type, + const void *const *indices, + GLsizei drawcount, + const GLint *basevertex); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSEXTPROC)(GLenum mode, const GLsizei *count, + GLenum type, const void *const *indices, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, + const void *indirect, + GLsizei drawcount, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, GLenum type, + const void *indirect, + GLsizei primcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)( + GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, + GLsizei stride, GLint vertexBufferCount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)(GLenum mode, GLenum type, + const void *indirect, + GLsizei drawCount, + GLsizei stride, + GLint vertexBufferCount); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)(GLenum mode, GLenum type, + const void *indirect, + GLintptr drawcount, + GLsizei maxdrawcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)(GLenum mode, GLenum type, + const void *indirect, + GLintptr drawcount, + GLsizei maxdrawcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC)(GLintptr indirect, + GLintptr drawcount, + GLsizei maxdrawcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC)(GLintptr indirect, + GLsizei drawcount, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, + GLuint end, const GLint *first, + const GLsizei *count, + GLsizei primcount); +typedef void(GLAD_API_PTR *PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum *mode, const GLint *first, + const GLsizei *count, GLsizei primcount, + GLint modestride); +typedef void(GLAD_API_PTR *PFNGLMULTIMODEDRAWELEMENTSIBMPROC)(const GLenum *mode, + const GLsizei *count, GLenum type, + const void *const *indices, + GLsizei primcount, GLint modestride); +typedef void(GLAD_API_PTR *PFNGLMULTITEXBUFFEREXTPROC)(GLenum texunit, GLenum target, + GLenum internalformat, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1BOESPROC)(GLenum texture, GLbyte s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1BVOESPROC)(GLenum texture, const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1DARBPROC)(GLenum target, GLdouble s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1DVARBPROC)(GLenum target, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1IARBPROC)(GLenum target, GLint s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1IVARBPROC)(GLenum target, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1SARBPROC)(GLenum target, GLshort s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1SVARBPROC)(GLenum target, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1XOESPROC)(GLenum texture, GLfixed s); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD1XVOESPROC)(GLenum texture, const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2BOESPROC)(GLenum texture, GLbyte s, GLbyte t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2BVOESPROC)(GLenum texture, const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2DARBPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2DVARBPROC)(GLenum target, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2IARBPROC)(GLenum target, GLint s, GLint t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2IVARBPROC)(GLenum target, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2SARBPROC)(GLenum target, GLshort s, GLshort t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2XOESPROC)(GLenum texture, GLfixed s, GLfixed t); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD2XVOESPROC)(GLenum texture, const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3BOESPROC)(GLenum texture, GLbyte s, GLbyte t, + GLbyte r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3BVOESPROC)(GLenum texture, const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3DARBPROC)(GLenum target, GLdouble s, GLdouble t, + GLdouble r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3DVARBPROC)(GLenum target, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, + GLfloat r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, + GLhalfNV r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3IARBPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3IVARBPROC)(GLenum target, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3SARBPROC)(GLenum target, GLshort s, GLshort t, + GLshort r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3SVARBPROC)(GLenum target, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3XOESPROC)(GLenum texture, GLfixed s, GLfixed t, + GLfixed r); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD3XVOESPROC)(GLenum texture, const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4BOESPROC)(GLenum texture, GLbyte s, GLbyte t, + GLbyte r, GLbyte q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4BVOESPROC)(GLenum texture, const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4DARBPROC)(GLenum target, GLdouble s, GLdouble t, + GLdouble r, GLdouble q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4DVARBPROC)(GLenum target, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4FARBPROC)(GLenum target, GLfloat s, GLfloat t, + GLfloat r, GLfloat q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, + GLhalfNV r, GLhalfNV q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4IARBPROC)(GLenum target, GLint s, GLint t, GLint r, + GLint q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4IVARBPROC)(GLenum target, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4SARBPROC)(GLenum target, GLshort s, GLshort t, + GLshort r, GLshort q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4XOESPROC)(GLenum texture, GLfixed s, GLfixed t, + GLfixed r, GLfixed q); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORD4XVOESPROC)(GLenum texture, const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLMULTITEXCOORDPOINTEREXTPROC)(GLenum texunit, GLint size, + GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLMULTITEXENVFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, + GLfloat param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXENVIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXGENDEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + GLdouble param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + const GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXGENFEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + GLfloat param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXGENIEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, + GLint internalformat, GLsizei width, + GLint border, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, + GLint internalformat, GLsizei width, + GLsizei height, GLint border, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, + GLint internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, + GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXPARAMETERFEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXPARAMETERIEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, + GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLMULTITEXRENDERBUFFEREXTPROC)(GLenum texunit, GLenum target, + GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLint xoffset, + GLsizei width, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, + GLint level, GLint xoffset, + GLint yoffset, GLsizei width, + GLsizei height, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLMULTITEXSUBIMAGE3DEXTPROC)(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); +typedef void(GLAD_API_PTR *PFNGLMULTICASTBARRIERNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLMULTICASTBLITFRAMEBUFFERNVPROC)( + GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void(GLAD_API_PTR *PFNGLMULTICASTBUFFERSUBDATANVPROC)(GLbitfield gpuMask, GLuint buffer, + GLintptr offset, GLsizeiptr size, + const void *data); +typedef void(GLAD_API_PTR *PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC)( + GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, + GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLMULTICASTCOPYIMAGESUBDATANVPROC)( + GLuint srcGpu, GLbitfield dstGpuMask, 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); +typedef void(GLAD_API_PTR *PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)( + GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC)(GLuint gpu, GLuint id, + GLenum pname, GLint64 *params); +typedef void(GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTIVNVPROC)(GLuint gpu, GLuint id, + GLenum pname, GLint *params); +typedef void(GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC)(GLuint gpu, GLuint id, + GLenum pname, GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC)(GLuint gpu, GLuint id, + GLenum pname, GLuint *params); +typedef void(GLAD_API_PTR *PFNGLMULTICASTSCISSORARRAYVNVXPROC)(GLuint gpu, GLuint first, + GLsizei count, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLMULTICASTVIEWPORTARRAYVNVXPROC)(GLuint gpu, GLuint first, + GLsizei count, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC)(GLuint gpu, GLuint index, + GLfloat xcoeff, + GLfloat ycoeff); +typedef void(GLAD_API_PTR *PFNGLMULTICASTWAITSYNCNVPROC)(GLuint signalGpu, GLbitfield waitGpuMask); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERATTACHMEMORYNVPROC)(GLuint buffer, GLuint memory, + GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, + const void *data, GLenum usage); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLsizeiptr size, + const void *data, GLenum usage); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, + GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, + GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, GLuint memory, + GLuint64 memOffset, + GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, + const void *data, GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEEXTPROC)(GLuint buffer, GLsizeiptr size, + const void *data, GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC)( + GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, + GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC)(GLuint buffer, GLsizeiptr size, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, const void *data); +typedef void(GLAD_API_PTR *PFNGLNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, + GLsizeiptr size, const void *data); +typedef void(GLAD_API_PTR *PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)(GLuint readBuffer, + GLuint writeBuffer, + GLintptr readOffset, + GLintptr writeOffset, + GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, + const GLenum *bufs); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)(GLuint framebuffer, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, + GLenum attachment, + GLenum renderbuffertarget, + GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)(GLuint framebuffer, + GLenum attachment, + GLenum renderbuffertarget, + GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, + GLuint start, + GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint framebuffer, + GLuint start, + GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLuint framebuffer, + GLuint numsamples, + GLuint pixelindex, + const GLfloat *values); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, + GLuint texture, GLint level); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)(GLuint framebuffer, + GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)(GLuint framebuffer, + GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)(GLuint framebuffer, + GLenum attachment, + GLenum textarget, GLuint texture, + GLint level, GLint zoffset); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)(GLuint framebuffer, + GLenum attachment, GLuint texture, + GLint level); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)(GLuint framebuffer, + GLenum attachment, + GLuint texture, GLint level, + GLenum face); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, + GLenum attachment, GLuint texture, + GLint level, GLint layer); +typedef void(GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)(GLuint framebuffer, + GLenum attachment, + GLuint texture, GLint level, + GLint layer); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)(GLuint program, GLenum target, + GLuint index, GLdouble x, + GLdouble y, GLdouble z, + GLdouble w); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)(GLuint program, GLenum target, + GLuint index, + const GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)(GLuint program, GLenum target, + GLuint index, GLfloat x, + GLfloat y, GLfloat z, + GLfloat w); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)(GLuint program, GLenum target, + GLuint index, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)(GLuint program, GLenum target, + GLuint index, GLint x, + GLint y, GLint z, GLint w); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)(GLuint program, + GLenum target, GLuint index, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)(GLuint program, + GLenum target, GLuint index, + GLuint x, GLuint y, GLuint z, + GLuint w); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)(GLuint program, + GLenum target, GLuint index, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLuint program, + GLenum target, GLuint index, + GLsizei count, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)(GLuint program, + GLenum target, GLuint index, + GLsizei count, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)( + GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, + GLenum format, GLsizei len, + const void *string); +typedef void(GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, + GLenum internalformat, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)(GLuint renderbuffer, + GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)( + GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC)( + GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)( + GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)( + GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLNAMEDSTRINGARBPROC)(GLenum type, GLint namelen, const GLchar *name, + GLint stringlen, const GLchar *string); +typedef GLuint(GLAD_API_PTR *PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void *pointer, + GLenum usage); +typedef void(GLAD_API_PTR *PFNGLNORMAL3FVERTEX3FSUNPROC)(GLfloat nx, GLfloat ny, GLfloat nz, + GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *n, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void(GLAD_API_PTR *PFNGLNORMAL3HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLNORMAL3XOESPROC)(GLfixed nx, GLfixed ny, GLfixed nz); +typedef void(GLAD_API_PTR *PFNGLNORMAL3XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLNORMALFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLNORMALPOINTERLISTIBMPROC)(GLenum type, GLint stride, + const void **pointer, GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLNORMALPOINTERVINTELPROC)(GLenum type, const void **pointer); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3BATIPROC)(GLenum stream, GLbyte nx, GLbyte ny, + GLbyte nz); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3BVATIPROC)(GLenum stream, const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3DATIPROC)(GLenum stream, GLdouble nx, GLdouble ny, + GLdouble nz); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3DVATIPROC)(GLenum stream, const GLdouble *coords); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3FATIPROC)(GLenum stream, GLfloat nx, GLfloat ny, + GLfloat nz); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3FVATIPROC)(GLenum stream, const GLfloat *coords); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3IATIPROC)(GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3IVATIPROC)(GLenum stream, const GLint *coords); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3SATIPROC)(GLenum stream, GLshort nx, GLshort ny, + GLshort nz); +typedef void(GLAD_API_PTR *PFNGLNORMALSTREAM3SVATIPROC)(GLenum stream, const GLshort *coords); +typedef void(GLAD_API_PTR *PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, + const GLchar *label); +typedef void(GLAD_API_PTR *PFNGLOBJECTPTRLABELPROC)(const void *ptr, GLsizei length, + const GLchar *label); +typedef GLenum(GLAD_API_PTR *PFNGLOBJECTPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, + GLenum option); +typedef GLenum(GLAD_API_PTR *PFNGLOBJECTUNPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, + GLenum option); +typedef void(GLAD_API_PTR *PFNGLORTHOFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, + GLfloat n, GLfloat f); +typedef void(GLAD_API_PTR *PFNGLORTHOXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, + GLfixed n, GLfixed f); +typedef void(GLAD_API_PTR *PFNGLPNTRIANGLESFATIPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPNTRIANGLESIATIPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); +typedef void(GLAD_API_PTR *PFNGLPASSTHROUGHXOESPROC)(GLfixed token); +typedef void(GLAD_API_PTR *PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat *values); +typedef void(GLAD_API_PTR *PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); +typedef void(GLAD_API_PTR *PFNGLPATHCOMMANDSNVPROC)(GLuint path, GLsizei numCommands, + const GLubyte *commands, GLsizei numCoords, + GLenum coordType, const void *coords); +typedef void(GLAD_API_PTR *PFNGLPATHCOORDSNVPROC)(GLuint path, GLsizei numCoords, GLenum coordType, + const void *coords); +typedef void(GLAD_API_PTR *PFNGLPATHCOVERDEPTHFUNCNVPROC)(GLenum func); +typedef void(GLAD_API_PTR *PFNGLPATHDASHARRAYNVPROC)(GLuint path, GLsizei dashCount, + const GLfloat *dashArray); +typedef GLenum(GLAD_API_PTR *PFNGLPATHGLYPHINDEXARRAYNVPROC)( + GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, + GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum(GLAD_API_PTR *PFNGLPATHGLYPHINDEXRANGENVPROC)(GLenum fontTarget, + const void *fontName, + GLbitfield fontStyle, + GLuint pathParameterTemplate, + GLfloat emScale, GLuint *baseAndCount); +typedef void(GLAD_API_PTR *PFNGLPATHGLYPHRANGENVPROC)(GLuint firstPathName, GLenum fontTarget, + const void *fontName, GLbitfield fontStyle, + GLuint firstGlyph, GLsizei numGlyphs, + GLenum handleMissingGlyphs, + GLuint pathParameterTemplate, + GLfloat emScale); +typedef void(GLAD_API_PTR *PFNGLPATHGLYPHSNVPROC)(GLuint firstPathName, GLenum fontTarget, + const void *fontName, GLbitfield fontStyle, + GLsizei numGlyphs, GLenum type, + const void *charcodes, GLenum handleMissingGlyphs, + GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum(GLAD_API_PTR *PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)( + GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, + GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, + GLfloat emScale); +typedef void(GLAD_API_PTR *PFNGLPATHPARAMETERFNVPROC)(GLuint path, GLenum pname, GLfloat value); +typedef void(GLAD_API_PTR *PFNGLPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPATHPARAMETERINVPROC)(GLuint path, GLenum pname, GLint value); +typedef void(GLAD_API_PTR *PFNGLPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, + const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPATHSTENCILDEPTHOFFSETNVPROC)(GLfloat factor, GLfloat units); +typedef void(GLAD_API_PTR *PFNGLPATHSTENCILFUNCNVPROC)(GLenum func, GLint ref, GLuint mask); +typedef void(GLAD_API_PTR *PFNGLPATHSTRINGNVPROC)(GLuint path, GLenum format, GLsizei length, + const void *pathString); +typedef void(GLAD_API_PTR *PFNGLPATHSUBCOMMANDSNVPROC)(GLuint path, GLsizei commandStart, + GLsizei commandsToDelete, + GLsizei numCommands, const GLubyte *commands, + GLsizei numCoords, GLenum coordType, + const void *coords); +typedef void(GLAD_API_PTR *PFNGLPATHSUBCOORDSNVPROC)(GLuint path, GLsizei coordStart, + GLsizei numCoords, GLenum coordType, + const void *coords); +typedef void(GLAD_API_PTR *PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); +typedef void(GLAD_API_PTR *PFNGLPAUSETRANSFORMFEEDBACKNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLPIXELDATARANGENVPROC)(GLenum target, GLsizei length, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLPIXELMAPXPROC)(GLenum map, GLint size, const GLfixed *values); +typedef void(GLAD_API_PTR *PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLPIXELSTOREXPROC)(GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERISGISPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPIXELTEXGENSGIXPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLPIXELTRANSFERXOESPROC)(GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)(GLenum target, GLenum pname, + GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)(GLenum target, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPIXELZOOMXOESPROC)(GLfixed xfactor, GLfixed yfactor); +typedef GLboolean(GLAD_API_PTR *PFNGLPOINTALONGPATHNVPROC)(GLuint path, GLsizei startSegment, + GLsizei numSegments, GLfloat distance, + GLfloat *x, GLfloat *y, + GLfloat *tangentX, GLfloat *tangentY); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERFVSGISPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERIVNVPROC)(GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPOINTPARAMETERXVOESPROC)(GLenum pname, const GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLPOINTSIZEPROC)(GLfloat size); +typedef void(GLAD_API_PTR *PFNGLPOINTSIZEXOESPROC)(GLfixed size); +typedef GLint(GLAD_API_PTR *PFNGLPOLLASYNCSGIXPROC)(GLuint *markerp); +typedef GLint(GLAD_API_PTR *PFNGLPOLLINSTRUMENTSSGIXPROC)(GLint *marker_p); +typedef void(GLAD_API_PTR *PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +typedef void(GLAD_API_PTR *PFNGLPOLYGONOFFSETCLAMPPROC)(GLfloat factor, GLfloat units, + GLfloat clamp); +typedef void(GLAD_API_PTR *PFNGLPOLYGONOFFSETCLAMPEXTPROC)(GLfloat factor, GLfloat units, + GLfloat clamp); +typedef void(GLAD_API_PTR *PFNGLPOLYGONOFFSETEXTPROC)(GLfloat factor, GLfloat bias); +typedef void(GLAD_API_PTR *PFNGLPOLYGONOFFSETXOESPROC)(GLfixed factor, GLfixed units); +typedef void(GLAD_API_PTR *PFNGLPOPDEBUGGROUPPROC)(void); +typedef void(GLAD_API_PTR *PFNGLPOPGROUPMARKEREXTPROC)(void); +typedef void(GLAD_API_PTR *PFNGLPRESENTFRAMEDUALFILLNVPROC)( + 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); +typedef void(GLAD_API_PTR *PFNGLPRESENTFRAMEKEYEDNVPROC)(GLuint video_slot, + GLuint64EXT minPresentTime, + GLuint beginPresentTimeId, + GLuint presentDurationId, GLenum type, + GLenum target0, GLuint fill0, GLuint key0, + GLenum target1, GLuint fill1, GLuint key1); +typedef void(GLAD_API_PTR *PFNGLPRIMITIVEBOUNDINGBOXARBPROC)(GLfloat minX, GLfloat minY, + GLfloat minZ, GLfloat minW, + GLfloat maxX, GLfloat maxY, + GLfloat maxZ, GLfloat maxW); +typedef void(GLAD_API_PTR *PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +typedef void(GLAD_API_PTR *PFNGLPRIMITIVERESTARTINDEXNVPROC)(GLuint index); +typedef void(GLAD_API_PTR *PFNGLPRIMITIVERESTARTNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLPRIORITIZETEXTURESEXTPROC)(GLsizei n, const GLuint *textures, + const GLclampf *priorities); +typedef void(GLAD_API_PTR *PFNGLPRIORITIZETEXTURESXOESPROC)(GLsizei n, const GLuint *textures, + const GLfixed *priorities); +typedef void(GLAD_API_PTR *PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, + const void *binary, GLsizei length); +typedef void(GLAD_API_PTR *PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)(GLenum target, + GLuint bindingIndex, + GLuint wordIndex, GLsizei count, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)(GLenum target, + GLuint bindingIndex, + GLuint wordIndex, GLsizei count, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)(GLenum target, GLuint bindingIndex, + GLuint wordIndex, GLsizei count, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, + GLdouble x, GLdouble y, GLdouble z, + GLdouble w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, + const GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, + GLfloat x, GLfloat y, GLfloat z, + GLfloat w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, + GLint y, GLint z, GLint w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4IVNVPROC)(GLenum target, GLuint index, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4UINVPROC)(GLenum target, GLuint index, + GLuint x, GLuint y, GLuint z, + GLuint w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, + GLsizei count, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, + GLsizei count, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, + GLsizei count, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, + GLdouble x, GLdouble y, GLdouble z, + GLdouble w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, + const GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, + GLfloat x, GLfloat y, GLfloat z, + GLfloat w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4INVPROC)(GLenum target, GLuint index, + GLint x, GLint y, GLint z, GLint w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)(GLenum target, GLuint index, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)(GLenum target, GLuint index, + GLuint x, GLuint y, GLuint z, + GLuint w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, + GLsizei count, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, + GLsizei count, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, + GLsizei count, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)(GLuint id, GLsizei len, + const GLubyte *name, GLdouble x, + GLdouble y, GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)(GLuint id, GLsizei len, + const GLubyte *name, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)(GLuint id, GLsizei len, + const GLubyte *name, GLfloat x, + GLfloat y, GLfloat z, GLfloat w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)(GLuint id, GLsizei len, + const GLubyte *name, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETER4DNVPROC)(GLenum target, GLuint index, GLdouble x, + GLdouble y, GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETER4DVNVPROC)(GLenum target, GLuint index, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETER4FNVPROC)(GLenum target, GLuint index, GLfloat x, + GLfloat y, GLfloat z, GLfloat w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETER4FVNVPROC)(GLenum target, GLuint index, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, + GLint value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETERIEXTPROC)(GLuint program, GLenum pname, + GLint value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETERS4DVNVPROC)(GLenum target, GLuint index, + GLsizei count, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPARAMETERS4FVNVPROC)(GLenum target, GLuint index, + GLsizei count, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)(GLuint program, GLint location, + GLenum genMode, GLint components, + const GLfloat *coeffs); +typedef void(GLAD_API_PTR *PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, + const void *string); +typedef void(GLAD_API_PTR *PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)(GLenum target, GLsizei count, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DEXTPROC)(GLuint program, GLint location, + GLdouble x); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FEXTPROC)(GLuint program, GLint location, + GLfloat v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64ARBPROC)(GLuint program, GLint location, + GLint64 x); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64NVPROC)(GLuint program, GLint location, + GLint64EXT x); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64VNVPROC)(GLuint program, GLint location, + GLsizei count, const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IEXTPROC)(GLuint program, GLint location, GLint v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64ARBPROC)(GLuint program, GLint location, + GLuint64 x); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64NVPROC)(GLuint program, GLint location, + GLuint64EXT x); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64VNVPROC)(GLuint program, GLint location, + GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIEXTPROC)(GLuint program, GLint location, + GLuint v0); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, + GLdouble v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DEXTPROC)(GLuint program, GLint location, GLdouble x, + GLdouble y); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, + GLfloat v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FEXTPROC)(GLuint program, GLint location, GLfloat v0, + GLfloat v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, + GLint v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64ARBPROC)(GLuint program, GLint location, + GLint64 x, GLint64 y); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64NVPROC)(GLuint program, GLint location, + GLint64EXT x, GLint64EXT y); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64VNVPROC)(GLuint program, GLint location, + GLsizei count, const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IEXTPROC)(GLuint program, GLint location, GLint v0, + GLint v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, + GLuint v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64ARBPROC)(GLuint program, GLint location, + GLuint64 x, GLuint64 y); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64NVPROC)(GLuint program, GLint location, + GLuint64EXT x, GLuint64EXT y); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64VNVPROC)(GLuint program, GLint location, + GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIEXTPROC)(GLuint program, GLint location, GLuint v0, + GLuint v1); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, + GLdouble v1, GLdouble v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DEXTPROC)(GLuint program, GLint location, GLdouble x, + GLdouble y, GLdouble z); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, + GLfloat v1, GLfloat v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FEXTPROC)(GLuint program, GLint location, GLfloat v0, + GLfloat v1, GLfloat v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, + GLint v1, GLint v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64ARBPROC)(GLuint program, GLint location, + GLint64 x, GLint64 y, GLint64 z); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64NVPROC)(GLuint program, GLint location, + GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64VNVPROC)(GLuint program, GLint location, + GLsizei count, const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IEXTPROC)(GLuint program, GLint location, GLint v0, + GLint v1, GLint v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, + GLuint v1, GLuint v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64ARBPROC)(GLuint program, GLint location, + GLuint64 x, GLuint64 y, GLuint64 z); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64NVPROC)(GLuint program, GLint location, + GLuint64EXT x, GLuint64EXT y, + GLuint64EXT z); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64VNVPROC)(GLuint program, GLint location, + GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIEXTPROC)(GLuint program, GLint location, GLuint v0, + GLuint v1, GLuint v2); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, + GLdouble v1, GLdouble v2, GLdouble v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DEXTPROC)(GLuint program, GLint location, GLdouble x, + GLdouble y, GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, + GLfloat v1, GLfloat v2, GLfloat v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FEXTPROC)(GLuint program, GLint location, GLfloat v0, + GLfloat v1, GLfloat v2, GLfloat v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, + GLint v1, GLint v2, GLint v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64ARBPROC)(GLuint program, GLint location, + GLint64 x, GLint64 y, GLint64 z, + GLint64 w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64NVPROC)(GLuint program, GLint location, + GLint64EXT x, GLint64EXT y, GLint64EXT z, + GLint64EXT w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64VNVPROC)(GLuint program, GLint location, + GLsizei count, const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IEXTPROC)(GLuint program, GLint location, GLint v0, + GLint v1, GLint v2, GLint v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, + GLuint v1, GLuint v2, GLuint v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64ARBPROC)(GLuint program, GLint location, + GLuint64 x, GLuint64 y, GLuint64 z, + GLuint64 w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64NVPROC)(GLuint program, GLint location, + GLuint64EXT x, GLuint64EXT y, + GLuint64EXT z, GLuint64EXT w); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64VARBPROC)(GLuint program, GLint location, + GLsizei count, const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64VNVPROC)(GLuint program, GLint location, + GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIEXTPROC)(GLuint program, GLint location, GLuint v0, + GLuint v1, GLuint v2, GLuint v3); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIVEXTPROC)(GLuint program, GLint location, + GLsizei count, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)(GLuint program, GLint location, + GLuint64 value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)(GLuint program, GLint location, + GLuint64 value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)(GLuint program, GLint location, + GLsizei count, + const GLuint64 *values); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)(GLuint program, GLint location, + GLsizei count, + const GLuint64 *values); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)(GLuint program, GLint location, + GLsizei count, + GLboolean transpose, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMUI64NVPROC)(GLuint program, GLint location, + GLuint64EXT value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMUNIFORMUI64VNVPROC)(GLuint program, GLint location, + GLsizei count, const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLPROGRAMVERTEXLIMITNVPROC)(GLenum target, GLint limit); +typedef void(GLAD_API_PTR *PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, + const GLchar *message); +typedef void(GLAD_API_PTR *PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar *marker); +typedef void(GLAD_API_PTR *PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +typedef GLbitfield(GLAD_API_PTR *PFNGLQUERYMATRIXXOESPROC)(GLfixed *mantissa, GLint *exponent); +typedef void(GLAD_API_PTR *PFNGLQUERYOBJECTPARAMETERUIAMDPROC)(GLenum target, GLuint id, + GLenum pname, GLuint param); +typedef GLint(GLAD_API_PTR *PFNGLQUERYRESOURCENVPROC)(GLenum queryType, GLint tagId, GLuint count, + GLint *buffer); +typedef void(GLAD_API_PTR *PFNGLQUERYRESOURCETAGNVPROC)(GLint tagId, const GLchar *tagString); +typedef void(GLAD_API_PTR *PFNGLRASTERPOS2XOESPROC)(GLfixed x, GLfixed y); +typedef void(GLAD_API_PTR *PFNGLRASTERPOS2XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLRASTERPOS3XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void(GLAD_API_PTR *PFNGLRASTERPOS3XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLRASTERPOS4XOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void(GLAD_API_PTR *PFNGLRASTERPOS4XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLRASTERSAMPLESEXTPROC)(GLuint samples, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLREADBUFFERPROC)(GLenum src); +typedef void(GLAD_API_PTR *PFNGLREADINSTRUMENTSSGIXPROC)(GLint marker); +typedef void(GLAD_API_PTR *PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, void *pixels); +typedef void(GLAD_API_PTR *PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLsizei bufSize, + void *data); +typedef void(GLAD_API_PTR *PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLsizei bufSize, + void *data); +typedef void(GLAD_API_PTR *PFNGLRECTXOESPROC)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void(GLAD_API_PTR *PFNGLRECTXVOESPROC)(const GLfixed *v1, const GLfixed *v2); +typedef void(GLAD_API_PTR *PFNGLREFERENCEPLANESGIXPROC)(const GLdouble *equation); +typedef GLboolean(GLAD_API_PTR *PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC)(GLuint memory, GLuint64 key); +typedef void(GLAD_API_PTR *PFNGLRELEASESHADERCOMPILERPROC)(void); +typedef void(GLAD_API_PTR *PFNGLRENDERGPUMASKNVPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, + GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC)( + GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)( + GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)( + GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEPOINTERSUNPROC)(GLenum type, GLsizei stride, + const void **pointer); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUBSUNPROC)(GLubyte code); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUBVSUNPROC)(const GLubyte *code); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, + GLfloat g, GLfloat b, + GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)(const GLuint *rc, + const GLfloat *c, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)( + GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, + GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint *rc, + const GLfloat *c, + const GLfloat *n, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)(GLuint rc, GLubyte r, + GLubyte g, GLubyte b, + GLubyte a, GLfloat x, + GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)(const GLuint *rc, + const GLubyte *c, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat nx, + GLfloat ny, GLfloat nz, + GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)(const GLuint *rc, + const GLfloat *n, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUISUNPROC)(GLuint code); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)( + 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); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)( + const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)( + GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)( + const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, + GLfloat t, GLfloat x, + GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)(const GLuint *rc, + const GLfloat *tc, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)(GLuint rc, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)(const GLuint *rc, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUIVSUNPROC)(const GLuint *code); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUSSUNPROC)(GLushort code); +typedef void(GLAD_API_PTR *PFNGLREPLACEMENTCODEUSVSUNPROC)(const GLushort *code); +typedef void(GLAD_API_PTR *PFNGLREQUESTRESIDENTPROGRAMSNVPROC)(GLsizei n, const GLuint *programs); +typedef void(GLAD_API_PTR *PFNGLRESETHISTOGRAMEXTPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLRESETMEMORYOBJECTPARAMETERNVPROC)(GLuint memory, GLenum pname); +typedef void(GLAD_API_PTR *PFNGLRESETMINMAXEXTPROC)(GLenum target); +typedef void(GLAD_API_PTR *PFNGLRESIZEBUFFERSMESAPROC)(void); +typedef void(GLAD_API_PTR *PFNGLRESOLVEDEPTHVALUESNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); +typedef void(GLAD_API_PTR *PFNGLRESUMETRANSFORMFEEDBACKNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLROTATEXOESPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void(GLAD_API_PTR *PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +typedef void(GLAD_API_PTR *PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); +typedef void(GLAD_API_PTR *PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); +typedef void(GLAD_API_PTR *PFNGLSAMPLEMASKEXTPROC)(GLclampf value, GLboolean invert); +typedef void(GLAD_API_PTR *PFNGLSAMPLEMASKINDEXEDNVPROC)(GLuint index, GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLSAMPLEMASKSGISPROC)(GLclampf value, GLboolean invert); +typedef void(GLAD_API_PTR *PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLSAMPLEPATTERNEXTPROC)(GLenum pattern); +typedef void(GLAD_API_PTR *PFNGLSAMPLEPATTERNSGISPROC)(GLenum pattern); +typedef void(GLAD_API_PTR *PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, + const GLint *param); +typedef void(GLAD_API_PTR *PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, + const GLuint *param); +typedef void(GLAD_API_PTR *PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, + const GLfloat *param); +typedef void(GLAD_API_PTR *PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, + const GLint *param); +typedef void(GLAD_API_PTR *PFNGLSCALEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void(GLAD_API_PTR *PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLSCISSOREXCLUSIVEARRAYVNVPROC)(GLuint first, GLsizei count, + const GLint *v); +typedef void(GLAD_API_PTR *PFNGLSCISSOREXCLUSIVENVPROC)(GLint x, GLint y, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3BEXTPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3BVEXTPROC)(const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3DEXTPROC)(GLdouble red, GLdouble green, + GLdouble blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3DVEXTPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, + GLhalfNV blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3IEXTPROC)(GLint red, GLint green, GLint blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3IVEXTPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3SEXTPROC)(GLshort red, GLshort green, GLshort blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3SVEXTPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3UIEXTPROC)(GLuint red, GLuint green, GLuint blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3UIVEXTPROC)(const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3USEXTPROC)(GLushort red, GLushort green, + GLushort blue); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLOR3USVEXTPROC)(const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLORFORMATNVPROC)(GLint size, GLenum type, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type, + GLsizei stride, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, + GLint stride, + const void **pointer, + GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)(GLuint monitor, GLboolean enable, + GLuint group, GLint numCounters, + GLuint *counterList); +typedef void(GLAD_API_PTR *PFNGLSEMAPHOREPARAMETERIVNVPROC)(GLuint semaphore, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLSEMAPHOREPARAMETERUI64VEXTPROC)(GLuint semaphore, GLenum pname, + const GLuint64 *params); +typedef void(GLAD_API_PTR *PFNGLSEPARABLEFILTER2DEXTPROC)(GLenum target, GLenum internalformat, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const void *row, const void *column); +typedef void(GLAD_API_PTR *PFNGLSETFENCEAPPLEPROC)(GLuint fence); +typedef void(GLAD_API_PTR *PFNGLSETFENCENVPROC)(GLuint fence, GLenum condition); +typedef void(GLAD_API_PTR *PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void *addr); +typedef void(GLAD_API_PTR *PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void *addr); +typedef void(GLAD_API_PTR *PFNGLSETMULTISAMPLEFVAMDPROC)(GLenum pname, GLuint index, + const GLfloat *val); +typedef void(GLAD_API_PTR *PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint *shaders, + GLenum binaryFormat, const void *binary, + GLsizei length); +typedef void(GLAD_API_PTR *PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); +typedef void(GLAD_API_PTR *PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void(GLAD_API_PTR *PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, + GLuint arg3); +typedef void(GLAD_API_PTR *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, + const GLchar *const *string, const GLint *length); +typedef void(GLAD_API_PTR *PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, + const GLcharARB **string, const GLint *length); +typedef void(GLAD_API_PTR *PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, + GLuint storageBlockIndex, + GLuint storageBlockBinding); +typedef void(GLAD_API_PTR *PFNGLSHADINGRATEIMAGEBARRIERNVPROC)(GLboolean synchronize); +typedef void(GLAD_API_PTR *PFNGLSHADINGRATEIMAGEPALETTENVPROC)(GLuint viewport, GLuint first, + GLsizei count, const GLenum *rates); +typedef void(GLAD_API_PTR *PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC)(GLenum rate, GLuint samples, + const GLint *locations); +typedef void(GLAD_API_PTR *PFNGLSHADINGRATESAMPLEORDERNVPROC)(GLenum order); +typedef void(GLAD_API_PTR *PFNGLSHARPENTEXFUNCSGISPROC)(GLenum target, GLsizei n, + const GLfloat *points); +typedef void(GLAD_API_PTR *PFNGLSIGNALSEMAPHOREEXTPROC)(GLuint semaphore, GLuint numBufferBarriers, + const GLuint *buffers, + GLuint numTextureBarriers, + const GLuint *textures, + const GLenum *dstLayouts); +typedef void(GLAD_API_PTR *PFNGLSIGNALSEMAPHOREUI64NVXPROC)(GLuint signalGpu, + GLsizei fenceObjectCount, + const GLuint *semaphoreArray, + const GLuint64 *fenceValueArray); +typedef void(GLAD_API_PTR *PFNGLSIGNALVKFENCENVPROC)(GLuint64 vkFence); +typedef void(GLAD_API_PTR *PFNGLSIGNALVKSEMAPHORENVPROC)(GLuint64 vkSemaphore); +typedef void(GLAD_API_PTR *PFNGLSPECIALIZESHADERPROC)(GLuint shader, const GLchar *pEntryPoint, + GLuint numSpecializationConstants, + const GLuint *pConstantIndex, + const GLuint *pConstantValue); +typedef void(GLAD_API_PTR *PFNGLSPECIALIZESHADERARBPROC)(GLuint shader, const GLchar *pEntryPoint, + GLuint numSpecializationConstants, + const GLuint *pConstantIndex, + const GLuint *pConstantValue); +typedef void(GLAD_API_PTR *PFNGLSPRITEPARAMETERFSGIXPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLSPRITEPARAMETERFVSGIXPROC)(GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLSPRITEPARAMETERISGIXPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLSPRITEPARAMETERIVSGIXPROC)(GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLSTARTINSTRUMENTSSGIXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLSTATECAPTURENVPROC)(GLuint state, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLSTENCILCLEARTAGEXTPROC)(GLsizei stencilTagBits, + GLuint stencilClearTag); +typedef void(GLAD_API_PTR *PFNGLSTENCILFILLPATHINSTANCEDNVPROC)( + GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, + GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLSTENCILFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, + GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, + GLint ref, GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILMASKPROC)(GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +typedef void(GLAD_API_PTR *PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, + GLenum dppass); +typedef void(GLAD_API_PTR *PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, + GLenum dppass); +typedef void(GLAD_API_PTR *PFNGLSTENCILOPVALUEAMDPROC)(GLenum face, GLuint value); +typedef void(GLAD_API_PTR *PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)( + GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, + GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLSTENCILSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask); +typedef void(GLAD_API_PTR *PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)( + GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, + GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLSTENCILTHENCOVERFILLPATHNVPROC)(GLuint path, GLenum fillMode, + GLuint mask, GLenum coverMode); +typedef void(GLAD_API_PTR *PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)( + GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, + GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)(GLuint path, GLint reference, + GLuint mask, GLenum coverMode); +typedef void(GLAD_API_PTR *PFNGLSTOPINSTRUMENTSSGIXPROC)(GLint marker); +typedef void(GLAD_API_PTR *PFNGLSTRINGMARKERGREMEDYPROC)(GLsizei len, const void *string); +typedef void(GLAD_API_PTR *PFNGLSUBPIXELPRECISIONBIASNVPROC)(GLuint xbits, GLuint ybits); +typedef void(GLAD_API_PTR *PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, + GLenum outZ, GLenum outW); +typedef void(GLAD_API_PTR *PFNGLSYNCTEXTUREINTELPROC)(GLuint texture); +typedef void(GLAD_API_PTR *PFNGLTAGSAMPLEBUFFERSGIXPROC)(void); +typedef void(GLAD_API_PTR *PFNGLTANGENT3BEXTPROC)(GLbyte tx, GLbyte ty, GLbyte tz); +typedef void(GLAD_API_PTR *PFNGLTANGENT3BVEXTPROC)(const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLTANGENT3DEXTPROC)(GLdouble tx, GLdouble ty, GLdouble tz); +typedef void(GLAD_API_PTR *PFNGLTANGENT3DVEXTPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLTANGENT3FEXTPROC)(GLfloat tx, GLfloat ty, GLfloat tz); +typedef void(GLAD_API_PTR *PFNGLTANGENT3FVEXTPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTANGENT3IEXTPROC)(GLint tx, GLint ty, GLint tz); +typedef void(GLAD_API_PTR *PFNGLTANGENT3IVEXTPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLTANGENT3SEXTPROC)(GLshort tx, GLshort ty, GLshort tz); +typedef void(GLAD_API_PTR *PFNGLTANGENT3SVEXTPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLTANGENTPOINTEREXTPROC)(GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLTBUFFERMASK3DFXPROC)(GLuint mask); +typedef void(GLAD_API_PTR *PFNGLTESSELLATIONFACTORAMDPROC)(GLfloat factor); +typedef void(GLAD_API_PTR *PFNGLTESSELLATIONMODEAMDPROC)(GLenum mode); +typedef GLboolean(GLAD_API_PTR *PFNGLTESTFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean(GLAD_API_PTR *PFNGLTESTFENCENVPROC)(GLuint fence); +typedef GLboolean(GLAD_API_PTR *PFNGLTESTOBJECTAPPLEPROC)(GLenum object, GLuint name); +typedef void(GLAD_API_PTR *PFNGLTEXATTACHMEMORYNVPROC)(GLenum target, GLuint memory, + GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLTEXBUFFERARBPROC)(GLenum target, GLenum internalformat, + GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLTEXBUFFEREXTPROC)(GLenum target, GLenum internalformat, + GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, + GLuint buffer, GLintptr offset, + GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLTEXBUMPPARAMETERFVATIPROC)(GLenum pname, const GLfloat *param); +typedef void(GLAD_API_PTR *PFNGLTEXBUMPPARAMETERIVATIPROC)(GLenum pname, const GLint *param); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD1BOESPROC)(GLbyte s); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD1BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD1HNVPROC)(GLhalfNV s); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD1HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD1XOESPROC)(GLfixed s); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD1XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2BOESPROC)(GLbyte s, GLbyte t); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, + GLfloat g, GLfloat b, GLfloat x, + GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)(const GLfloat *tc, + const GLfloat *c, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)( + GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, + GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *tc, + const GLfloat *c, + const GLfloat *n, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLubyte r, + GLubyte g, GLubyte b, GLubyte a, + GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)(const GLfloat *tc, + const GLubyte *c, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat nx, + GLfloat ny, GLfloat nz, + GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *tc, + const GLfloat *n, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat x, + GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2FVERTEX3FVSUNPROC)(const GLfloat *tc, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2XOESPROC)(GLfixed s, GLfixed t); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD2XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD3BOESPROC)(GLbyte s, GLbyte t, GLbyte r); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD3BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD3HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD3XOESPROC)(GLfixed s, GLfixed t, GLfixed r); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD3XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4BOESPROC)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)( + 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); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)(const GLfloat *tc, + const GLfloat *c, + const GLfloat *n, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, + GLfloat q, GLfloat x, GLfloat y, + GLfloat z, GLfloat w); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4FVERTEX4FVSUNPROC)(const GLfloat *tc, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4XOESPROC)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void(GLAD_API_PTR *PFNGLTEXCOORD4XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLTEXCOORDFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, + GLsizei count, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLTEXCOORDPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, + const void **pointer, GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLTEXCOORDPOINTERVINTELPROC)(GLint size, GLenum type, + const void **pointer); +typedef void(GLAD_API_PTR *PFNGLTEXENVXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLTEXENVXVOESPROC)(GLenum target, GLenum pname, + const GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLsizei n, + const GLfloat *weights); +typedef void(GLAD_API_PTR *PFNGLTEXGENXOESPROC)(GLenum coord, GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLTEXGENXVOESPROC)(GLenum coord, GLenum pname, const GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, + GLsizei width, GLint border, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, + GLenum format, GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, + GLenum internalformat, GLsizei width, + GLsizei height, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)( + GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, + GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLsizei depth, + GLint border, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, + GLenum format, GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)( + GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, + GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void(GLAD_API_PTR *PFNGLTEXIMAGE4DSGISPROC)(GLenum target, GLint level, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLsizei size4d, + GLint border, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXPAGECOMMITMENTARBPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, + GLsizei depth, GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLTEXPAGECOMMITMENTMEMNVPROC)(GLenum target, GLint layer, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLuint memory, GLuint64 offset, + GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void(GLAD_API_PTR *PFNGLTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, + const GLfixed *params); +typedef void(GLAD_API_PTR *PFNGLTEXRENDERBUFFERNVPROC)(GLenum target, GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, + GLenum internalformat, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE1DEXTPROC)(GLenum target, GLsizei levels, + GLenum internalformat, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, + GLenum internalformat, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE2DEXTPROC)(GLenum target, GLsizei levels, + GLenum internalformat, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, + GLenum internalformat, GLsizei width, + GLsizei height, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE3DEXTPROC)(GLenum target, GLsizei levels, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGEMEM1DEXTPROC)(GLenum target, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGEMEM2DEXTPROC)(GLenum target, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLsizei height, GLuint memory, + GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, + GLenum internalFormat, + GLsizei width, GLsizei height, + GLboolean fixedSampleLocations, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGEMEM3DEXTPROC)(GLenum target, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC)( + GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, + GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXSTORAGESPARSEAMDPROC)(GLenum target, GLenum internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLsizei layers, + GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, + GLsizei width, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, + GLsizei width, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, + GLenum format, GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, + GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXSUBIMAGE4DSGISPROC)(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); +typedef void(GLAD_API_PTR *PFNGLTEXTUREATTACHMEMORYNVPROC)(GLuint texture, GLuint memory, + GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXTUREBARRIERPROC)(void); +typedef void(GLAD_API_PTR *PFNGLTEXTUREBARRIERNVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, + GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLTEXTUREBUFFEREXTPROC)(GLuint texture, GLenum target, + GLenum internalformat, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, + GLuint buffer, GLintptr offset, + GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLTEXTUREBUFFERRANGEEXTPROC)(GLuint texture, GLenum target, + GLenum internalformat, GLuint buffer, + GLintptr offset, GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLTEXTURECOLORMASKSGISPROC)(GLboolean red, GLboolean green, + GLboolean blue, GLboolean alpha); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, + GLint internalformat, GLsizei width, + GLint border, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, + GLint internalformat, GLsizei width, + GLsizei height, GLint border, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)( + GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, + GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)(GLuint texture, GLenum target, + GLsizei samples, + GLint internalFormat, + GLsizei width, GLsizei height, + GLboolean fixedSampleLocations); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, + GLint internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, + GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)( + GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, + GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, + GLboolean fixedSampleLocations); +typedef void(GLAD_API_PTR *PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)( + GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, + GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void(GLAD_API_PTR *PFNGLTEXTURELIGHTEXTPROC)(GLenum pname); +typedef void(GLAD_API_PTR *PFNGLTEXTUREMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void(GLAD_API_PTR *PFNGLTEXTURENORMALEXTPROC)(GLenum mode); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPAGECOMMITMENTEXTPROC)(GLuint texture, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC)(GLuint texture, GLint layer, + GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, + GLsizei depth, GLuint memory, + GLuint64 offset, GLboolean commit); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, + const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, const GLuint *params); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERFEXTPROC)(GLuint texture, GLenum target, + GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, + const GLfloat *param); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIEXTPROC)(GLuint texture, GLenum target, + GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, + const GLint *param); +typedef void(GLAD_API_PTR *PFNGLTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, + GLenum pname, const GLint *params); +typedef void(GLAD_API_PTR *PFNGLTEXTURERANGEAPPLEPROC)(GLenum target, GLsizei length, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLTEXTURERENDERBUFFEREXTPROC)(GLuint texture, GLenum target, + GLuint renderbuffer); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, + GLenum internalformat, GLsizei width); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE1DEXTPROC)(GLuint texture, GLenum target, + GLsizei levels, GLenum internalformat, + GLsizei width); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, + GLenum internalformat, GLsizei width, + GLsizei height); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE2DEXTPROC)(GLuint texture, GLenum target, + GLsizei levels, GLenum internalformat, + GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, + GLenum internalformat, + GLsizei width, GLsizei height, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, GLsizei height, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, + GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE3DEXTPROC)(GLuint texture, GLenum target, + GLsizei levels, GLenum internalformat, + GLsizei width, GLsizei height, + GLsizei depth); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, + GLenum internalformat, + GLsizei width, GLsizei height, + GLsizei depth, + GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)( + GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, + GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM1DEXTPROC)(GLuint texture, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM2DEXTPROC)(GLuint texture, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLsizei height, GLuint memory, + GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC)( + GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, + GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM3DEXTPROC)(GLuint texture, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, + GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC)( + GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, + GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void(GLAD_API_PTR *PFNGLTEXTURESTORAGESPARSEAMDPROC)(GLuint texture, GLenum target, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, + GLsizei layers, GLbitfield flags); +typedef void(GLAD_API_PTR *PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, + GLsizei width, GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLint xoffset, GLsizei width, + GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, + GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, + GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, + GLenum type, const void *pixels); +typedef void(GLAD_API_PTR *PFNGLTEXTURESUBIMAGE3DEXTPROC)(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); +typedef void(GLAD_API_PTR *PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, + GLenum internalformat, GLuint minlevel, + GLuint numlevels, GLuint minlayer, + GLuint numlayers); +typedef void(GLAD_API_PTR *PFNGLTRACKMATRIXNVPROC)(GLenum target, GLuint address, GLenum matrix, + GLenum transform); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)(GLsizei count, const GLint *attribs, + GLenum bufferMode); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, + GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, + GLuint buffer, GLintptr offset, + GLsizeiptr size); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)(GLsizei count, + const GLint *attribs, + GLsizei nbuffers, + const GLint *bufstreams, + GLenum bufferMode); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, + const GLchar *const *varyings, + GLenum bufferMode); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)(GLuint program, GLsizei count, + const GLchar *const *varyings, + GLenum bufferMode); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)(GLuint program, GLsizei count, + const GLint *locations, + GLenum bufferMode); +typedef void(GLAD_API_PTR *PFNGLTRANSFORMPATHNVPROC)(GLuint resultPath, GLuint srcPath, + GLenum transformType, + const GLfloat *transformValues); +typedef void(GLAD_API_PTR *PFNGLTRANSLATEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1I64ARBPROC)(GLint location, GLint64 x); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1I64NVPROC)(GLint location, GLint64EXT x); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1I64VARBPROC)(GLint location, GLsizei count, + const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1I64VNVPROC)(GLint location, GLsizei count, + const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, + const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UI64ARBPROC)(GLint location, GLuint64 x); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UI64NVPROC)(GLint location, GLuint64EXT x); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UI64VARBPROC)(GLint location, GLsizei count, + const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UI64VNVPROC)(GLint location, GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UIEXTPROC)(GLint location, GLuint v0); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2I64ARBPROC)(GLint location, GLint64 x, GLint64 y); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2I64VARBPROC)(GLint location, GLsizei count, + const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2I64VNVPROC)(GLint location, GLsizei count, + const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, + const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UI64VARBPROC)(GLint location, GLsizei count, + const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UI64VNVPROC)(GLint location, GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, + GLfloat v2); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3I64ARBPROC)(GLint location, GLint64 x, GLint64 y, + GLint64 z); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, + GLint64EXT z); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3I64VARBPROC)(GLint location, GLsizei count, + const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3I64VNVPROC)(GLint location, GLsizei count, + const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, + const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, + GLuint64 z); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, + GLuint64EXT z); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UI64VARBPROC)(GLint location, GLsizei count, + const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UI64VNVPROC)(GLint location, GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, + GLdouble w); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, + const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, + GLfloat v3); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4FARBPROC)(GLint location, GLfloat v0, GLfloat v1, + GLfloat v2, GLfloat v3); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, + const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, + GLint v3); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z, + GLint64 w); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, + GLint64EXT z, GLint64EXT w); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4I64VARBPROC)(GLint location, GLsizei count, + const GLint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4I64VNVPROC)(GLint location, GLsizei count, + const GLint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, + GLint v3); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, + const GLint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, + GLuint v3); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, + GLuint64 z, GLuint64 w); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, + GLuint64EXT z, GLuint64EXT w); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UI64VARBPROC)(GLint location, GLsizei count, + const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UI64VNVPROC)(GLint location, GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, + GLuint v3); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, + const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, + GLuint uniformBlockBinding); +typedef void(GLAD_API_PTR *PFNGLUNIFORMBUFFEREXTPROC)(GLuint program, GLint location, + GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64ARBPROC)(GLint location, GLuint64 value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64NVPROC)(GLint location, GLuint64 value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64VARBPROC)(GLint location, GLsizei count, + const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64VNVPROC)(GLint location, GLsizei count, + const GLuint64 *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLdouble *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, + GLboolean transpose, const GLfloat *value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, + const GLuint *indices); +typedef void(GLAD_API_PTR *PFNGLUNIFORMUI64NVPROC)(GLint location, GLuint64EXT value); +typedef void(GLAD_API_PTR *PFNGLUNIFORMUI64VNVPROC)(GLint location, GLsizei count, + const GLuint64EXT *value); +typedef void(GLAD_API_PTR *PFNGLUNLOCKARRAYSEXTPROC)(void); +typedef GLboolean(GLAD_API_PTR *PFNGLUNMAPBUFFERPROC)(GLenum target); +typedef GLboolean(GLAD_API_PTR *PFNGLUNMAPBUFFERARBPROC)(GLenum target); +typedef GLboolean(GLAD_API_PTR *PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer); +typedef GLboolean(GLAD_API_PTR *PFNGLUNMAPNAMEDBUFFEREXTPROC)(GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLUNMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLUNMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level); +typedef void(GLAD_API_PTR *PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, + GLsizei size, const void *pointer, + GLenum preserve); +typedef void(GLAD_API_PTR *PFNGLUPLOADGPUMASKNVXPROC)(GLbitfield mask); +typedef void(GLAD_API_PTR *PFNGLUSEPROGRAMPROC)(GLuint program); +typedef void(GLAD_API_PTR *PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj); +typedef void(GLAD_API_PTR *PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, + GLuint program); +typedef void(GLAD_API_PTR *PFNGLUSESHADERPROGRAMEXTPROC)(GLenum type, GLuint program); +typedef void(GLAD_API_PTR *PFNGLVDPAUFININVPROC)(void); +typedef void(GLAD_API_PTR *PFNGLVDPAUGETSURFACEIVNVPROC)(GLvdpauSurfaceNV surface, GLenum pname, + GLsizei count, GLsizei *length, + GLint *values); +typedef void(GLAD_API_PTR *PFNGLVDPAUINITNVPROC)(const void *vdpDevice, const void *getProcAddress); +typedef GLboolean(GLAD_API_PTR *PFNGLVDPAUISSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void(GLAD_API_PTR *PFNGLVDPAUMAPSURFACESNVPROC)(GLsizei numSurfaces, + const GLvdpauSurfaceNV *surfaces); +typedef GLvdpauSurfaceNV(GLAD_API_PTR *PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)( + const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV(GLAD_API_PTR *PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)( + const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV(GLAD_API_PTR *PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC)( + const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, + GLboolean isFrameStructure); +typedef void(GLAD_API_PTR *PFNGLVDPAUSURFACEACCESSNVPROC)(GLvdpauSurfaceNV surface, GLenum access); +typedef void(GLAD_API_PTR *PFNGLVDPAUUNMAPSURFACESNVPROC)(GLsizei numSurface, + const GLvdpauSurfaceNV *surfaces); +typedef void(GLAD_API_PTR *PFNGLVDPAUUNREGISTERSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void(GLAD_API_PTR *PFNGLVALIDATEPROGRAMPROC)(GLuint program); +typedef void(GLAD_API_PTR *PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj); +typedef void(GLAD_API_PTR *PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void(GLAD_API_PTR *PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, + GLuint buffer, GLuint offset); +typedef void(GLAD_API_PTR *PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, + const void *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint *addr); +typedef void(GLAD_API_PTR *PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort *addr); +typedef void(GLAD_API_PTR *PFNGLVERTEX2BOESPROC)(GLbyte x, GLbyte y); +typedef void(GLAD_API_PTR *PFNGLVERTEX2BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y); +typedef void(GLAD_API_PTR *PFNGLVERTEX2HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEX2XOESPROC)(GLfixed x); +typedef void(GLAD_API_PTR *PFNGLVERTEX2XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEX3BOESPROC)(GLbyte x, GLbyte y, GLbyte z); +typedef void(GLAD_API_PTR *PFNGLVERTEX3BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void(GLAD_API_PTR *PFNGLVERTEX3HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEX3XOESPROC)(GLfixed x, GLfixed y); +typedef void(GLAD_API_PTR *PFNGLVERTEX3XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEX4BOESPROC)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); +typedef void(GLAD_API_PTR *PFNGLVERTEX4BVOESPROC)(const GLbyte *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void(GLAD_API_PTR *PFNGLVERTEX4HVNVPROC)(const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEX4XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void(GLAD_API_PTR *PFNGLVERTEX4XVOESPROC)(const GLfixed *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, + GLuint bindingindex); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, + GLint size, GLenum type, + GLboolean normalized, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, + GLint size, GLenum type, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, + GLint size, GLenum type, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)(GLuint vaobj, + GLuint bindingindex, + GLuint buffer, GLintptr offset, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, + GLuint divisor); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLint size, GLenum type, + GLsizei stride, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLsizei stride, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLenum type, GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLenum type, GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLenum texunit, GLint size, + GLenum type, GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLenum type, GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYRANGENVPROC)(GLsizei length, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLint size, GLenum type, + GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLint size, GLenum type, + GLsizei stride, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)(GLuint vaobj, + GLuint attribindex, + GLuint bindingindex); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)(GLuint vaobj, GLuint index, + GLuint divisor); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)(GLuint vaobj, + GLuint attribindex, + GLint size, GLenum type, + GLboolean normalized, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)(GLuint vaobj, + GLuint attribindex, + GLint size, GLenum type, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLuint index, GLint size, + GLenum type, GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)(GLuint vaobj, + GLuint attribindex, + GLint size, GLenum type, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLuint index, GLint size, + GLenum type, GLsizei stride, + GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)( + GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, + GLsizei stride, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)(GLuint vaobj, + GLuint bindingindex, + GLuint divisor); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, + GLuint buffer, GLintptr offset, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, + GLsizei count, const GLuint *buffers, + const GLintptr *offsets, + const GLsizei *strides); +typedef void(GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, + GLint size, GLenum type, + GLsizei stride, GLintptr offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1DNVPROC)(GLuint index, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1DVNVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1FNVPROC)(GLuint index, GLfloat x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1FVNVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1SNVPROC)(GLuint index, GLshort x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB1SVNVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2DNVPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2DVNVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2FNVPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2FVNVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2SNVPROC)(GLuint index, GLshort x, GLshort y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB2SVNVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3DNVPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3DVNVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3FNVPROC)(GLuint index, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3FVNVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, + GLhalfNV z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, + GLshort z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3SNVPROC)(GLuint index, GLshort x, GLshort y, + GLshort z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB3SVNVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, + GLubyte w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, + GLubyte z, GLubyte w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4DNVPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4DVNVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, + GLfloat w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, + GLfloat z, GLfloat w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, + GLfloat w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4FVNVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, + GLhalfNV z, GLhalfNV w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, + GLshort w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, + GLshort z, GLshort w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z, + GLshort w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4SVNVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4UBNVPROC)(GLuint index, GLubyte x, GLubyte y, + GLubyte z, GLubyte w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVNVPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)(GLuint index, GLint size, + GLenum type, GLboolean normalized, + GLsizei stride, GLuint buffer, + GLuint offset); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBDIVISORARBPROC)(GLuint index, GLuint divisor); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, + GLboolean normalized, + GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBFORMATNVPROC)(GLuint index, GLint size, GLenum type, + GLboolean normalized, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, + GLuint z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, + GLint w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, + GLint w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, + GLuint w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, + GLuint w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, + GLenum type, GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBIFORMATNVPROC)(GLuint index, GLint size, GLenum type, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, + GLsizei stride, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, + GLsizei stride, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1DEXTPROC)(GLuint index, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1DVEXTPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1I64NVPROC)(GLuint index, GLint64EXT x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1I64VNVPROC)(GLuint index, const GLint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64ARBPROC)(GLuint index, GLuint64EXT x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64NVPROC)(GLuint index, GLuint64EXT x); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64VARBPROC)(GLuint index, const GLuint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64VNVPROC)(GLuint index, const GLuint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2DEXTPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2DVEXTPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2I64VNVPROC)(GLuint index, const GLint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2UI64NVPROC)(GLuint index, GLuint64EXT x, + GLuint64EXT y); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL2UI64VNVPROC)(GLuint index, const GLuint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3DEXTPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3DVEXTPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, + GLint64EXT z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3I64VNVPROC)(GLuint index, const GLint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3UI64NVPROC)(GLuint index, GLuint64EXT x, + GLuint64EXT y, GLuint64EXT z); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL3UI64VNVPROC)(GLuint index, const GLuint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4DEXTPROC)(GLuint index, GLdouble x, GLdouble y, + GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4DVEXTPROC)(GLuint index, const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, + GLint64EXT z, GLint64EXT w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4I64VNVPROC)(GLuint index, const GLint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4UI64NVPROC)(GLuint index, GLuint64EXT x, + GLuint64EXT y, GLuint64EXT z, + GLuint64EXT w); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBL4UI64VNVPROC)(GLuint index, const GLuint64EXT *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, + GLenum type, GLuint relativeoffset); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBLFORMATNVPROC)(GLuint index, GLint size, GLenum type, + GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, + GLsizei stride, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBLPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, + GLsizei stride, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, + GLboolean normalized, GLuint value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, + GLboolean normalized, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, + GLboolean normalized, GLuint value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, + GLboolean normalized, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, + GLboolean normalized, GLuint value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, + GLboolean normalized, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, + GLboolean normalized, GLuint value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, + GLboolean normalized, const GLuint *value); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBPARAMETERIAMDPROC)(GLuint index, GLenum pname, + GLint param); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, + GLboolean normalized, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, + GLboolean normalized, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERNVPROC)(GLuint index, GLint fsize, GLenum type, + GLsizei stride, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS1DVNVPROC)(GLuint index, GLsizei count, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS1FVNVPROC)(GLuint index, GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS1SVNVPROC)(GLuint index, GLsizei count, + const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS2DVNVPROC)(GLuint index, GLsizei count, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS2FVNVPROC)(GLuint index, GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS2SVNVPROC)(GLuint index, GLsizei count, + const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS3DVNVPROC)(GLuint index, GLsizei count, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS3FVNVPROC)(GLuint index, GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS3SVNVPROC)(GLuint index, GLsizei count, + const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS4DVNVPROC)(GLuint index, GLsizei count, + const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS4FVNVPROC)(GLuint index, GLsizei count, + const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS4SVNVPROC)(GLuint index, GLsizei count, + const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXATTRIBS4UBVNVPROC)(GLuint index, GLsizei count, + const GLubyte *v); +typedef void(GLAD_API_PTR *PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +typedef void(GLAD_API_PTR *PFNGLVERTEXBLENDARBPROC)(GLint count); +typedef void(GLAD_API_PTR *PFNGLVERTEXBLENDENVFATIPROC)(GLenum pname, GLfloat param); +typedef void(GLAD_API_PTR *PFNGLVERTEXBLENDENVIATIPROC)(GLenum pname, GLint param); +typedef void(GLAD_API_PTR *PFNGLVERTEXFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void(GLAD_API_PTR *PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, + GLsizei count, const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, + const void **pointer, GLint ptrstride); +typedef void(GLAD_API_PTR *PFNGLVERTEXPOINTERVINTELPROC)(GLint size, GLenum type, + const void **pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1DATIPROC)(GLenum stream, GLdouble x); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1DVATIPROC)(GLenum stream, const GLdouble *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1FATIPROC)(GLenum stream, GLfloat x); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1FVATIPROC)(GLenum stream, const GLfloat *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1IATIPROC)(GLenum stream, GLint x); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1IVATIPROC)(GLenum stream, const GLint *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1SATIPROC)(GLenum stream, GLshort x); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM1SVATIPROC)(GLenum stream, const GLshort *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2DATIPROC)(GLenum stream, GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2DVATIPROC)(GLenum stream, const GLdouble *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2FATIPROC)(GLenum stream, GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2FVATIPROC)(GLenum stream, const GLfloat *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2IATIPROC)(GLenum stream, GLint x, GLint y); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2IVATIPROC)(GLenum stream, const GLint *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2SATIPROC)(GLenum stream, GLshort x, GLshort y); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM2SVATIPROC)(GLenum stream, const GLshort *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, + GLdouble z); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3DVATIPROC)(GLenum stream, const GLdouble *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, + GLfloat z); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3FVATIPROC)(GLenum stream, const GLfloat *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3IVATIPROC)(GLenum stream, const GLint *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, + GLshort z); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM3SVATIPROC)(GLenum stream, const GLshort *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4DATIPROC)(GLenum stream, GLdouble x, GLdouble y, + GLdouble z, GLdouble w); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4DVATIPROC)(GLenum stream, const GLdouble *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4FATIPROC)(GLenum stream, GLfloat x, GLfloat y, + GLfloat z, GLfloat w); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4FVATIPROC)(GLenum stream, const GLfloat *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4IATIPROC)(GLenum stream, GLint x, GLint y, GLint z, + GLint w); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4IVATIPROC)(GLenum stream, const GLint *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4SATIPROC)(GLenum stream, GLshort x, GLshort y, + GLshort z, GLshort w); +typedef void(GLAD_API_PTR *PFNGLVERTEXSTREAM4SVATIPROC)(GLenum stream, const GLshort *coords); +typedef void(GLAD_API_PTR *PFNGLVERTEXWEIGHTPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLVERTEXWEIGHTFEXTPROC)(GLfloat weight); +typedef void(GLAD_API_PTR *PFNGLVERTEXWEIGHTFVEXTPROC)(const GLfloat *weight); +typedef void(GLAD_API_PTR *PFNGLVERTEXWEIGHTHNVPROC)(GLhalfNV weight); +typedef void(GLAD_API_PTR *PFNGLVERTEXWEIGHTHVNVPROC)(const GLhalfNV *weight); +typedef GLenum(GLAD_API_PTR *PFNGLVIDEOCAPTURENVPROC)(GLuint video_capture_slot, + GLuint *sequence_num, + GLuint64EXT *capture_time); +typedef void(GLAD_API_PTR *PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)(GLuint video_capture_slot, + GLuint stream, GLenum pname, + const GLdouble *params); +typedef void(GLAD_API_PTR *PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)(GLuint video_capture_slot, + GLuint stream, GLenum pname, + const GLfloat *params); +typedef void(GLAD_API_PTR *PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)(GLuint video_capture_slot, + GLuint stream, GLenum pname, + const GLint *params); +typedef void(GLAD_API_PTR *PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void(GLAD_API_PTR *PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, + GLfloat h); +typedef void(GLAD_API_PTR *PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLVIEWPORTPOSITIONWSCALENVPROC)(GLuint index, GLfloat xcoeff, + GLfloat ycoeff); +typedef void(GLAD_API_PTR *PFNGLVIEWPORTSWIZZLENVPROC)(GLuint index, GLenum swizzlex, + GLenum swizzley, GLenum swizzlez, + GLenum swizzlew); +typedef void(GLAD_API_PTR *PFNGLWAITSEMAPHOREEXTPROC)(GLuint semaphore, GLuint numBufferBarriers, + const GLuint *buffers, + GLuint numTextureBarriers, + const GLuint *textures, + const GLenum *srcLayouts); +typedef void(GLAD_API_PTR *PFNGLWAITSEMAPHOREUI64NVXPROC)(GLuint waitGpu, GLsizei fenceObjectCount, + const GLuint *semaphoreArray, + const GLuint64 *fenceValueArray); +typedef void(GLAD_API_PTR *PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void(GLAD_API_PTR *PFNGLWAITVKSEMAPHORENVPROC)(GLuint64 vkSemaphore); +typedef void(GLAD_API_PTR *PFNGLWEIGHTPATHSNVPROC)(GLuint resultPath, GLsizei numPaths, + const GLuint *paths, const GLfloat *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, + const void *pointer); +typedef void(GLAD_API_PTR *PFNGLWEIGHTBVARBPROC)(GLint size, const GLbyte *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTDVARBPROC)(GLint size, const GLdouble *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTFVARBPROC)(GLint size, const GLfloat *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTIVARBPROC)(GLint size, const GLint *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTSVARBPROC)(GLint size, const GLshort *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTUBVARBPROC)(GLint size, const GLubyte *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTUIVARBPROC)(GLint size, const GLuint *weights); +typedef void(GLAD_API_PTR *PFNGLWEIGHTUSVARBPROC)(GLint size, const GLushort *weights); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2DARBPROC)(GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2DMESAPROC)(GLdouble x, GLdouble y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2DVARBPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2DVMESAPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2FARBPROC)(GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2FMESAPROC)(GLfloat x, GLfloat y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2FVARBPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2FVMESAPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2IARBPROC)(GLint x, GLint y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2IMESAPROC)(GLint x, GLint y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2IVARBPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2IVMESAPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2SARBPROC)(GLshort x, GLshort y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2SMESAPROC)(GLshort x, GLshort y); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2SVARBPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS2SVMESAPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3DARBPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3DMESAPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3DVARBPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3DVMESAPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3FARBPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3FMESAPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3FVARBPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3FVMESAPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3IARBPROC)(GLint x, GLint y, GLint z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3IMESAPROC)(GLint x, GLint y, GLint z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3IVARBPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3IVMESAPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3SARBPROC)(GLshort x, GLshort y, GLshort z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3SMESAPROC)(GLshort x, GLshort y, GLshort z); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3SVARBPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS3SVMESAPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4DMESAPROC)(GLdouble x, GLdouble y, GLdouble z, + GLdouble w); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4DVMESAPROC)(const GLdouble *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4FMESAPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4FVMESAPROC)(const GLfloat *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4IMESAPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4IVMESAPROC)(const GLint *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4SMESAPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void(GLAD_API_PTR *PFNGLWINDOWPOS4SVMESAPROC)(const GLshort *v); +typedef void(GLAD_API_PTR *PFNGLWINDOWRECTANGLESEXTPROC)(GLenum mode, GLsizei count, + const GLint *box); +typedef void(GLAD_API_PTR *PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, + GLenum outZ, GLenum outW); + +typedef struct GladGLContext { + PFNGLACCUMXOESPROC AccumxOES; + PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC AcquireKeyedMutexWin32EXT; + PFNGLACTIVEPROGRAMEXTPROC ActiveProgramEXT; + PFNGLACTIVESHADERPROGRAMPROC ActiveShaderProgram; + PFNGLACTIVESTENCILFACEEXTPROC ActiveStencilFaceEXT; + PFNGLACTIVETEXTUREPROC ActiveTexture; + PFNGLACTIVETEXTUREARBPROC ActiveTextureARB; + PFNGLACTIVEVARYINGNVPROC ActiveVaryingNV; + PFNGLALPHAFRAGMENTOP1ATIPROC AlphaFragmentOp1ATI; + PFNGLALPHAFRAGMENTOP2ATIPROC AlphaFragmentOp2ATI; + PFNGLALPHAFRAGMENTOP3ATIPROC AlphaFragmentOp3ATI; + PFNGLALPHAFUNCXOESPROC AlphaFuncxOES; + PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC AlphaToCoverageDitherControlNV; + PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC ApplyFramebufferAttachmentCMAAINTEL; + PFNGLAPPLYTEXTUREEXTPROC ApplyTextureEXT; + PFNGLAREPROGRAMSRESIDENTNVPROC AreProgramsResidentNV; + PFNGLARETEXTURESRESIDENTEXTPROC AreTexturesResidentEXT; + PFNGLARRAYELEMENTEXTPROC ArrayElementEXT; + PFNGLARRAYOBJECTATIPROC ArrayObjectATI; + PFNGLASYNCCOPYBUFFERSUBDATANVXPROC AsyncCopyBufferSubDataNVX; + PFNGLASYNCCOPYIMAGESUBDATANVXPROC AsyncCopyImageSubDataNVX; + PFNGLASYNCMARKERSGIXPROC AsyncMarkerSGIX; + PFNGLATTACHOBJECTARBPROC AttachObjectARB; + PFNGLATTACHSHADERPROC AttachShader; + PFNGLBEGINCONDITIONALRENDERPROC BeginConditionalRender; + PFNGLBEGINCONDITIONALRENDERNVPROC BeginConditionalRenderNV; + PFNGLBEGINCONDITIONALRENDERNVXPROC BeginConditionalRenderNVX; + PFNGLBEGINFRAGMENTSHADERATIPROC BeginFragmentShaderATI; + PFNGLBEGINOCCLUSIONQUERYNVPROC BeginOcclusionQueryNV; + PFNGLBEGINPERFMONITORAMDPROC BeginPerfMonitorAMD; + PFNGLBEGINPERFQUERYINTELPROC BeginPerfQueryINTEL; + PFNGLBEGINQUERYPROC BeginQuery; + PFNGLBEGINQUERYARBPROC BeginQueryARB; + PFNGLBEGINQUERYINDEXEDPROC BeginQueryIndexed; + PFNGLBEGINTRANSFORMFEEDBACKPROC BeginTransformFeedback; + PFNGLBEGINTRANSFORMFEEDBACKEXTPROC BeginTransformFeedbackEXT; + PFNGLBEGINTRANSFORMFEEDBACKNVPROC BeginTransformFeedbackNV; + PFNGLBEGINVERTEXSHADEREXTPROC BeginVertexShaderEXT; + PFNGLBEGINVIDEOCAPTURENVPROC BeginVideoCaptureNV; + PFNGLBINDATTRIBLOCATIONPROC BindAttribLocation; + PFNGLBINDATTRIBLOCATIONARBPROC BindAttribLocationARB; + PFNGLBINDBUFFERPROC BindBuffer; + PFNGLBINDBUFFERARBPROC BindBufferARB; + PFNGLBINDBUFFERBASEPROC BindBufferBase; + PFNGLBINDBUFFERBASEEXTPROC BindBufferBaseEXT; + PFNGLBINDBUFFERBASENVPROC BindBufferBaseNV; + PFNGLBINDBUFFEROFFSETEXTPROC BindBufferOffsetEXT; + PFNGLBINDBUFFEROFFSETNVPROC BindBufferOffsetNV; + PFNGLBINDBUFFERRANGEPROC BindBufferRange; + PFNGLBINDBUFFERRANGEEXTPROC BindBufferRangeEXT; + PFNGLBINDBUFFERRANGENVPROC BindBufferRangeNV; + PFNGLBINDBUFFERSBASEPROC BindBuffersBase; + PFNGLBINDBUFFERSRANGEPROC BindBuffersRange; + PFNGLBINDFRAGDATALOCATIONPROC BindFragDataLocation; + PFNGLBINDFRAGDATALOCATIONEXTPROC BindFragDataLocationEXT; + PFNGLBINDFRAGDATALOCATIONINDEXEDPROC BindFragDataLocationIndexed; + PFNGLBINDFRAGMENTSHADERATIPROC BindFragmentShaderATI; + PFNGLBINDFRAMEBUFFERPROC BindFramebuffer; + PFNGLBINDFRAMEBUFFEREXTPROC BindFramebufferEXT; + PFNGLBINDIMAGETEXTUREPROC BindImageTexture; + PFNGLBINDIMAGETEXTUREEXTPROC BindImageTextureEXT; + PFNGLBINDIMAGETEXTURESPROC BindImageTextures; + PFNGLBINDLIGHTPARAMETEREXTPROC BindLightParameterEXT; + PFNGLBINDMATERIALPARAMETEREXTPROC BindMaterialParameterEXT; + PFNGLBINDMULTITEXTUREEXTPROC BindMultiTextureEXT; + PFNGLBINDPARAMETEREXTPROC BindParameterEXT; + PFNGLBINDPROGRAMARBPROC BindProgramARB; + PFNGLBINDPROGRAMNVPROC BindProgramNV; + PFNGLBINDPROGRAMPIPELINEPROC BindProgramPipeline; + PFNGLBINDRENDERBUFFERPROC BindRenderbuffer; + PFNGLBINDRENDERBUFFEREXTPROC BindRenderbufferEXT; + PFNGLBINDSAMPLERPROC BindSampler; + PFNGLBINDSAMPLERSPROC BindSamplers; + PFNGLBINDSHADINGRATEIMAGENVPROC BindShadingRateImageNV; + PFNGLBINDTEXGENPARAMETEREXTPROC BindTexGenParameterEXT; + PFNGLBINDTEXTUREPROC BindTexture; + PFNGLBINDTEXTUREEXTPROC BindTextureEXT; + PFNGLBINDTEXTUREUNITPROC BindTextureUnit; + PFNGLBINDTEXTUREUNITPARAMETEREXTPROC BindTextureUnitParameterEXT; + PFNGLBINDTEXTURESPROC BindTextures; + PFNGLBINDTRANSFORMFEEDBACKPROC BindTransformFeedback; + PFNGLBINDTRANSFORMFEEDBACKNVPROC BindTransformFeedbackNV; + PFNGLBINDVERTEXARRAYPROC BindVertexArray; + PFNGLBINDVERTEXARRAYAPPLEPROC BindVertexArrayAPPLE; + PFNGLBINDVERTEXBUFFERPROC BindVertexBuffer; + PFNGLBINDVERTEXBUFFERSPROC BindVertexBuffers; + PFNGLBINDVERTEXSHADEREXTPROC BindVertexShaderEXT; + PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC BindVideoCaptureStreamBufferNV; + PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC BindVideoCaptureStreamTextureNV; + PFNGLBINORMAL3BEXTPROC Binormal3bEXT; + PFNGLBINORMAL3BVEXTPROC Binormal3bvEXT; + PFNGLBINORMAL3DEXTPROC Binormal3dEXT; + PFNGLBINORMAL3DVEXTPROC Binormal3dvEXT; + PFNGLBINORMAL3FEXTPROC Binormal3fEXT; + PFNGLBINORMAL3FVEXTPROC Binormal3fvEXT; + PFNGLBINORMAL3IEXTPROC Binormal3iEXT; + PFNGLBINORMAL3IVEXTPROC Binormal3ivEXT; + PFNGLBINORMAL3SEXTPROC Binormal3sEXT; + PFNGLBINORMAL3SVEXTPROC Binormal3svEXT; + PFNGLBINORMALPOINTEREXTPROC BinormalPointerEXT; + PFNGLBITMAPXOESPROC BitmapxOES; + PFNGLBLENDBARRIERKHRPROC BlendBarrierKHR; + PFNGLBLENDBARRIERNVPROC BlendBarrierNV; + PFNGLBLENDCOLORPROC BlendColor; + PFNGLBLENDCOLOREXTPROC BlendColorEXT; + PFNGLBLENDCOLORXOESPROC BlendColorxOES; + PFNGLBLENDEQUATIONPROC BlendEquation; + PFNGLBLENDEQUATIONEXTPROC BlendEquationEXT; + PFNGLBLENDEQUATIONINDEXEDAMDPROC BlendEquationIndexedAMD; + PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate; + PFNGLBLENDEQUATIONSEPARATEEXTPROC BlendEquationSeparateEXT; + PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC BlendEquationSeparateIndexedAMD; + PFNGLBLENDEQUATIONSEPARATEIPROC BlendEquationSeparatei; + PFNGLBLENDEQUATIONSEPARATEIARBPROC BlendEquationSeparateiARB; + PFNGLBLENDEQUATIONIPROC BlendEquationi; + PFNGLBLENDEQUATIONIARBPROC BlendEquationiARB; + PFNGLBLENDFUNCPROC BlendFunc; + PFNGLBLENDFUNCINDEXEDAMDPROC BlendFuncIndexedAMD; + PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate; + PFNGLBLENDFUNCSEPARATEEXTPROC BlendFuncSeparateEXT; + PFNGLBLENDFUNCSEPARATEINGRPROC BlendFuncSeparateINGR; + PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC BlendFuncSeparateIndexedAMD; + PFNGLBLENDFUNCSEPARATEIPROC BlendFuncSeparatei; + PFNGLBLENDFUNCSEPARATEIARBPROC BlendFuncSeparateiARB; + PFNGLBLENDFUNCIPROC BlendFunci; + PFNGLBLENDFUNCIARBPROC BlendFunciARB; + PFNGLBLENDPARAMETERINVPROC BlendParameteriNV; + PFNGLBLITFRAMEBUFFERPROC BlitFramebuffer; + PFNGLBLITFRAMEBUFFEREXTPROC BlitFramebufferEXT; + PFNGLBLITFRAMEBUFFERLAYEREXTPROC BlitFramebufferLayerEXT; + PFNGLBLITFRAMEBUFFERLAYERSEXTPROC BlitFramebufferLayersEXT; + PFNGLBLITNAMEDFRAMEBUFFERPROC BlitNamedFramebuffer; + PFNGLBUFFERADDRESSRANGENVPROC BufferAddressRangeNV; + PFNGLBUFFERATTACHMEMORYNVPROC BufferAttachMemoryNV; + PFNGLBUFFERDATAPROC BufferData; + PFNGLBUFFERDATAARBPROC BufferDataARB; + PFNGLBUFFERPAGECOMMITMENTARBPROC BufferPageCommitmentARB; + PFNGLBUFFERPAGECOMMITMENTMEMNVPROC BufferPageCommitmentMemNV; + PFNGLBUFFERPARAMETERIAPPLEPROC BufferParameteriAPPLE; + PFNGLBUFFERSTORAGEPROC BufferStorage; + PFNGLBUFFERSTORAGEEXTERNALEXTPROC BufferStorageExternalEXT; + PFNGLBUFFERSTORAGEMEMEXTPROC BufferStorageMemEXT; + PFNGLBUFFERSUBDATAPROC BufferSubData; + PFNGLBUFFERSUBDATAARBPROC BufferSubDataARB; + PFNGLCALLCOMMANDLISTNVPROC CallCommandListNV; + PFNGLCHECKFRAMEBUFFERSTATUSPROC CheckFramebufferStatus; + PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC CheckFramebufferStatusEXT; + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC CheckNamedFramebufferStatus; + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC CheckNamedFramebufferStatusEXT; + PFNGLCLAMPCOLORPROC ClampColor; + PFNGLCLAMPCOLORARBPROC ClampColorARB; + PFNGLCLEARPROC Clear; + PFNGLCLEARACCUMXOESPROC ClearAccumxOES; + PFNGLCLEARBUFFERDATAPROC ClearBufferData; + PFNGLCLEARBUFFERSUBDATAPROC ClearBufferSubData; + PFNGLCLEARBUFFERFIPROC ClearBufferfi; + PFNGLCLEARBUFFERFVPROC ClearBufferfv; + PFNGLCLEARBUFFERIVPROC ClearBufferiv; + PFNGLCLEARBUFFERUIVPROC ClearBufferuiv; + PFNGLCLEARCOLORPROC ClearColor; + PFNGLCLEARCOLORIIEXTPROC ClearColorIiEXT; + PFNGLCLEARCOLORIUIEXTPROC ClearColorIuiEXT; + PFNGLCLEARCOLORXOESPROC ClearColorxOES; + PFNGLCLEARDEPTHPROC ClearDepth; + PFNGLCLEARDEPTHDNVPROC ClearDepthdNV; + PFNGLCLEARDEPTHFPROC ClearDepthf; + PFNGLCLEARDEPTHFOESPROC ClearDepthfOES; + PFNGLCLEARDEPTHXOESPROC ClearDepthxOES; + PFNGLCLEARNAMEDBUFFERDATAPROC ClearNamedBufferData; + PFNGLCLEARNAMEDBUFFERDATAEXTPROC ClearNamedBufferDataEXT; + PFNGLCLEARNAMEDBUFFERSUBDATAPROC ClearNamedBufferSubData; + PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC ClearNamedBufferSubDataEXT; + PFNGLCLEARNAMEDFRAMEBUFFERFIPROC ClearNamedFramebufferfi; + PFNGLCLEARNAMEDFRAMEBUFFERFVPROC ClearNamedFramebufferfv; + PFNGLCLEARNAMEDFRAMEBUFFERIVPROC ClearNamedFramebufferiv; + PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC ClearNamedFramebufferuiv; + PFNGLCLEARSTENCILPROC ClearStencil; + PFNGLCLEARTEXIMAGEPROC ClearTexImage; + PFNGLCLEARTEXSUBIMAGEPROC ClearTexSubImage; + PFNGLCLIENTACTIVETEXTUREARBPROC ClientActiveTextureARB; + PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC ClientActiveVertexStreamATI; + PFNGLCLIENTATTRIBDEFAULTEXTPROC ClientAttribDefaultEXT; + PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC ClientWaitSemaphoreui64NVX; + PFNGLCLIENTWAITSYNCPROC ClientWaitSync; + PFNGLCLIPCONTROLPROC ClipControl; + PFNGLCLIPPLANEFOESPROC ClipPlanefOES; + PFNGLCLIPPLANEXOESPROC ClipPlanexOES; + PFNGLCOLOR3FVERTEX3FSUNPROC Color3fVertex3fSUN; + PFNGLCOLOR3FVERTEX3FVSUNPROC Color3fVertex3fvSUN; + PFNGLCOLOR3HNVPROC Color3hNV; + PFNGLCOLOR3HVNVPROC Color3hvNV; + PFNGLCOLOR3XOESPROC Color3xOES; + PFNGLCOLOR3XVOESPROC Color3xvOES; + PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC Color4fNormal3fVertex3fSUN; + PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC Color4fNormal3fVertex3fvSUN; + PFNGLCOLOR4HNVPROC Color4hNV; + PFNGLCOLOR4HVNVPROC Color4hvNV; + PFNGLCOLOR4UBVERTEX2FSUNPROC Color4ubVertex2fSUN; + PFNGLCOLOR4UBVERTEX2FVSUNPROC Color4ubVertex2fvSUN; + PFNGLCOLOR4UBVERTEX3FSUNPROC Color4ubVertex3fSUN; + PFNGLCOLOR4UBVERTEX3FVSUNPROC Color4ubVertex3fvSUN; + PFNGLCOLOR4XOESPROC Color4xOES; + PFNGLCOLOR4XVOESPROC Color4xvOES; + PFNGLCOLORFORMATNVPROC ColorFormatNV; + PFNGLCOLORFRAGMENTOP1ATIPROC ColorFragmentOp1ATI; + PFNGLCOLORFRAGMENTOP2ATIPROC ColorFragmentOp2ATI; + PFNGLCOLORFRAGMENTOP3ATIPROC ColorFragmentOp3ATI; + PFNGLCOLORMASKPROC ColorMask; + PFNGLCOLORMASKINDEXEDEXTPROC ColorMaskIndexedEXT; + PFNGLCOLORMASKIPROC ColorMaski; + PFNGLCOLORPOINTEREXTPROC ColorPointerEXT; + PFNGLCOLORPOINTERLISTIBMPROC ColorPointerListIBM; + PFNGLCOLORPOINTERVINTELPROC ColorPointervINTEL; + PFNGLCOLORSUBTABLEEXTPROC ColorSubTableEXT; + PFNGLCOLORTABLEEXTPROC ColorTableEXT; + PFNGLCOLORTABLEPARAMETERFVSGIPROC ColorTableParameterfvSGI; + PFNGLCOLORTABLEPARAMETERIVSGIPROC ColorTableParameterivSGI; + PFNGLCOLORTABLESGIPROC ColorTableSGI; + PFNGLCOMBINERINPUTNVPROC CombinerInputNV; + PFNGLCOMBINEROUTPUTNVPROC CombinerOutputNV; + PFNGLCOMBINERPARAMETERFNVPROC CombinerParameterfNV; + PFNGLCOMBINERPARAMETERFVNVPROC CombinerParameterfvNV; + PFNGLCOMBINERPARAMETERINVPROC CombinerParameteriNV; + PFNGLCOMBINERPARAMETERIVNVPROC CombinerParameterivNV; + PFNGLCOMBINERSTAGEPARAMETERFVNVPROC CombinerStageParameterfvNV; + PFNGLCOMMANDLISTSEGMENTSNVPROC CommandListSegmentsNV; + PFNGLCOMPILECOMMANDLISTNVPROC CompileCommandListNV; + PFNGLCOMPILESHADERPROC CompileShader; + PFNGLCOMPILESHADERARBPROC CompileShaderARB; + PFNGLCOMPILESHADERINCLUDEARBPROC CompileShaderIncludeARB; + PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC CompressedMultiTexImage1DEXT; + PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC CompressedMultiTexImage2DEXT; + PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC CompressedMultiTexImage3DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC CompressedMultiTexSubImage1DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC CompressedMultiTexSubImage2DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC CompressedMultiTexSubImage3DEXT; + PFNGLCOMPRESSEDTEXIMAGE1DPROC CompressedTexImage1D; + PFNGLCOMPRESSEDTEXIMAGE1DARBPROC CompressedTexImage1DARB; + PFNGLCOMPRESSEDTEXIMAGE2DPROC CompressedTexImage2D; + PFNGLCOMPRESSEDTEXIMAGE2DARBPROC CompressedTexImage2DARB; + PFNGLCOMPRESSEDTEXIMAGE3DPROC CompressedTexImage3D; + PFNGLCOMPRESSEDTEXIMAGE3DARBPROC CompressedTexImage3DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC CompressedTexSubImage1D; + PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC CompressedTexSubImage1DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC CompressedTexSubImage2D; + PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC CompressedTexSubImage2DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC CompressedTexSubImage3D; + PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC CompressedTexSubImage3DARB; + PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC CompressedTextureImage1DEXT; + PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC CompressedTextureImage2DEXT; + PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC CompressedTextureImage3DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC CompressedTextureSubImage1D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC CompressedTextureSubImage1DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC CompressedTextureSubImage2D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC CompressedTextureSubImage2DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC CompressedTextureSubImage3D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC CompressedTextureSubImage3DEXT; + PFNGLCONSERVATIVERASTERPARAMETERFNVPROC ConservativeRasterParameterfNV; + PFNGLCONSERVATIVERASTERPARAMETERINVPROC ConservativeRasterParameteriNV; + PFNGLCONVOLUTIONFILTER1DEXTPROC ConvolutionFilter1DEXT; + PFNGLCONVOLUTIONFILTER2DEXTPROC ConvolutionFilter2DEXT; + PFNGLCONVOLUTIONPARAMETERFEXTPROC ConvolutionParameterfEXT; + PFNGLCONVOLUTIONPARAMETERFVEXTPROC ConvolutionParameterfvEXT; + PFNGLCONVOLUTIONPARAMETERIEXTPROC ConvolutionParameteriEXT; + PFNGLCONVOLUTIONPARAMETERIVEXTPROC ConvolutionParameterivEXT; + PFNGLCONVOLUTIONPARAMETERXOESPROC ConvolutionParameterxOES; + PFNGLCONVOLUTIONPARAMETERXVOESPROC ConvolutionParameterxvOES; + PFNGLCOPYBUFFERSUBDATAPROC CopyBufferSubData; + PFNGLCOPYCOLORSUBTABLEEXTPROC CopyColorSubTableEXT; + PFNGLCOPYCOLORTABLESGIPROC CopyColorTableSGI; + PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC CopyConvolutionFilter1DEXT; + PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC CopyConvolutionFilter2DEXT; + PFNGLCOPYIMAGESUBDATAPROC CopyImageSubData; + PFNGLCOPYIMAGESUBDATANVPROC CopyImageSubDataNV; + PFNGLCOPYMULTITEXIMAGE1DEXTPROC CopyMultiTexImage1DEXT; + PFNGLCOPYMULTITEXIMAGE2DEXTPROC CopyMultiTexImage2DEXT; + PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC CopyMultiTexSubImage1DEXT; + PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC CopyMultiTexSubImage2DEXT; + PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC CopyMultiTexSubImage3DEXT; + PFNGLCOPYNAMEDBUFFERSUBDATAPROC CopyNamedBufferSubData; + PFNGLCOPYPATHNVPROC CopyPathNV; + PFNGLCOPYTEXIMAGE1DPROC CopyTexImage1D; + PFNGLCOPYTEXIMAGE1DEXTPROC CopyTexImage1DEXT; + PFNGLCOPYTEXIMAGE2DPROC CopyTexImage2D; + PFNGLCOPYTEXIMAGE2DEXTPROC CopyTexImage2DEXT; + PFNGLCOPYTEXSUBIMAGE1DPROC CopyTexSubImage1D; + PFNGLCOPYTEXSUBIMAGE1DEXTPROC CopyTexSubImage1DEXT; + PFNGLCOPYTEXSUBIMAGE2DPROC CopyTexSubImage2D; + PFNGLCOPYTEXSUBIMAGE2DEXTPROC CopyTexSubImage2DEXT; + PFNGLCOPYTEXSUBIMAGE3DPROC CopyTexSubImage3D; + PFNGLCOPYTEXSUBIMAGE3DEXTPROC CopyTexSubImage3DEXT; + PFNGLCOPYTEXTUREIMAGE1DEXTPROC CopyTextureImage1DEXT; + PFNGLCOPYTEXTUREIMAGE2DEXTPROC CopyTextureImage2DEXT; + PFNGLCOPYTEXTURESUBIMAGE1DPROC CopyTextureSubImage1D; + PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC CopyTextureSubImage1DEXT; + PFNGLCOPYTEXTURESUBIMAGE2DPROC CopyTextureSubImage2D; + PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC CopyTextureSubImage2DEXT; + PFNGLCOPYTEXTURESUBIMAGE3DPROC CopyTextureSubImage3D; + PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC CopyTextureSubImage3DEXT; + PFNGLCOVERFILLPATHINSTANCEDNVPROC CoverFillPathInstancedNV; + PFNGLCOVERFILLPATHNVPROC CoverFillPathNV; + PFNGLCOVERSTROKEPATHINSTANCEDNVPROC CoverStrokePathInstancedNV; + PFNGLCOVERSTROKEPATHNVPROC CoverStrokePathNV; + PFNGLCOVERAGEMODULATIONNVPROC CoverageModulationNV; + PFNGLCOVERAGEMODULATIONTABLENVPROC CoverageModulationTableNV; + PFNGLCREATEBUFFERSPROC CreateBuffers; + PFNGLCREATECOMMANDLISTSNVPROC CreateCommandListsNV; + PFNGLCREATEFRAMEBUFFERSPROC CreateFramebuffers; + PFNGLCREATEMEMORYOBJECTSEXTPROC CreateMemoryObjectsEXT; + PFNGLCREATEPERFQUERYINTELPROC CreatePerfQueryINTEL; + PFNGLCREATEPROGRAMPROC CreateProgram; + PFNGLCREATEPROGRAMOBJECTARBPROC CreateProgramObjectARB; + PFNGLCREATEPROGRAMPIPELINESPROC CreateProgramPipelines; + PFNGLCREATEPROGRESSFENCENVXPROC CreateProgressFenceNVX; + PFNGLCREATEQUERIESPROC CreateQueries; + PFNGLCREATERENDERBUFFERSPROC CreateRenderbuffers; + PFNGLCREATESAMPLERSPROC CreateSamplers; + PFNGLCREATESEMAPHORESNVPROC CreateSemaphoresNV; + PFNGLCREATESHADERPROC CreateShader; + PFNGLCREATESHADEROBJECTARBPROC CreateShaderObjectARB; + PFNGLCREATESHADERPROGRAMEXTPROC CreateShaderProgramEXT; + PFNGLCREATESHADERPROGRAMVPROC CreateShaderProgramv; + PFNGLCREATESTATESNVPROC CreateStatesNV; + PFNGLCREATESYNCFROMCLEVENTARBPROC CreateSyncFromCLeventARB; + PFNGLCREATETEXTURESPROC CreateTextures; + PFNGLCREATETRANSFORMFEEDBACKSPROC CreateTransformFeedbacks; + PFNGLCREATEVERTEXARRAYSPROC CreateVertexArrays; + PFNGLCULLFACEPROC CullFace; + PFNGLCULLPARAMETERDVEXTPROC CullParameterdvEXT; + PFNGLCULLPARAMETERFVEXTPROC CullParameterfvEXT; + PFNGLCURRENTPALETTEMATRIXARBPROC CurrentPaletteMatrixARB; + PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; + PFNGLDEBUGMESSAGECALLBACKAMDPROC DebugMessageCallbackAMD; + PFNGLDEBUGMESSAGECALLBACKARBPROC DebugMessageCallbackARB; + PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; + PFNGLDEBUGMESSAGECONTROLARBPROC DebugMessageControlARB; + PFNGLDEBUGMESSAGEENABLEAMDPROC DebugMessageEnableAMD; + PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; + PFNGLDEBUGMESSAGEINSERTAMDPROC DebugMessageInsertAMD; + PFNGLDEBUGMESSAGEINSERTARBPROC DebugMessageInsertARB; + PFNGLDEFORMSGIXPROC DeformSGIX; + PFNGLDEFORMATIONMAP3DSGIXPROC DeformationMap3dSGIX; + PFNGLDEFORMATIONMAP3FSGIXPROC DeformationMap3fSGIX; + PFNGLDELETEASYNCMARKERSSGIXPROC DeleteAsyncMarkersSGIX; + PFNGLDELETEBUFFERSPROC DeleteBuffers; + PFNGLDELETEBUFFERSARBPROC DeleteBuffersARB; + PFNGLDELETECOMMANDLISTSNVPROC DeleteCommandListsNV; + PFNGLDELETEFENCESAPPLEPROC DeleteFencesAPPLE; + PFNGLDELETEFENCESNVPROC DeleteFencesNV; + PFNGLDELETEFRAGMENTSHADERATIPROC DeleteFragmentShaderATI; + PFNGLDELETEFRAMEBUFFERSPROC DeleteFramebuffers; + PFNGLDELETEFRAMEBUFFERSEXTPROC DeleteFramebuffersEXT; + PFNGLDELETEMEMORYOBJECTSEXTPROC DeleteMemoryObjectsEXT; + PFNGLDELETENAMEDSTRINGARBPROC DeleteNamedStringARB; + PFNGLDELETENAMESAMDPROC DeleteNamesAMD; + PFNGLDELETEOBJECTARBPROC DeleteObjectARB; + PFNGLDELETEOCCLUSIONQUERIESNVPROC DeleteOcclusionQueriesNV; + PFNGLDELETEPATHSNVPROC DeletePathsNV; + PFNGLDELETEPERFMONITORSAMDPROC DeletePerfMonitorsAMD; + PFNGLDELETEPERFQUERYINTELPROC DeletePerfQueryINTEL; + PFNGLDELETEPROGRAMPROC DeleteProgram; + PFNGLDELETEPROGRAMPIPELINESPROC DeleteProgramPipelines; + PFNGLDELETEPROGRAMSARBPROC DeleteProgramsARB; + PFNGLDELETEPROGRAMSNVPROC DeleteProgramsNV; + PFNGLDELETEQUERIESPROC DeleteQueries; + PFNGLDELETEQUERIESARBPROC DeleteQueriesARB; + PFNGLDELETEQUERYRESOURCETAGNVPROC DeleteQueryResourceTagNV; + PFNGLDELETERENDERBUFFERSPROC DeleteRenderbuffers; + PFNGLDELETERENDERBUFFERSEXTPROC DeleteRenderbuffersEXT; + PFNGLDELETESAMPLERSPROC DeleteSamplers; + PFNGLDELETESEMAPHORESEXTPROC DeleteSemaphoresEXT; + PFNGLDELETESHADERPROC DeleteShader; + PFNGLDELETESTATESNVPROC DeleteStatesNV; + PFNGLDELETESYNCPROC DeleteSync; + PFNGLDELETETEXTURESPROC DeleteTextures; + PFNGLDELETETEXTURESEXTPROC DeleteTexturesEXT; + PFNGLDELETETRANSFORMFEEDBACKSPROC DeleteTransformFeedbacks; + PFNGLDELETETRANSFORMFEEDBACKSNVPROC DeleteTransformFeedbacksNV; + PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays; + PFNGLDELETEVERTEXARRAYSAPPLEPROC DeleteVertexArraysAPPLE; + PFNGLDELETEVERTEXSHADEREXTPROC DeleteVertexShaderEXT; + PFNGLDEPTHBOUNDSEXTPROC DepthBoundsEXT; + PFNGLDEPTHBOUNDSDNVPROC DepthBoundsdNV; + PFNGLDEPTHFUNCPROC DepthFunc; + PFNGLDEPTHMASKPROC DepthMask; + PFNGLDEPTHRANGEPROC DepthRange; + PFNGLDEPTHRANGEARRAYDVNVPROC DepthRangeArraydvNV; + PFNGLDEPTHRANGEARRAYVPROC DepthRangeArrayv; + PFNGLDEPTHRANGEINDEXEDPROC DepthRangeIndexed; + PFNGLDEPTHRANGEINDEXEDDNVPROC DepthRangeIndexeddNV; + PFNGLDEPTHRANGEDNVPROC DepthRangedNV; + PFNGLDEPTHRANGEFPROC DepthRangef; + PFNGLDEPTHRANGEFOESPROC DepthRangefOES; + PFNGLDEPTHRANGEXOESPROC DepthRangexOES; + PFNGLDETACHOBJECTARBPROC DetachObjectARB; + PFNGLDETACHSHADERPROC DetachShader; + PFNGLDETAILTEXFUNCSGISPROC DetailTexFuncSGIS; + PFNGLDISABLEPROC Disable; + PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC DisableClientStateIndexedEXT; + PFNGLDISABLECLIENTSTATEIEXTPROC DisableClientStateiEXT; + PFNGLDISABLEINDEXEDEXTPROC DisableIndexedEXT; + PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC DisableVariantClientStateEXT; + PFNGLDISABLEVERTEXARRAYATTRIBPROC DisableVertexArrayAttrib; + PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC DisableVertexArrayAttribEXT; + PFNGLDISABLEVERTEXARRAYEXTPROC DisableVertexArrayEXT; + PFNGLDISABLEVERTEXATTRIBAPPLEPROC DisableVertexAttribAPPLE; + PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray; + PFNGLDISABLEVERTEXATTRIBARRAYARBPROC DisableVertexAttribArrayARB; + PFNGLDISABLEIPROC Disablei; + PFNGLDISPATCHCOMPUTEPROC DispatchCompute; + PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC DispatchComputeGroupSizeARB; + PFNGLDISPATCHCOMPUTEINDIRECTPROC DispatchComputeIndirect; + PFNGLDRAWARRAYSPROC DrawArrays; + PFNGLDRAWARRAYSEXTPROC DrawArraysEXT; + PFNGLDRAWARRAYSINDIRECTPROC DrawArraysIndirect; + PFNGLDRAWARRAYSINSTANCEDPROC DrawArraysInstanced; + PFNGLDRAWARRAYSINSTANCEDARBPROC DrawArraysInstancedARB; + PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC DrawArraysInstancedBaseInstance; + PFNGLDRAWARRAYSINSTANCEDEXTPROC DrawArraysInstancedEXT; + PFNGLDRAWBUFFERPROC DrawBuffer; + PFNGLDRAWBUFFERSPROC DrawBuffers; + PFNGLDRAWBUFFERSARBPROC DrawBuffersARB; + PFNGLDRAWBUFFERSATIPROC DrawBuffersATI; + PFNGLDRAWCOMMANDSADDRESSNVPROC DrawCommandsAddressNV; + PFNGLDRAWCOMMANDSNVPROC DrawCommandsNV; + PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC DrawCommandsStatesAddressNV; + PFNGLDRAWCOMMANDSSTATESNVPROC DrawCommandsStatesNV; + PFNGLDRAWELEMENTARRAYAPPLEPROC DrawElementArrayAPPLE; + PFNGLDRAWELEMENTARRAYATIPROC DrawElementArrayATI; + PFNGLDRAWELEMENTSPROC DrawElements; + PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex; + PFNGLDRAWELEMENTSINDIRECTPROC DrawElementsIndirect; + PFNGLDRAWELEMENTSINSTANCEDPROC DrawElementsInstanced; + PFNGLDRAWELEMENTSINSTANCEDARBPROC DrawElementsInstancedARB; + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC DrawElementsInstancedBaseInstance; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC DrawElementsInstancedBaseVertex; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC + DrawElementsInstancedBaseVertexBaseInstance; + PFNGLDRAWELEMENTSINSTANCEDEXTPROC DrawElementsInstancedEXT; + PFNGLDRAWMESHARRAYSSUNPROC DrawMeshArraysSUN; + PFNGLDRAWMESHTASKSINDIRECTNVPROC DrawMeshTasksIndirectNV; + PFNGLDRAWMESHTASKSNVPROC DrawMeshTasksNV; + PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC DrawRangeElementArrayAPPLE; + PFNGLDRAWRANGEELEMENTARRAYATIPROC DrawRangeElementArrayATI; + PFNGLDRAWRANGEELEMENTSPROC DrawRangeElements; + PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC DrawRangeElementsBaseVertex; + PFNGLDRAWRANGEELEMENTSEXTPROC DrawRangeElementsEXT; + PFNGLDRAWTEXTURENVPROC DrawTextureNV; + PFNGLDRAWTRANSFORMFEEDBACKPROC DrawTransformFeedback; + PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC DrawTransformFeedbackInstanced; + PFNGLDRAWTRANSFORMFEEDBACKNVPROC DrawTransformFeedbackNV; + PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC DrawTransformFeedbackStream; + PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC DrawTransformFeedbackStreamInstanced; + PFNGLDRAWVKIMAGENVPROC DrawVkImageNV; + PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC EGLImageTargetTexStorageEXT; + PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC EGLImageTargetTextureStorageEXT; + PFNGLEDGEFLAGFORMATNVPROC EdgeFlagFormatNV; + PFNGLEDGEFLAGPOINTEREXTPROC EdgeFlagPointerEXT; + PFNGLEDGEFLAGPOINTERLISTIBMPROC EdgeFlagPointerListIBM; + PFNGLELEMENTPOINTERAPPLEPROC ElementPointerAPPLE; + PFNGLELEMENTPOINTERATIPROC ElementPointerATI; + PFNGLENABLEPROC Enable; + PFNGLENABLECLIENTSTATEINDEXEDEXTPROC EnableClientStateIndexedEXT; + PFNGLENABLECLIENTSTATEIEXTPROC EnableClientStateiEXT; + PFNGLENABLEINDEXEDEXTPROC EnableIndexedEXT; + PFNGLENABLEVARIANTCLIENTSTATEEXTPROC EnableVariantClientStateEXT; + PFNGLENABLEVERTEXARRAYATTRIBPROC EnableVertexArrayAttrib; + PFNGLENABLEVERTEXARRAYATTRIBEXTPROC EnableVertexArrayAttribEXT; + PFNGLENABLEVERTEXARRAYEXTPROC EnableVertexArrayEXT; + PFNGLENABLEVERTEXATTRIBAPPLEPROC EnableVertexAttribAPPLE; + PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray; + PFNGLENABLEVERTEXATTRIBARRAYARBPROC EnableVertexAttribArrayARB; + PFNGLENABLEIPROC Enablei; + PFNGLENDCONDITIONALRENDERPROC EndConditionalRender; + PFNGLENDCONDITIONALRENDERNVPROC EndConditionalRenderNV; + PFNGLENDCONDITIONALRENDERNVXPROC EndConditionalRenderNVX; + PFNGLENDFRAGMENTSHADERATIPROC EndFragmentShaderATI; + PFNGLENDOCCLUSIONQUERYNVPROC EndOcclusionQueryNV; + PFNGLENDPERFMONITORAMDPROC EndPerfMonitorAMD; + PFNGLENDPERFQUERYINTELPROC EndPerfQueryINTEL; + PFNGLENDQUERYPROC EndQuery; + PFNGLENDQUERYARBPROC EndQueryARB; + PFNGLENDQUERYINDEXEDPROC EndQueryIndexed; + PFNGLENDTRANSFORMFEEDBACKPROC EndTransformFeedback; + PFNGLENDTRANSFORMFEEDBACKEXTPROC EndTransformFeedbackEXT; + PFNGLENDTRANSFORMFEEDBACKNVPROC EndTransformFeedbackNV; + PFNGLENDVERTEXSHADEREXTPROC EndVertexShaderEXT; + PFNGLENDVIDEOCAPTURENVPROC EndVideoCaptureNV; + PFNGLEVALCOORD1XOESPROC EvalCoord1xOES; + PFNGLEVALCOORD1XVOESPROC EvalCoord1xvOES; + PFNGLEVALCOORD2XOESPROC EvalCoord2xOES; + PFNGLEVALCOORD2XVOESPROC EvalCoord2xvOES; + PFNGLEVALMAPSNVPROC EvalMapsNV; + PFNGLEVALUATEDEPTHVALUESARBPROC EvaluateDepthValuesARB; + PFNGLEXECUTEPROGRAMNVPROC ExecuteProgramNV; + PFNGLEXTRACTCOMPONENTEXTPROC ExtractComponentEXT; + PFNGLFEEDBACKBUFFERXOESPROC FeedbackBufferxOES; + PFNGLFENCESYNCPROC FenceSync; + PFNGLFINALCOMBINERINPUTNVPROC FinalCombinerInputNV; + PFNGLFINISHPROC Finish; + PFNGLFINISHASYNCSGIXPROC FinishAsyncSGIX; + PFNGLFINISHFENCEAPPLEPROC FinishFenceAPPLE; + PFNGLFINISHFENCENVPROC FinishFenceNV; + PFNGLFINISHOBJECTAPPLEPROC FinishObjectAPPLE; + PFNGLFINISHTEXTURESUNXPROC FinishTextureSUNX; + PFNGLFLUSHPROC Flush; + PFNGLFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange; + PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC FlushMappedBufferRangeAPPLE; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC FlushMappedNamedBufferRange; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC FlushMappedNamedBufferRangeEXT; + PFNGLFLUSHPIXELDATARANGENVPROC FlushPixelDataRangeNV; + PFNGLFLUSHRASTERSGIXPROC FlushRasterSGIX; + PFNGLFLUSHSTATICDATAIBMPROC FlushStaticDataIBM; + PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC FlushVertexArrayRangeAPPLE; + PFNGLFLUSHVERTEXARRAYRANGENVPROC FlushVertexArrayRangeNV; + PFNGLFOGCOORDFORMATNVPROC FogCoordFormatNV; + PFNGLFOGCOORDPOINTEREXTPROC FogCoordPointerEXT; + PFNGLFOGCOORDPOINTERLISTIBMPROC FogCoordPointerListIBM; + PFNGLFOGCOORDDEXTPROC FogCoorddEXT; + PFNGLFOGCOORDDVEXTPROC FogCoorddvEXT; + PFNGLFOGCOORDFEXTPROC FogCoordfEXT; + PFNGLFOGCOORDFVEXTPROC FogCoordfvEXT; + PFNGLFOGCOORDHNVPROC FogCoordhNV; + PFNGLFOGCOORDHVNVPROC FogCoordhvNV; + PFNGLFOGFUNCSGISPROC FogFuncSGIS; + PFNGLFOGXOESPROC FogxOES; + PFNGLFOGXVOESPROC FogxvOES; + PFNGLFRAGMENTCOLORMATERIALSGIXPROC FragmentColorMaterialSGIX; + PFNGLFRAGMENTCOVERAGECOLORNVPROC FragmentCoverageColorNV; + PFNGLFRAGMENTLIGHTMODELFSGIXPROC FragmentLightModelfSGIX; + PFNGLFRAGMENTLIGHTMODELFVSGIXPROC FragmentLightModelfvSGIX; + PFNGLFRAGMENTLIGHTMODELISGIXPROC FragmentLightModeliSGIX; + PFNGLFRAGMENTLIGHTMODELIVSGIXPROC FragmentLightModelivSGIX; + PFNGLFRAGMENTLIGHTFSGIXPROC FragmentLightfSGIX; + PFNGLFRAGMENTLIGHTFVSGIXPROC FragmentLightfvSGIX; + PFNGLFRAGMENTLIGHTISGIXPROC FragmentLightiSGIX; + PFNGLFRAGMENTLIGHTIVSGIXPROC FragmentLightivSGIX; + PFNGLFRAGMENTMATERIALFSGIXPROC FragmentMaterialfSGIX; + PFNGLFRAGMENTMATERIALFVSGIXPROC FragmentMaterialfvSGIX; + PFNGLFRAGMENTMATERIALISGIXPROC FragmentMaterialiSGIX; + PFNGLFRAGMENTMATERIALIVSGIXPROC FragmentMaterialivSGIX; + PFNGLFRAMETERMINATORGREMEDYPROC FrameTerminatorGREMEDY; + PFNGLFRAMEZOOMSGIXPROC FrameZoomSGIX; + PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC FramebufferDrawBufferEXT; + PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC FramebufferDrawBuffersEXT; + PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC FramebufferFetchBarrierEXT; + PFNGLFRAMEBUFFERPARAMETERIPROC FramebufferParameteri; + PFNGLFRAMEBUFFERPARAMETERIMESAPROC FramebufferParameteriMESA; + PFNGLFRAMEBUFFERREADBUFFEREXTPROC FramebufferReadBufferEXT; + PFNGLFRAMEBUFFERRENDERBUFFERPROC FramebufferRenderbuffer; + PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC FramebufferRenderbufferEXT; + PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC FramebufferSampleLocationsfvARB; + PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC FramebufferSampleLocationsfvNV; + PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC FramebufferSamplePositionsfvAMD; + PFNGLFRAMEBUFFERTEXTUREPROC FramebufferTexture; + PFNGLFRAMEBUFFERTEXTURE1DPROC FramebufferTexture1D; + PFNGLFRAMEBUFFERTEXTURE1DEXTPROC FramebufferTexture1DEXT; + PFNGLFRAMEBUFFERTEXTURE2DPROC FramebufferTexture2D; + PFNGLFRAMEBUFFERTEXTURE2DEXTPROC FramebufferTexture2DEXT; + PFNGLFRAMEBUFFERTEXTURE3DPROC FramebufferTexture3D; + PFNGLFRAMEBUFFERTEXTURE3DEXTPROC FramebufferTexture3DEXT; + PFNGLFRAMEBUFFERTEXTUREARBPROC FramebufferTextureARB; + PFNGLFRAMEBUFFERTEXTUREEXTPROC FramebufferTextureEXT; + PFNGLFRAMEBUFFERTEXTUREFACEARBPROC FramebufferTextureFaceARB; + PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC FramebufferTextureFaceEXT; + PFNGLFRAMEBUFFERTEXTURELAYERPROC FramebufferTextureLayer; + PFNGLFRAMEBUFFERTEXTURELAYERARBPROC FramebufferTextureLayerARB; + PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC FramebufferTextureLayerEXT; + PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC FramebufferTextureMultiviewOVR; + PFNGLFREEOBJECTBUFFERATIPROC FreeObjectBufferATI; + PFNGLFRONTFACEPROC FrontFace; + PFNGLFRUSTUMFOESPROC FrustumfOES; + PFNGLFRUSTUMXOESPROC FrustumxOES; + PFNGLGENASYNCMARKERSSGIXPROC GenAsyncMarkersSGIX; + PFNGLGENBUFFERSPROC GenBuffers; + PFNGLGENBUFFERSARBPROC GenBuffersARB; + PFNGLGENFENCESAPPLEPROC GenFencesAPPLE; + PFNGLGENFENCESNVPROC GenFencesNV; + PFNGLGENFRAGMENTSHADERSATIPROC GenFragmentShadersATI; + PFNGLGENFRAMEBUFFERSPROC GenFramebuffers; + PFNGLGENFRAMEBUFFERSEXTPROC GenFramebuffersEXT; + PFNGLGENNAMESAMDPROC GenNamesAMD; + PFNGLGENOCCLUSIONQUERIESNVPROC GenOcclusionQueriesNV; + PFNGLGENPATHSNVPROC GenPathsNV; + PFNGLGENPERFMONITORSAMDPROC GenPerfMonitorsAMD; + PFNGLGENPROGRAMPIPELINESPROC GenProgramPipelines; + PFNGLGENPROGRAMSARBPROC GenProgramsARB; + PFNGLGENPROGRAMSNVPROC GenProgramsNV; + PFNGLGENQUERIESPROC GenQueries; + PFNGLGENQUERIESARBPROC GenQueriesARB; + PFNGLGENQUERYRESOURCETAGNVPROC GenQueryResourceTagNV; + PFNGLGENRENDERBUFFERSPROC GenRenderbuffers; + PFNGLGENRENDERBUFFERSEXTPROC GenRenderbuffersEXT; + PFNGLGENSAMPLERSPROC GenSamplers; + PFNGLGENSEMAPHORESEXTPROC GenSemaphoresEXT; + PFNGLGENSYMBOLSEXTPROC GenSymbolsEXT; + PFNGLGENTEXTURESPROC GenTextures; + PFNGLGENTEXTURESEXTPROC GenTexturesEXT; + PFNGLGENTRANSFORMFEEDBACKSPROC GenTransformFeedbacks; + PFNGLGENTRANSFORMFEEDBACKSNVPROC GenTransformFeedbacksNV; + PFNGLGENVERTEXARRAYSPROC GenVertexArrays; + PFNGLGENVERTEXARRAYSAPPLEPROC GenVertexArraysAPPLE; + PFNGLGENVERTEXSHADERSEXTPROC GenVertexShadersEXT; + PFNGLGENERATEMIPMAPPROC GenerateMipmap; + PFNGLGENERATEMIPMAPEXTPROC GenerateMipmapEXT; + PFNGLGENERATEMULTITEXMIPMAPEXTPROC GenerateMultiTexMipmapEXT; + PFNGLGENERATETEXTUREMIPMAPPROC GenerateTextureMipmap; + PFNGLGENERATETEXTUREMIPMAPEXTPROC GenerateTextureMipmapEXT; + PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC GetActiveAtomicCounterBufferiv; + PFNGLGETACTIVEATTRIBPROC GetActiveAttrib; + PFNGLGETACTIVEATTRIBARBPROC GetActiveAttribARB; + PFNGLGETACTIVESUBROUTINENAMEPROC GetActiveSubroutineName; + PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC GetActiveSubroutineUniformName; + PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC GetActiveSubroutineUniformiv; + PFNGLGETACTIVEUNIFORMPROC GetActiveUniform; + PFNGLGETACTIVEUNIFORMARBPROC GetActiveUniformARB; + PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC GetActiveUniformBlockName; + PFNGLGETACTIVEUNIFORMBLOCKIVPROC GetActiveUniformBlockiv; + PFNGLGETACTIVEUNIFORMNAMEPROC GetActiveUniformName; + PFNGLGETACTIVEUNIFORMSIVPROC GetActiveUniformsiv; + PFNGLGETACTIVEVARYINGNVPROC GetActiveVaryingNV; + PFNGLGETARRAYOBJECTFVATIPROC GetArrayObjectfvATI; + PFNGLGETARRAYOBJECTIVATIPROC GetArrayObjectivATI; + PFNGLGETATTACHEDOBJECTSARBPROC GetAttachedObjectsARB; + PFNGLGETATTACHEDSHADERSPROC GetAttachedShaders; + PFNGLGETATTRIBLOCATIONPROC GetAttribLocation; + PFNGLGETATTRIBLOCATIONARBPROC GetAttribLocationARB; + PFNGLGETBOOLEANINDEXEDVEXTPROC GetBooleanIndexedvEXT; + PFNGLGETBOOLEANI_VPROC GetBooleani_v; + PFNGLGETBOOLEANVPROC GetBooleanv; + PFNGLGETBUFFERPARAMETERI64VPROC GetBufferParameteri64v; + PFNGLGETBUFFERPARAMETERIVPROC GetBufferParameteriv; + PFNGLGETBUFFERPARAMETERIVARBPROC GetBufferParameterivARB; + PFNGLGETBUFFERPARAMETERUI64VNVPROC GetBufferParameterui64vNV; + PFNGLGETBUFFERPOINTERVPROC GetBufferPointerv; + PFNGLGETBUFFERPOINTERVARBPROC GetBufferPointervARB; + PFNGLGETBUFFERSUBDATAPROC GetBufferSubData; + PFNGLGETBUFFERSUBDATAARBPROC GetBufferSubDataARB; + PFNGLGETCLIPPLANEFOESPROC GetClipPlanefOES; + PFNGLGETCLIPPLANEXOESPROC GetClipPlanexOES; + PFNGLGETCOLORTABLEEXTPROC GetColorTableEXT; + PFNGLGETCOLORTABLEPARAMETERFVEXTPROC GetColorTableParameterfvEXT; + PFNGLGETCOLORTABLEPARAMETERFVSGIPROC GetColorTableParameterfvSGI; + PFNGLGETCOLORTABLEPARAMETERIVEXTPROC GetColorTableParameterivEXT; + PFNGLGETCOLORTABLEPARAMETERIVSGIPROC GetColorTableParameterivSGI; + PFNGLGETCOLORTABLESGIPROC GetColorTableSGI; + PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC GetCombinerInputParameterfvNV; + PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC GetCombinerInputParameterivNV; + PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC GetCombinerOutputParameterfvNV; + PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC GetCombinerOutputParameterivNV; + PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC GetCombinerStageParameterfvNV; + PFNGLGETCOMMANDHEADERNVPROC GetCommandHeaderNV; + PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC GetCompressedMultiTexImageEXT; + PFNGLGETCOMPRESSEDTEXIMAGEPROC GetCompressedTexImage; + PFNGLGETCOMPRESSEDTEXIMAGEARBPROC GetCompressedTexImageARB; + PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC GetCompressedTextureImage; + PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC GetCompressedTextureImageEXT; + PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC GetCompressedTextureSubImage; + PFNGLGETCONVOLUTIONFILTEREXTPROC GetConvolutionFilterEXT; + PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC GetConvolutionParameterfvEXT; + PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC GetConvolutionParameterivEXT; + PFNGLGETCONVOLUTIONPARAMETERXVOESPROC GetConvolutionParameterxvOES; + PFNGLGETCOVERAGEMODULATIONTABLENVPROC GetCoverageModulationTableNV; + PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog; + PFNGLGETDEBUGMESSAGELOGAMDPROC GetDebugMessageLogAMD; + PFNGLGETDEBUGMESSAGELOGARBPROC GetDebugMessageLogARB; + PFNGLGETDETAILTEXFUNCSGISPROC GetDetailTexFuncSGIS; + PFNGLGETDOUBLEINDEXEDVEXTPROC GetDoubleIndexedvEXT; + PFNGLGETDOUBLEI_VPROC GetDoublei_v; + PFNGLGETDOUBLEI_VEXTPROC GetDoublei_vEXT; + PFNGLGETDOUBLEVPROC GetDoublev; + PFNGLGETERRORPROC GetError; + PFNGLGETFENCEIVNVPROC GetFenceivNV; + PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC GetFinalCombinerInputParameterfvNV; + PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC GetFinalCombinerInputParameterivNV; + PFNGLGETFIRSTPERFQUERYIDINTELPROC GetFirstPerfQueryIdINTEL; + PFNGLGETFIXEDVOESPROC GetFixedvOES; + PFNGLGETFLOATINDEXEDVEXTPROC GetFloatIndexedvEXT; + PFNGLGETFLOATI_VPROC GetFloati_v; + PFNGLGETFLOATI_VEXTPROC GetFloati_vEXT; + PFNGLGETFLOATVPROC GetFloatv; + PFNGLGETFOGFUNCSGISPROC GetFogFuncSGIS; + PFNGLGETFRAGDATAINDEXPROC GetFragDataIndex; + PFNGLGETFRAGDATALOCATIONPROC GetFragDataLocation; + PFNGLGETFRAGDATALOCATIONEXTPROC GetFragDataLocationEXT; + PFNGLGETFRAGMENTLIGHTFVSGIXPROC GetFragmentLightfvSGIX; + PFNGLGETFRAGMENTLIGHTIVSGIXPROC GetFragmentLightivSGIX; + PFNGLGETFRAGMENTMATERIALFVSGIXPROC GetFragmentMaterialfvSGIX; + PFNGLGETFRAGMENTMATERIALIVSGIXPROC GetFragmentMaterialivSGIX; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetFramebufferAttachmentParameteriv; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GetFramebufferAttachmentParameterivEXT; + PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC GetFramebufferParameterfvAMD; + PFNGLGETFRAMEBUFFERPARAMETERIVPROC GetFramebufferParameteriv; + PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC GetFramebufferParameterivEXT; + PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC GetFramebufferParameterivMESA; + PFNGLGETGRAPHICSRESETSTATUSPROC GetGraphicsResetStatus; + PFNGLGETGRAPHICSRESETSTATUSARBPROC GetGraphicsResetStatusARB; + PFNGLGETHANDLEARBPROC GetHandleARB; + PFNGLGETHISTOGRAMEXTPROC GetHistogramEXT; + PFNGLGETHISTOGRAMPARAMETERFVEXTPROC GetHistogramParameterfvEXT; + PFNGLGETHISTOGRAMPARAMETERIVEXTPROC GetHistogramParameterivEXT; + PFNGLGETHISTOGRAMPARAMETERXVOESPROC GetHistogramParameterxvOES; + PFNGLGETIMAGEHANDLEARBPROC GetImageHandleARB; + PFNGLGETIMAGEHANDLENVPROC GetImageHandleNV; + PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC GetImageTransformParameterfvHP; + PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC GetImageTransformParameterivHP; + PFNGLGETINFOLOGARBPROC GetInfoLogARB; + PFNGLGETINSTRUMENTSSGIXPROC GetInstrumentsSGIX; + PFNGLGETINTEGER64I_VPROC GetInteger64i_v; + PFNGLGETINTEGER64VPROC GetInteger64v; + PFNGLGETINTEGERINDEXEDVEXTPROC GetIntegerIndexedvEXT; + PFNGLGETINTEGERI_VPROC GetIntegeri_v; + PFNGLGETINTEGERUI64I_VNVPROC GetIntegerui64i_vNV; + PFNGLGETINTEGERUI64VNVPROC GetIntegerui64vNV; + PFNGLGETINTEGERVPROC GetIntegerv; + PFNGLGETINTERNALFORMATSAMPLEIVNVPROC GetInternalformatSampleivNV; + PFNGLGETINTERNALFORMATI64VPROC GetInternalformati64v; + PFNGLGETINTERNALFORMATIVPROC GetInternalformativ; + PFNGLGETINVARIANTBOOLEANVEXTPROC GetInvariantBooleanvEXT; + PFNGLGETINVARIANTFLOATVEXTPROC GetInvariantFloatvEXT; + PFNGLGETINVARIANTINTEGERVEXTPROC GetInvariantIntegervEXT; + PFNGLGETLIGHTXOESPROC GetLightxOES; + PFNGLGETLISTPARAMETERFVSGIXPROC GetListParameterfvSGIX; + PFNGLGETLISTPARAMETERIVSGIXPROC GetListParameterivSGIX; + PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC GetLocalConstantBooleanvEXT; + PFNGLGETLOCALCONSTANTFLOATVEXTPROC GetLocalConstantFloatvEXT; + PFNGLGETLOCALCONSTANTINTEGERVEXTPROC GetLocalConstantIntegervEXT; + PFNGLGETMAPATTRIBPARAMETERFVNVPROC GetMapAttribParameterfvNV; + PFNGLGETMAPATTRIBPARAMETERIVNVPROC GetMapAttribParameterivNV; + PFNGLGETMAPCONTROLPOINTSNVPROC GetMapControlPointsNV; + PFNGLGETMAPPARAMETERFVNVPROC GetMapParameterfvNV; + PFNGLGETMAPPARAMETERIVNVPROC GetMapParameterivNV; + PFNGLGETMAPXVOESPROC GetMapxvOES; + PFNGLGETMATERIALXOESPROC GetMaterialxOES; + PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC GetMemoryObjectDetachedResourcesuivNV; + PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC GetMemoryObjectParameterivEXT; + PFNGLGETMINMAXEXTPROC GetMinmaxEXT; + PFNGLGETMINMAXPARAMETERFVEXTPROC GetMinmaxParameterfvEXT; + PFNGLGETMINMAXPARAMETERIVEXTPROC GetMinmaxParameterivEXT; + PFNGLGETMULTITEXENVFVEXTPROC GetMultiTexEnvfvEXT; + PFNGLGETMULTITEXENVIVEXTPROC GetMultiTexEnvivEXT; + PFNGLGETMULTITEXGENDVEXTPROC GetMultiTexGendvEXT; + PFNGLGETMULTITEXGENFVEXTPROC GetMultiTexGenfvEXT; + PFNGLGETMULTITEXGENIVEXTPROC GetMultiTexGenivEXT; + PFNGLGETMULTITEXIMAGEEXTPROC GetMultiTexImageEXT; + PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC GetMultiTexLevelParameterfvEXT; + PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC GetMultiTexLevelParameterivEXT; + PFNGLGETMULTITEXPARAMETERIIVEXTPROC GetMultiTexParameterIivEXT; + PFNGLGETMULTITEXPARAMETERIUIVEXTPROC GetMultiTexParameterIuivEXT; + PFNGLGETMULTITEXPARAMETERFVEXTPROC GetMultiTexParameterfvEXT; + PFNGLGETMULTITEXPARAMETERIVEXTPROC GetMultiTexParameterivEXT; + PFNGLGETMULTISAMPLEFVPROC GetMultisamplefv; + PFNGLGETMULTISAMPLEFVNVPROC GetMultisamplefvNV; + PFNGLGETNAMEDBUFFERPARAMETERI64VPROC GetNamedBufferParameteri64v; + PFNGLGETNAMEDBUFFERPARAMETERIVPROC GetNamedBufferParameteriv; + PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC GetNamedBufferParameterivEXT; + PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC GetNamedBufferParameterui64vNV; + PFNGLGETNAMEDBUFFERPOINTERVPROC GetNamedBufferPointerv; + PFNGLGETNAMEDBUFFERPOINTERVEXTPROC GetNamedBufferPointervEXT; + PFNGLGETNAMEDBUFFERSUBDATAPROC GetNamedBufferSubData; + PFNGLGETNAMEDBUFFERSUBDATAEXTPROC GetNamedBufferSubDataEXT; + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetNamedFramebufferAttachmentParameteriv; + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC + GetNamedFramebufferAttachmentParameterivEXT; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC GetNamedFramebufferParameterfvAMD; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC GetNamedFramebufferParameteriv; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC GetNamedFramebufferParameterivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC GetNamedProgramLocalParameterIivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC GetNamedProgramLocalParameterIuivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC GetNamedProgramLocalParameterdvEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC GetNamedProgramLocalParameterfvEXT; + PFNGLGETNAMEDPROGRAMSTRINGEXTPROC GetNamedProgramStringEXT; + PFNGLGETNAMEDPROGRAMIVEXTPROC GetNamedProgramivEXT; + PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC GetNamedRenderbufferParameteriv; + PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC GetNamedRenderbufferParameterivEXT; + PFNGLGETNAMEDSTRINGARBPROC GetNamedStringARB; + PFNGLGETNAMEDSTRINGIVARBPROC GetNamedStringivARB; + PFNGLGETNEXTPERFQUERYIDINTELPROC GetNextPerfQueryIdINTEL; + PFNGLGETOBJECTBUFFERFVATIPROC GetObjectBufferfvATI; + PFNGLGETOBJECTBUFFERIVATIPROC GetObjectBufferivATI; + PFNGLGETOBJECTLABELPROC GetObjectLabel; + PFNGLGETOBJECTLABELEXTPROC GetObjectLabelEXT; + PFNGLGETOBJECTPARAMETERFVARBPROC GetObjectParameterfvARB; + PFNGLGETOBJECTPARAMETERIVAPPLEPROC GetObjectParameterivAPPLE; + PFNGLGETOBJECTPARAMETERIVARBPROC GetObjectParameterivARB; + PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; + PFNGLGETOCCLUSIONQUERYIVNVPROC GetOcclusionQueryivNV; + PFNGLGETOCCLUSIONQUERYUIVNVPROC GetOcclusionQueryuivNV; + PFNGLGETPATHCOMMANDSNVPROC GetPathCommandsNV; + PFNGLGETPATHCOORDSNVPROC GetPathCoordsNV; + PFNGLGETPATHDASHARRAYNVPROC GetPathDashArrayNV; + PFNGLGETPATHLENGTHNVPROC GetPathLengthNV; + PFNGLGETPATHMETRICRANGENVPROC GetPathMetricRangeNV; + PFNGLGETPATHMETRICSNVPROC GetPathMetricsNV; + PFNGLGETPATHPARAMETERFVNVPROC GetPathParameterfvNV; + PFNGLGETPATHPARAMETERIVNVPROC GetPathParameterivNV; + PFNGLGETPATHSPACINGNVPROC GetPathSpacingNV; + PFNGLGETPERFCOUNTERINFOINTELPROC GetPerfCounterInfoINTEL; + PFNGLGETPERFMONITORCOUNTERDATAAMDPROC GetPerfMonitorCounterDataAMD; + PFNGLGETPERFMONITORCOUNTERINFOAMDPROC GetPerfMonitorCounterInfoAMD; + PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC GetPerfMonitorCounterStringAMD; + PFNGLGETPERFMONITORCOUNTERSAMDPROC GetPerfMonitorCountersAMD; + PFNGLGETPERFMONITORGROUPSTRINGAMDPROC GetPerfMonitorGroupStringAMD; + PFNGLGETPERFMONITORGROUPSAMDPROC GetPerfMonitorGroupsAMD; + PFNGLGETPERFQUERYDATAINTELPROC GetPerfQueryDataINTEL; + PFNGLGETPERFQUERYIDBYNAMEINTELPROC GetPerfQueryIdByNameINTEL; + PFNGLGETPERFQUERYINFOINTELPROC GetPerfQueryInfoINTEL; + PFNGLGETPIXELMAPXVPROC GetPixelMapxv; + PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC GetPixelTexGenParameterfvSGIS; + PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC GetPixelTexGenParameterivSGIS; + PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC GetPixelTransformParameterfvEXT; + PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC GetPixelTransformParameterivEXT; + PFNGLGETPOINTERINDEXEDVEXTPROC GetPointerIndexedvEXT; + PFNGLGETPOINTERI_VEXTPROC GetPointeri_vEXT; + PFNGLGETPOINTERVPROC GetPointerv; + PFNGLGETPOINTERVEXTPROC GetPointervEXT; + PFNGLGETPROGRAMBINARYPROC GetProgramBinary; + PFNGLGETPROGRAMENVPARAMETERIIVNVPROC GetProgramEnvParameterIivNV; + PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC GetProgramEnvParameterIuivNV; + PFNGLGETPROGRAMENVPARAMETERDVARBPROC GetProgramEnvParameterdvARB; + PFNGLGETPROGRAMENVPARAMETERFVARBPROC GetProgramEnvParameterfvARB; + PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog; + PFNGLGETPROGRAMINTERFACEIVPROC GetProgramInterfaceiv; + PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC GetProgramLocalParameterIivNV; + PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC GetProgramLocalParameterIuivNV; + PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC GetProgramLocalParameterdvARB; + PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC GetProgramLocalParameterfvARB; + PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC GetProgramNamedParameterdvNV; + PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC GetProgramNamedParameterfvNV; + PFNGLGETPROGRAMPARAMETERDVNVPROC GetProgramParameterdvNV; + PFNGLGETPROGRAMPARAMETERFVNVPROC GetProgramParameterfvNV; + PFNGLGETPROGRAMPIPELINEINFOLOGPROC GetProgramPipelineInfoLog; + PFNGLGETPROGRAMPIPELINEIVPROC GetProgramPipelineiv; + PFNGLGETPROGRAMRESOURCEINDEXPROC GetProgramResourceIndex; + PFNGLGETPROGRAMRESOURCELOCATIONPROC GetProgramResourceLocation; + PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC GetProgramResourceLocationIndex; + PFNGLGETPROGRAMRESOURCENAMEPROC GetProgramResourceName; + PFNGLGETPROGRAMRESOURCEFVNVPROC GetProgramResourcefvNV; + PFNGLGETPROGRAMRESOURCEIVPROC GetProgramResourceiv; + PFNGLGETPROGRAMSTAGEIVPROC GetProgramStageiv; + PFNGLGETPROGRAMSTRINGARBPROC GetProgramStringARB; + PFNGLGETPROGRAMSTRINGNVPROC GetProgramStringNV; + PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC GetProgramSubroutineParameteruivNV; + PFNGLGETPROGRAMIVPROC GetProgramiv; + PFNGLGETPROGRAMIVARBPROC GetProgramivARB; + PFNGLGETPROGRAMIVNVPROC GetProgramivNV; + PFNGLGETQUERYBUFFEROBJECTI64VPROC GetQueryBufferObjecti64v; + PFNGLGETQUERYBUFFEROBJECTIVPROC GetQueryBufferObjectiv; + PFNGLGETQUERYBUFFEROBJECTUI64VPROC GetQueryBufferObjectui64v; + PFNGLGETQUERYBUFFEROBJECTUIVPROC GetQueryBufferObjectuiv; + PFNGLGETQUERYINDEXEDIVPROC GetQueryIndexediv; + PFNGLGETQUERYOBJECTI64VPROC GetQueryObjecti64v; + PFNGLGETQUERYOBJECTI64VEXTPROC GetQueryObjecti64vEXT; + PFNGLGETQUERYOBJECTIVPROC GetQueryObjectiv; + PFNGLGETQUERYOBJECTIVARBPROC GetQueryObjectivARB; + PFNGLGETQUERYOBJECTUI64VPROC GetQueryObjectui64v; + PFNGLGETQUERYOBJECTUI64VEXTPROC GetQueryObjectui64vEXT; + PFNGLGETQUERYOBJECTUIVPROC GetQueryObjectuiv; + PFNGLGETQUERYOBJECTUIVARBPROC GetQueryObjectuivARB; + PFNGLGETQUERYIVPROC GetQueryiv; + PFNGLGETQUERYIVARBPROC GetQueryivARB; + PFNGLGETRENDERBUFFERPARAMETERIVPROC GetRenderbufferParameteriv; + PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC GetRenderbufferParameterivEXT; + PFNGLGETSAMPLERPARAMETERIIVPROC GetSamplerParameterIiv; + PFNGLGETSAMPLERPARAMETERIUIVPROC GetSamplerParameterIuiv; + PFNGLGETSAMPLERPARAMETERFVPROC GetSamplerParameterfv; + PFNGLGETSAMPLERPARAMETERIVPROC GetSamplerParameteriv; + PFNGLGETSEMAPHOREPARAMETERIVNVPROC GetSemaphoreParameterivNV; + PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC GetSemaphoreParameterui64vEXT; + PFNGLGETSEPARABLEFILTEREXTPROC GetSeparableFilterEXT; + PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog; + PFNGLGETSHADERPRECISIONFORMATPROC GetShaderPrecisionFormat; + PFNGLGETSHADERSOURCEPROC GetShaderSource; + PFNGLGETSHADERSOURCEARBPROC GetShaderSourceARB; + PFNGLGETSHADERIVPROC GetShaderiv; + PFNGLGETSHADINGRATEIMAGEPALETTENVPROC GetShadingRateImagePaletteNV; + PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC GetShadingRateSampleLocationivNV; + PFNGLGETSHARPENTEXFUNCSGISPROC GetSharpenTexFuncSGIS; + PFNGLGETSTAGEINDEXNVPROC GetStageIndexNV; + PFNGLGETSTRINGPROC GetString; + PFNGLGETSTRINGIPROC GetStringi; + PFNGLGETSUBROUTINEINDEXPROC GetSubroutineIndex; + PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC GetSubroutineUniformLocation; + PFNGLGETSYNCIVPROC GetSynciv; + PFNGLGETTEXBUMPPARAMETERFVATIPROC GetTexBumpParameterfvATI; + PFNGLGETTEXBUMPPARAMETERIVATIPROC GetTexBumpParameterivATI; + PFNGLGETTEXENVXVOESPROC GetTexEnvxvOES; + PFNGLGETTEXFILTERFUNCSGISPROC GetTexFilterFuncSGIS; + PFNGLGETTEXGENXVOESPROC GetTexGenxvOES; + PFNGLGETTEXIMAGEPROC GetTexImage; + PFNGLGETTEXLEVELPARAMETERFVPROC GetTexLevelParameterfv; + PFNGLGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; + PFNGLGETTEXLEVELPARAMETERXVOESPROC GetTexLevelParameterxvOES; + PFNGLGETTEXPARAMETERIIVPROC GetTexParameterIiv; + PFNGLGETTEXPARAMETERIIVEXTPROC GetTexParameterIivEXT; + PFNGLGETTEXPARAMETERIUIVPROC GetTexParameterIuiv; + PFNGLGETTEXPARAMETERIUIVEXTPROC GetTexParameterIuivEXT; + PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC GetTexParameterPointervAPPLE; + PFNGLGETTEXPARAMETERFVPROC GetTexParameterfv; + PFNGLGETTEXPARAMETERIVPROC GetTexParameteriv; + PFNGLGETTEXPARAMETERXVOESPROC GetTexParameterxvOES; + PFNGLGETTEXTUREHANDLEARBPROC GetTextureHandleARB; + PFNGLGETTEXTUREHANDLENVPROC GetTextureHandleNV; + PFNGLGETTEXTUREIMAGEPROC GetTextureImage; + PFNGLGETTEXTUREIMAGEEXTPROC GetTextureImageEXT; + PFNGLGETTEXTURELEVELPARAMETERFVPROC GetTextureLevelParameterfv; + PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC GetTextureLevelParameterfvEXT; + PFNGLGETTEXTURELEVELPARAMETERIVPROC GetTextureLevelParameteriv; + PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC GetTextureLevelParameterivEXT; + PFNGLGETTEXTUREPARAMETERIIVPROC GetTextureParameterIiv; + PFNGLGETTEXTUREPARAMETERIIVEXTPROC GetTextureParameterIivEXT; + PFNGLGETTEXTUREPARAMETERIUIVPROC GetTextureParameterIuiv; + PFNGLGETTEXTUREPARAMETERIUIVEXTPROC GetTextureParameterIuivEXT; + PFNGLGETTEXTUREPARAMETERFVPROC GetTextureParameterfv; + PFNGLGETTEXTUREPARAMETERFVEXTPROC GetTextureParameterfvEXT; + PFNGLGETTEXTUREPARAMETERIVPROC GetTextureParameteriv; + PFNGLGETTEXTUREPARAMETERIVEXTPROC GetTextureParameterivEXT; + PFNGLGETTEXTURESAMPLERHANDLEARBPROC GetTextureSamplerHandleARB; + PFNGLGETTEXTURESAMPLERHANDLENVPROC GetTextureSamplerHandleNV; + PFNGLGETTEXTURESUBIMAGEPROC GetTextureSubImage; + PFNGLGETTRACKMATRIXIVNVPROC GetTrackMatrixivNV; + PFNGLGETTRANSFORMFEEDBACKVARYINGPROC GetTransformFeedbackVarying; + PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC GetTransformFeedbackVaryingEXT; + PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC GetTransformFeedbackVaryingNV; + PFNGLGETTRANSFORMFEEDBACKI64_VPROC GetTransformFeedbacki64_v; + PFNGLGETTRANSFORMFEEDBACKI_VPROC GetTransformFeedbacki_v; + PFNGLGETTRANSFORMFEEDBACKIVPROC GetTransformFeedbackiv; + PFNGLGETUNIFORMBLOCKINDEXPROC GetUniformBlockIndex; + PFNGLGETUNIFORMBUFFERSIZEEXTPROC GetUniformBufferSizeEXT; + PFNGLGETUNIFORMINDICESPROC GetUniformIndices; + PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation; + PFNGLGETUNIFORMLOCATIONARBPROC GetUniformLocationARB; + PFNGLGETUNIFORMOFFSETEXTPROC GetUniformOffsetEXT; + PFNGLGETUNIFORMSUBROUTINEUIVPROC GetUniformSubroutineuiv; + PFNGLGETUNIFORMDVPROC GetUniformdv; + PFNGLGETUNIFORMFVPROC GetUniformfv; + PFNGLGETUNIFORMFVARBPROC GetUniformfvARB; + PFNGLGETUNIFORMI64VARBPROC GetUniformi64vARB; + PFNGLGETUNIFORMI64VNVPROC GetUniformi64vNV; + PFNGLGETUNIFORMIVPROC GetUniformiv; + PFNGLGETUNIFORMIVARBPROC GetUniformivARB; + PFNGLGETUNIFORMUI64VARBPROC GetUniformui64vARB; + PFNGLGETUNIFORMUI64VNVPROC GetUniformui64vNV; + PFNGLGETUNIFORMUIVPROC GetUniformuiv; + PFNGLGETUNIFORMUIVEXTPROC GetUniformuivEXT; + PFNGLGETUNSIGNEDBYTEI_VEXTPROC GetUnsignedBytei_vEXT; + PFNGLGETUNSIGNEDBYTEVEXTPROC GetUnsignedBytevEXT; + PFNGLGETVARIANTARRAYOBJECTFVATIPROC GetVariantArrayObjectfvATI; + PFNGLGETVARIANTARRAYOBJECTIVATIPROC GetVariantArrayObjectivATI; + PFNGLGETVARIANTBOOLEANVEXTPROC GetVariantBooleanvEXT; + PFNGLGETVARIANTFLOATVEXTPROC GetVariantFloatvEXT; + PFNGLGETVARIANTINTEGERVEXTPROC GetVariantIntegervEXT; + PFNGLGETVARIANTPOINTERVEXTPROC GetVariantPointervEXT; + PFNGLGETVARYINGLOCATIONNVPROC GetVaryingLocationNV; + PFNGLGETVERTEXARRAYINDEXED64IVPROC GetVertexArrayIndexed64iv; + PFNGLGETVERTEXARRAYINDEXEDIVPROC GetVertexArrayIndexediv; + PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC GetVertexArrayIntegeri_vEXT; + PFNGLGETVERTEXARRAYINTEGERVEXTPROC GetVertexArrayIntegervEXT; + PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC GetVertexArrayPointeri_vEXT; + PFNGLGETVERTEXARRAYPOINTERVEXTPROC GetVertexArrayPointervEXT; + PFNGLGETVERTEXARRAYIVPROC GetVertexArrayiv; + PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC GetVertexAttribArrayObjectfvATI; + PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC GetVertexAttribArrayObjectivATI; + PFNGLGETVERTEXATTRIBIIVPROC GetVertexAttribIiv; + PFNGLGETVERTEXATTRIBIIVEXTPROC GetVertexAttribIivEXT; + PFNGLGETVERTEXATTRIBIUIVPROC GetVertexAttribIuiv; + PFNGLGETVERTEXATTRIBIUIVEXTPROC GetVertexAttribIuivEXT; + PFNGLGETVERTEXATTRIBLDVPROC GetVertexAttribLdv; + PFNGLGETVERTEXATTRIBLDVEXTPROC GetVertexAttribLdvEXT; + PFNGLGETVERTEXATTRIBLI64VNVPROC GetVertexAttribLi64vNV; + PFNGLGETVERTEXATTRIBLUI64VARBPROC GetVertexAttribLui64vARB; + PFNGLGETVERTEXATTRIBLUI64VNVPROC GetVertexAttribLui64vNV; + PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv; + PFNGLGETVERTEXATTRIBPOINTERVARBPROC GetVertexAttribPointervARB; + PFNGLGETVERTEXATTRIBPOINTERVNVPROC GetVertexAttribPointervNV; + PFNGLGETVERTEXATTRIBDVPROC GetVertexAttribdv; + PFNGLGETVERTEXATTRIBDVARBPROC GetVertexAttribdvARB; + PFNGLGETVERTEXATTRIBDVNVPROC GetVertexAttribdvNV; + PFNGLGETVERTEXATTRIBFVPROC GetVertexAttribfv; + PFNGLGETVERTEXATTRIBFVARBPROC GetVertexAttribfvARB; + PFNGLGETVERTEXATTRIBFVNVPROC GetVertexAttribfvNV; + PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv; + PFNGLGETVERTEXATTRIBIVARBPROC GetVertexAttribivARB; + PFNGLGETVERTEXATTRIBIVNVPROC GetVertexAttribivNV; + PFNGLGETVIDEOCAPTURESTREAMDVNVPROC GetVideoCaptureStreamdvNV; + PFNGLGETVIDEOCAPTURESTREAMFVNVPROC GetVideoCaptureStreamfvNV; + PFNGLGETVIDEOCAPTURESTREAMIVNVPROC GetVideoCaptureStreamivNV; + PFNGLGETVIDEOCAPTUREIVNVPROC GetVideoCaptureivNV; + PFNGLGETVIDEOI64VNVPROC GetVideoi64vNV; + PFNGLGETVIDEOIVNVPROC GetVideoivNV; + PFNGLGETVIDEOUI64VNVPROC GetVideoui64vNV; + PFNGLGETVIDEOUIVNVPROC GetVideouivNV; + PFNGLGETVKPROCADDRNVPROC GetVkProcAddrNV; + PFNGLGETNCOMPRESSEDTEXIMAGEPROC GetnCompressedTexImage; + PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC GetnCompressedTexImageARB; + PFNGLGETNTEXIMAGEPROC GetnTexImage; + PFNGLGETNTEXIMAGEARBPROC GetnTexImageARB; + PFNGLGETNUNIFORMDVPROC GetnUniformdv; + PFNGLGETNUNIFORMDVARBPROC GetnUniformdvARB; + PFNGLGETNUNIFORMFVPROC GetnUniformfv; + PFNGLGETNUNIFORMFVARBPROC GetnUniformfvARB; + PFNGLGETNUNIFORMI64VARBPROC GetnUniformi64vARB; + PFNGLGETNUNIFORMIVPROC GetnUniformiv; + PFNGLGETNUNIFORMIVARBPROC GetnUniformivARB; + PFNGLGETNUNIFORMUI64VARBPROC GetnUniformui64vARB; + PFNGLGETNUNIFORMUIVPROC GetnUniformuiv; + PFNGLGETNUNIFORMUIVARBPROC GetnUniformuivARB; + PFNGLGLOBALALPHAFACTORBSUNPROC GlobalAlphaFactorbSUN; + PFNGLGLOBALALPHAFACTORDSUNPROC GlobalAlphaFactordSUN; + PFNGLGLOBALALPHAFACTORFSUNPROC GlobalAlphaFactorfSUN; + PFNGLGLOBALALPHAFACTORISUNPROC GlobalAlphaFactoriSUN; + PFNGLGLOBALALPHAFACTORSSUNPROC GlobalAlphaFactorsSUN; + PFNGLGLOBALALPHAFACTORUBSUNPROC GlobalAlphaFactorubSUN; + PFNGLGLOBALALPHAFACTORUISUNPROC GlobalAlphaFactoruiSUN; + PFNGLGLOBALALPHAFACTORUSSUNPROC GlobalAlphaFactorusSUN; + PFNGLHINTPROC Hint; + PFNGLHINTPGIPROC HintPGI; + PFNGLHISTOGRAMEXTPROC HistogramEXT; + PFNGLIGLOOINTERFACESGIXPROC IglooInterfaceSGIX; + PFNGLIMAGETRANSFORMPARAMETERFHPPROC ImageTransformParameterfHP; + PFNGLIMAGETRANSFORMPARAMETERFVHPPROC ImageTransformParameterfvHP; + PFNGLIMAGETRANSFORMPARAMETERIHPPROC ImageTransformParameteriHP; + PFNGLIMAGETRANSFORMPARAMETERIVHPPROC ImageTransformParameterivHP; + PFNGLIMPORTMEMORYFDEXTPROC ImportMemoryFdEXT; + PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC ImportMemoryWin32HandleEXT; + PFNGLIMPORTMEMORYWIN32NAMEEXTPROC ImportMemoryWin32NameEXT; + PFNGLIMPORTSEMAPHOREFDEXTPROC ImportSemaphoreFdEXT; + PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC ImportSemaphoreWin32HandleEXT; + PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC ImportSemaphoreWin32NameEXT; + PFNGLIMPORTSYNCEXTPROC ImportSyncEXT; + PFNGLINDEXFORMATNVPROC IndexFormatNV; + PFNGLINDEXFUNCEXTPROC IndexFuncEXT; + PFNGLINDEXMATERIALEXTPROC IndexMaterialEXT; + PFNGLINDEXPOINTEREXTPROC IndexPointerEXT; + PFNGLINDEXPOINTERLISTIBMPROC IndexPointerListIBM; + PFNGLINDEXXOESPROC IndexxOES; + PFNGLINDEXXVOESPROC IndexxvOES; + PFNGLINSERTCOMPONENTEXTPROC InsertComponentEXT; + PFNGLINSERTEVENTMARKEREXTPROC InsertEventMarkerEXT; + PFNGLINSTRUMENTSBUFFERSGIXPROC InstrumentsBufferSGIX; + PFNGLINTERPOLATEPATHSNVPROC InterpolatePathsNV; + PFNGLINVALIDATEBUFFERDATAPROC InvalidateBufferData; + PFNGLINVALIDATEBUFFERSUBDATAPROC InvalidateBufferSubData; + PFNGLINVALIDATEFRAMEBUFFERPROC InvalidateFramebuffer; + PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC InvalidateNamedFramebufferData; + PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC InvalidateNamedFramebufferSubData; + PFNGLINVALIDATESUBFRAMEBUFFERPROC InvalidateSubFramebuffer; + PFNGLINVALIDATETEXIMAGEPROC InvalidateTexImage; + PFNGLINVALIDATETEXSUBIMAGEPROC InvalidateTexSubImage; + PFNGLISASYNCMARKERSGIXPROC IsAsyncMarkerSGIX; + PFNGLISBUFFERPROC IsBuffer; + PFNGLISBUFFERARBPROC IsBufferARB; + PFNGLISBUFFERRESIDENTNVPROC IsBufferResidentNV; + PFNGLISCOMMANDLISTNVPROC IsCommandListNV; + PFNGLISENABLEDPROC IsEnabled; + PFNGLISENABLEDINDEXEDEXTPROC IsEnabledIndexedEXT; + PFNGLISENABLEDIPROC IsEnabledi; + PFNGLISFENCEAPPLEPROC IsFenceAPPLE; + PFNGLISFENCENVPROC IsFenceNV; + PFNGLISFRAMEBUFFERPROC IsFramebuffer; + PFNGLISFRAMEBUFFEREXTPROC IsFramebufferEXT; + PFNGLISIMAGEHANDLERESIDENTARBPROC IsImageHandleResidentARB; + PFNGLISIMAGEHANDLERESIDENTNVPROC IsImageHandleResidentNV; + PFNGLISMEMORYOBJECTEXTPROC IsMemoryObjectEXT; + PFNGLISNAMEAMDPROC IsNameAMD; + PFNGLISNAMEDBUFFERRESIDENTNVPROC IsNamedBufferResidentNV; + PFNGLISNAMEDSTRINGARBPROC IsNamedStringARB; + PFNGLISOBJECTBUFFERATIPROC IsObjectBufferATI; + PFNGLISOCCLUSIONQUERYNVPROC IsOcclusionQueryNV; + PFNGLISPATHNVPROC IsPathNV; + PFNGLISPOINTINFILLPATHNVPROC IsPointInFillPathNV; + PFNGLISPOINTINSTROKEPATHNVPROC IsPointInStrokePathNV; + PFNGLISPROGRAMPROC IsProgram; + PFNGLISPROGRAMARBPROC IsProgramARB; + PFNGLISPROGRAMNVPROC IsProgramNV; + PFNGLISPROGRAMPIPELINEPROC IsProgramPipeline; + PFNGLISQUERYPROC IsQuery; + PFNGLISQUERYARBPROC IsQueryARB; + PFNGLISRENDERBUFFERPROC IsRenderbuffer; + PFNGLISRENDERBUFFEREXTPROC IsRenderbufferEXT; + PFNGLISSAMPLERPROC IsSampler; + PFNGLISSEMAPHOREEXTPROC IsSemaphoreEXT; + PFNGLISSHADERPROC IsShader; + PFNGLISSTATENVPROC IsStateNV; + PFNGLISSYNCPROC IsSync; + PFNGLISTEXTUREPROC IsTexture; + PFNGLISTEXTUREEXTPROC IsTextureEXT; + PFNGLISTEXTUREHANDLERESIDENTARBPROC IsTextureHandleResidentARB; + PFNGLISTEXTUREHANDLERESIDENTNVPROC IsTextureHandleResidentNV; + PFNGLISTRANSFORMFEEDBACKPROC IsTransformFeedback; + PFNGLISTRANSFORMFEEDBACKNVPROC IsTransformFeedbackNV; + PFNGLISVARIANTENABLEDEXTPROC IsVariantEnabledEXT; + PFNGLISVERTEXARRAYPROC IsVertexArray; + PFNGLISVERTEXARRAYAPPLEPROC IsVertexArrayAPPLE; + PFNGLISVERTEXATTRIBENABLEDAPPLEPROC IsVertexAttribEnabledAPPLE; + PFNGLLGPUCOPYIMAGESUBDATANVXPROC LGPUCopyImageSubDataNVX; + PFNGLLGPUINTERLOCKNVXPROC LGPUInterlockNVX; + PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC LGPUNamedBufferSubDataNVX; + PFNGLLABELOBJECTEXTPROC LabelObjectEXT; + PFNGLLIGHTENVISGIXPROC LightEnviSGIX; + PFNGLLIGHTMODELXOESPROC LightModelxOES; + PFNGLLIGHTMODELXVOESPROC LightModelxvOES; + PFNGLLIGHTXOESPROC LightxOES; + PFNGLLIGHTXVOESPROC LightxvOES; + PFNGLLINEWIDTHPROC LineWidth; + PFNGLLINEWIDTHXOESPROC LineWidthxOES; + PFNGLLINKPROGRAMPROC LinkProgram; + PFNGLLINKPROGRAMARBPROC LinkProgramARB; + PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC ListDrawCommandsStatesClientNV; + PFNGLLISTPARAMETERFSGIXPROC ListParameterfSGIX; + PFNGLLISTPARAMETERFVSGIXPROC ListParameterfvSGIX; + PFNGLLISTPARAMETERISGIXPROC ListParameteriSGIX; + PFNGLLISTPARAMETERIVSGIXPROC ListParameterivSGIX; + PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC LoadIdentityDeformationMapSGIX; + PFNGLLOADMATRIXXOESPROC LoadMatrixxOES; + PFNGLLOADPROGRAMNVPROC LoadProgramNV; + PFNGLLOADTRANSPOSEMATRIXDARBPROC LoadTransposeMatrixdARB; + PFNGLLOADTRANSPOSEMATRIXFARBPROC LoadTransposeMatrixfARB; + PFNGLLOADTRANSPOSEMATRIXXOESPROC LoadTransposeMatrixxOES; + PFNGLLOCKARRAYSEXTPROC LockArraysEXT; + PFNGLLOGICOPPROC LogicOp; + PFNGLMAKEBUFFERNONRESIDENTNVPROC MakeBufferNonResidentNV; + PFNGLMAKEBUFFERRESIDENTNVPROC MakeBufferResidentNV; + PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC MakeImageHandleNonResidentARB; + PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC MakeImageHandleNonResidentNV; + PFNGLMAKEIMAGEHANDLERESIDENTARBPROC MakeImageHandleResidentARB; + PFNGLMAKEIMAGEHANDLERESIDENTNVPROC MakeImageHandleResidentNV; + PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC MakeNamedBufferNonResidentNV; + PFNGLMAKENAMEDBUFFERRESIDENTNVPROC MakeNamedBufferResidentNV; + PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC MakeTextureHandleNonResidentARB; + PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC MakeTextureHandleNonResidentNV; + PFNGLMAKETEXTUREHANDLERESIDENTARBPROC MakeTextureHandleResidentARB; + PFNGLMAKETEXTUREHANDLERESIDENTNVPROC MakeTextureHandleResidentNV; + PFNGLMAP1XOESPROC Map1xOES; + PFNGLMAP2XOESPROC Map2xOES; + PFNGLMAPBUFFERPROC MapBuffer; + PFNGLMAPBUFFERARBPROC MapBufferARB; + PFNGLMAPBUFFERRANGEPROC MapBufferRange; + PFNGLMAPCONTROLPOINTSNVPROC MapControlPointsNV; + PFNGLMAPGRID1XOESPROC MapGrid1xOES; + PFNGLMAPGRID2XOESPROC MapGrid2xOES; + PFNGLMAPNAMEDBUFFERPROC MapNamedBuffer; + PFNGLMAPNAMEDBUFFEREXTPROC MapNamedBufferEXT; + PFNGLMAPNAMEDBUFFERRANGEPROC MapNamedBufferRange; + PFNGLMAPNAMEDBUFFERRANGEEXTPROC MapNamedBufferRangeEXT; + PFNGLMAPOBJECTBUFFERATIPROC MapObjectBufferATI; + PFNGLMAPPARAMETERFVNVPROC MapParameterfvNV; + PFNGLMAPPARAMETERIVNVPROC MapParameterivNV; + PFNGLMAPTEXTURE2DINTELPROC MapTexture2DINTEL; + PFNGLMAPVERTEXATTRIB1DAPPLEPROC MapVertexAttrib1dAPPLE; + PFNGLMAPVERTEXATTRIB1FAPPLEPROC MapVertexAttrib1fAPPLE; + PFNGLMAPVERTEXATTRIB2DAPPLEPROC MapVertexAttrib2dAPPLE; + PFNGLMAPVERTEXATTRIB2FAPPLEPROC MapVertexAttrib2fAPPLE; + PFNGLMATERIALXOESPROC MaterialxOES; + PFNGLMATERIALXVOESPROC MaterialxvOES; + PFNGLMATRIXFRUSTUMEXTPROC MatrixFrustumEXT; + PFNGLMATRIXINDEXPOINTERARBPROC MatrixIndexPointerARB; + PFNGLMATRIXINDEXUBVARBPROC MatrixIndexubvARB; + PFNGLMATRIXINDEXUIVARBPROC MatrixIndexuivARB; + PFNGLMATRIXINDEXUSVARBPROC MatrixIndexusvARB; + PFNGLMATRIXLOAD3X2FNVPROC MatrixLoad3x2fNV; + PFNGLMATRIXLOAD3X3FNVPROC MatrixLoad3x3fNV; + PFNGLMATRIXLOADIDENTITYEXTPROC MatrixLoadIdentityEXT; + PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC MatrixLoadTranspose3x3fNV; + PFNGLMATRIXLOADTRANSPOSEDEXTPROC MatrixLoadTransposedEXT; + PFNGLMATRIXLOADTRANSPOSEFEXTPROC MatrixLoadTransposefEXT; + PFNGLMATRIXLOADDEXTPROC MatrixLoaddEXT; + PFNGLMATRIXLOADFEXTPROC MatrixLoadfEXT; + PFNGLMATRIXMULT3X2FNVPROC MatrixMult3x2fNV; + PFNGLMATRIXMULT3X3FNVPROC MatrixMult3x3fNV; + PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC MatrixMultTranspose3x3fNV; + PFNGLMATRIXMULTTRANSPOSEDEXTPROC MatrixMultTransposedEXT; + PFNGLMATRIXMULTTRANSPOSEFEXTPROC MatrixMultTransposefEXT; + PFNGLMATRIXMULTDEXTPROC MatrixMultdEXT; + PFNGLMATRIXMULTFEXTPROC MatrixMultfEXT; + PFNGLMATRIXORTHOEXTPROC MatrixOrthoEXT; + PFNGLMATRIXPOPEXTPROC MatrixPopEXT; + PFNGLMATRIXPUSHEXTPROC MatrixPushEXT; + PFNGLMATRIXROTATEDEXTPROC MatrixRotatedEXT; + PFNGLMATRIXROTATEFEXTPROC MatrixRotatefEXT; + PFNGLMATRIXSCALEDEXTPROC MatrixScaledEXT; + PFNGLMATRIXSCALEFEXTPROC MatrixScalefEXT; + PFNGLMATRIXTRANSLATEDEXTPROC MatrixTranslatedEXT; + PFNGLMATRIXTRANSLATEFEXTPROC MatrixTranslatefEXT; + PFNGLMAXSHADERCOMPILERTHREADSARBPROC MaxShaderCompilerThreadsARB; + PFNGLMAXSHADERCOMPILERTHREADSKHRPROC MaxShaderCompilerThreadsKHR; + PFNGLMEMORYBARRIERPROC MemoryBarrier; + PFNGLMEMORYBARRIERBYREGIONPROC MemoryBarrierByRegion; + PFNGLMEMORYBARRIEREXTPROC MemoryBarrierEXT; + PFNGLMEMORYOBJECTPARAMETERIVEXTPROC MemoryObjectParameterivEXT; + PFNGLMINSAMPLESHADINGPROC MinSampleShading; + PFNGLMINSAMPLESHADINGARBPROC MinSampleShadingARB; + PFNGLMINMAXEXTPROC MinmaxEXT; + PFNGLMULTMATRIXXOESPROC MultMatrixxOES; + PFNGLMULTTRANSPOSEMATRIXDARBPROC MultTransposeMatrixdARB; + PFNGLMULTTRANSPOSEMATRIXFARBPROC MultTransposeMatrixfARB; + PFNGLMULTTRANSPOSEMATRIXXOESPROC MultTransposeMatrixxOES; + PFNGLMULTIDRAWARRAYSPROC MultiDrawArrays; + PFNGLMULTIDRAWARRAYSEXTPROC MultiDrawArraysEXT; + PFNGLMULTIDRAWARRAYSINDIRECTPROC MultiDrawArraysIndirect; + PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC MultiDrawArraysIndirectAMD; + PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC MultiDrawArraysIndirectBindlessCountNV; + PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC MultiDrawArraysIndirectBindlessNV; + PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC MultiDrawArraysIndirectCount; + PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC MultiDrawArraysIndirectCountARB; + PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC MultiDrawElementArrayAPPLE; + PFNGLMULTIDRAWELEMENTSPROC MultiDrawElements; + PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC MultiDrawElementsBaseVertex; + PFNGLMULTIDRAWELEMENTSEXTPROC MultiDrawElementsEXT; + PFNGLMULTIDRAWELEMENTSINDIRECTPROC MultiDrawElementsIndirect; + PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC MultiDrawElementsIndirectAMD; + PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC MultiDrawElementsIndirectBindlessCountNV; + PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC MultiDrawElementsIndirectBindlessNV; + PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC MultiDrawElementsIndirectCount; + PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC MultiDrawElementsIndirectCountARB; + PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC MultiDrawMeshTasksIndirectCountNV; + PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC MultiDrawMeshTasksIndirectNV; + PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC MultiDrawRangeElementArrayAPPLE; + PFNGLMULTIMODEDRAWARRAYSIBMPROC MultiModeDrawArraysIBM; + PFNGLMULTIMODEDRAWELEMENTSIBMPROC MultiModeDrawElementsIBM; + PFNGLMULTITEXBUFFEREXTPROC MultiTexBufferEXT; + PFNGLMULTITEXCOORD1BOESPROC MultiTexCoord1bOES; + PFNGLMULTITEXCOORD1BVOESPROC MultiTexCoord1bvOES; + PFNGLMULTITEXCOORD1DARBPROC MultiTexCoord1dARB; + PFNGLMULTITEXCOORD1DVARBPROC MultiTexCoord1dvARB; + PFNGLMULTITEXCOORD1FARBPROC MultiTexCoord1fARB; + PFNGLMULTITEXCOORD1FVARBPROC MultiTexCoord1fvARB; + PFNGLMULTITEXCOORD1HNVPROC MultiTexCoord1hNV; + PFNGLMULTITEXCOORD1HVNVPROC MultiTexCoord1hvNV; + PFNGLMULTITEXCOORD1IARBPROC MultiTexCoord1iARB; + PFNGLMULTITEXCOORD1IVARBPROC MultiTexCoord1ivARB; + PFNGLMULTITEXCOORD1SARBPROC MultiTexCoord1sARB; + PFNGLMULTITEXCOORD1SVARBPROC MultiTexCoord1svARB; + PFNGLMULTITEXCOORD1XOESPROC MultiTexCoord1xOES; + PFNGLMULTITEXCOORD1XVOESPROC MultiTexCoord1xvOES; + PFNGLMULTITEXCOORD2BOESPROC MultiTexCoord2bOES; + PFNGLMULTITEXCOORD2BVOESPROC MultiTexCoord2bvOES; + PFNGLMULTITEXCOORD2DARBPROC MultiTexCoord2dARB; + PFNGLMULTITEXCOORD2DVARBPROC MultiTexCoord2dvARB; + PFNGLMULTITEXCOORD2FARBPROC MultiTexCoord2fARB; + PFNGLMULTITEXCOORD2FVARBPROC MultiTexCoord2fvARB; + PFNGLMULTITEXCOORD2HNVPROC MultiTexCoord2hNV; + PFNGLMULTITEXCOORD2HVNVPROC MultiTexCoord2hvNV; + PFNGLMULTITEXCOORD2IARBPROC MultiTexCoord2iARB; + PFNGLMULTITEXCOORD2IVARBPROC MultiTexCoord2ivARB; + PFNGLMULTITEXCOORD2SARBPROC MultiTexCoord2sARB; + PFNGLMULTITEXCOORD2SVARBPROC MultiTexCoord2svARB; + PFNGLMULTITEXCOORD2XOESPROC MultiTexCoord2xOES; + PFNGLMULTITEXCOORD2XVOESPROC MultiTexCoord2xvOES; + PFNGLMULTITEXCOORD3BOESPROC MultiTexCoord3bOES; + PFNGLMULTITEXCOORD3BVOESPROC MultiTexCoord3bvOES; + PFNGLMULTITEXCOORD3DARBPROC MultiTexCoord3dARB; + PFNGLMULTITEXCOORD3DVARBPROC MultiTexCoord3dvARB; + PFNGLMULTITEXCOORD3FARBPROC MultiTexCoord3fARB; + PFNGLMULTITEXCOORD3FVARBPROC MultiTexCoord3fvARB; + PFNGLMULTITEXCOORD3HNVPROC MultiTexCoord3hNV; + PFNGLMULTITEXCOORD3HVNVPROC MultiTexCoord3hvNV; + PFNGLMULTITEXCOORD3IARBPROC MultiTexCoord3iARB; + PFNGLMULTITEXCOORD3IVARBPROC MultiTexCoord3ivARB; + PFNGLMULTITEXCOORD3SARBPROC MultiTexCoord3sARB; + PFNGLMULTITEXCOORD3SVARBPROC MultiTexCoord3svARB; + PFNGLMULTITEXCOORD3XOESPROC MultiTexCoord3xOES; + PFNGLMULTITEXCOORD3XVOESPROC MultiTexCoord3xvOES; + PFNGLMULTITEXCOORD4BOESPROC MultiTexCoord4bOES; + PFNGLMULTITEXCOORD4BVOESPROC MultiTexCoord4bvOES; + PFNGLMULTITEXCOORD4DARBPROC MultiTexCoord4dARB; + PFNGLMULTITEXCOORD4DVARBPROC MultiTexCoord4dvARB; + PFNGLMULTITEXCOORD4FARBPROC MultiTexCoord4fARB; + PFNGLMULTITEXCOORD4FVARBPROC MultiTexCoord4fvARB; + PFNGLMULTITEXCOORD4HNVPROC MultiTexCoord4hNV; + PFNGLMULTITEXCOORD4HVNVPROC MultiTexCoord4hvNV; + PFNGLMULTITEXCOORD4IARBPROC MultiTexCoord4iARB; + PFNGLMULTITEXCOORD4IVARBPROC MultiTexCoord4ivARB; + PFNGLMULTITEXCOORD4SARBPROC MultiTexCoord4sARB; + PFNGLMULTITEXCOORD4SVARBPROC MultiTexCoord4svARB; + PFNGLMULTITEXCOORD4XOESPROC MultiTexCoord4xOES; + PFNGLMULTITEXCOORD4XVOESPROC MultiTexCoord4xvOES; + PFNGLMULTITEXCOORDPOINTEREXTPROC MultiTexCoordPointerEXT; + PFNGLMULTITEXENVFEXTPROC MultiTexEnvfEXT; + PFNGLMULTITEXENVFVEXTPROC MultiTexEnvfvEXT; + PFNGLMULTITEXENVIEXTPROC MultiTexEnviEXT; + PFNGLMULTITEXENVIVEXTPROC MultiTexEnvivEXT; + PFNGLMULTITEXGENDEXTPROC MultiTexGendEXT; + PFNGLMULTITEXGENDVEXTPROC MultiTexGendvEXT; + PFNGLMULTITEXGENFEXTPROC MultiTexGenfEXT; + PFNGLMULTITEXGENFVEXTPROC MultiTexGenfvEXT; + PFNGLMULTITEXGENIEXTPROC MultiTexGeniEXT; + PFNGLMULTITEXGENIVEXTPROC MultiTexGenivEXT; + PFNGLMULTITEXIMAGE1DEXTPROC MultiTexImage1DEXT; + PFNGLMULTITEXIMAGE2DEXTPROC MultiTexImage2DEXT; + PFNGLMULTITEXIMAGE3DEXTPROC MultiTexImage3DEXT; + PFNGLMULTITEXPARAMETERIIVEXTPROC MultiTexParameterIivEXT; + PFNGLMULTITEXPARAMETERIUIVEXTPROC MultiTexParameterIuivEXT; + PFNGLMULTITEXPARAMETERFEXTPROC MultiTexParameterfEXT; + PFNGLMULTITEXPARAMETERFVEXTPROC MultiTexParameterfvEXT; + PFNGLMULTITEXPARAMETERIEXTPROC MultiTexParameteriEXT; + PFNGLMULTITEXPARAMETERIVEXTPROC MultiTexParameterivEXT; + PFNGLMULTITEXRENDERBUFFEREXTPROC MultiTexRenderbufferEXT; + PFNGLMULTITEXSUBIMAGE1DEXTPROC MultiTexSubImage1DEXT; + PFNGLMULTITEXSUBIMAGE2DEXTPROC MultiTexSubImage2DEXT; + PFNGLMULTITEXSUBIMAGE3DEXTPROC MultiTexSubImage3DEXT; + PFNGLMULTICASTBARRIERNVPROC MulticastBarrierNV; + PFNGLMULTICASTBLITFRAMEBUFFERNVPROC MulticastBlitFramebufferNV; + PFNGLMULTICASTBUFFERSUBDATANVPROC MulticastBufferSubDataNV; + PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC MulticastCopyBufferSubDataNV; + PFNGLMULTICASTCOPYIMAGESUBDATANVPROC MulticastCopyImageSubDataNV; + PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC MulticastFramebufferSampleLocationsfvNV; + PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC MulticastGetQueryObjecti64vNV; + PFNGLMULTICASTGETQUERYOBJECTIVNVPROC MulticastGetQueryObjectivNV; + PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC MulticastGetQueryObjectui64vNV; + PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC MulticastGetQueryObjectuivNV; + PFNGLMULTICASTSCISSORARRAYVNVXPROC MulticastScissorArrayvNVX; + PFNGLMULTICASTVIEWPORTARRAYVNVXPROC MulticastViewportArrayvNVX; + PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC MulticastViewportPositionWScaleNVX; + PFNGLMULTICASTWAITSYNCNVPROC MulticastWaitSyncNV; + PFNGLNAMEDBUFFERATTACHMEMORYNVPROC NamedBufferAttachMemoryNV; + PFNGLNAMEDBUFFERDATAPROC NamedBufferData; + PFNGLNAMEDBUFFERDATAEXTPROC NamedBufferDataEXT; + PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC NamedBufferPageCommitmentARB; + PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC NamedBufferPageCommitmentEXT; + PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC NamedBufferPageCommitmentMemNV; + PFNGLNAMEDBUFFERSTORAGEPROC NamedBufferStorage; + PFNGLNAMEDBUFFERSTORAGEEXTPROC NamedBufferStorageEXT; + PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC NamedBufferStorageExternalEXT; + PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC NamedBufferStorageMemEXT; + PFNGLNAMEDBUFFERSUBDATAPROC NamedBufferSubData; + PFNGLNAMEDBUFFERSUBDATAEXTPROC NamedBufferSubDataEXT; + PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC NamedCopyBufferSubDataEXT; + PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC NamedFramebufferDrawBuffer; + PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC NamedFramebufferDrawBuffers; + PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC NamedFramebufferParameteri; + PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC NamedFramebufferParameteriEXT; + PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC NamedFramebufferReadBuffer; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC NamedFramebufferRenderbuffer; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC NamedFramebufferRenderbufferEXT; + PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC NamedFramebufferSampleLocationsfvARB; + PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC NamedFramebufferSampleLocationsfvNV; + PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC NamedFramebufferSamplePositionsfvAMD; + PFNGLNAMEDFRAMEBUFFERTEXTUREPROC NamedFramebufferTexture; + PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC NamedFramebufferTexture1DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC NamedFramebufferTexture2DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC NamedFramebufferTexture3DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC NamedFramebufferTextureEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC NamedFramebufferTextureFaceEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC NamedFramebufferTextureLayer; + PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC NamedFramebufferTextureLayerEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC NamedProgramLocalParameter4dEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC NamedProgramLocalParameter4dvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC NamedProgramLocalParameter4fEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC NamedProgramLocalParameter4fvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC NamedProgramLocalParameterI4iEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC NamedProgramLocalParameterI4ivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC NamedProgramLocalParameterI4uiEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC NamedProgramLocalParameterI4uivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC NamedProgramLocalParameters4fvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC NamedProgramLocalParametersI4ivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC NamedProgramLocalParametersI4uivEXT; + PFNGLNAMEDPROGRAMSTRINGEXTPROC NamedProgramStringEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEPROC NamedRenderbufferStorage; + PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC NamedRenderbufferStorageEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC NamedRenderbufferStorageMultisample; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC + NamedRenderbufferStorageMultisampleAdvancedAMD; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC + NamedRenderbufferStorageMultisampleCoverageEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC NamedRenderbufferStorageMultisampleEXT; + PFNGLNAMEDSTRINGARBPROC NamedStringARB; + PFNGLNEWOBJECTBUFFERATIPROC NewObjectBufferATI; + PFNGLNORMAL3FVERTEX3FSUNPROC Normal3fVertex3fSUN; + PFNGLNORMAL3FVERTEX3FVSUNPROC Normal3fVertex3fvSUN; + PFNGLNORMAL3HNVPROC Normal3hNV; + PFNGLNORMAL3HVNVPROC Normal3hvNV; + PFNGLNORMAL3XOESPROC Normal3xOES; + PFNGLNORMAL3XVOESPROC Normal3xvOES; + PFNGLNORMALFORMATNVPROC NormalFormatNV; + PFNGLNORMALPOINTEREXTPROC NormalPointerEXT; + PFNGLNORMALPOINTERLISTIBMPROC NormalPointerListIBM; + PFNGLNORMALPOINTERVINTELPROC NormalPointervINTEL; + PFNGLNORMALSTREAM3BATIPROC NormalStream3bATI; + PFNGLNORMALSTREAM3BVATIPROC NormalStream3bvATI; + PFNGLNORMALSTREAM3DATIPROC NormalStream3dATI; + PFNGLNORMALSTREAM3DVATIPROC NormalStream3dvATI; + PFNGLNORMALSTREAM3FATIPROC NormalStream3fATI; + PFNGLNORMALSTREAM3FVATIPROC NormalStream3fvATI; + PFNGLNORMALSTREAM3IATIPROC NormalStream3iATI; + PFNGLNORMALSTREAM3IVATIPROC NormalStream3ivATI; + PFNGLNORMALSTREAM3SATIPROC NormalStream3sATI; + PFNGLNORMALSTREAM3SVATIPROC NormalStream3svATI; + PFNGLOBJECTLABELPROC ObjectLabel; + PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; + PFNGLOBJECTPURGEABLEAPPLEPROC ObjectPurgeableAPPLE; + PFNGLOBJECTUNPURGEABLEAPPLEPROC ObjectUnpurgeableAPPLE; + PFNGLORTHOFOESPROC OrthofOES; + PFNGLORTHOXOESPROC OrthoxOES; + PFNGLPNTRIANGLESFATIPROC PNTrianglesfATI; + PFNGLPNTRIANGLESIATIPROC PNTrianglesiATI; + PFNGLPASSTEXCOORDATIPROC PassTexCoordATI; + PFNGLPASSTHROUGHXOESPROC PassThroughxOES; + PFNGLPATCHPARAMETERFVPROC PatchParameterfv; + PFNGLPATCHPARAMETERIPROC PatchParameteri; + PFNGLPATHCOMMANDSNVPROC PathCommandsNV; + PFNGLPATHCOORDSNVPROC PathCoordsNV; + PFNGLPATHCOVERDEPTHFUNCNVPROC PathCoverDepthFuncNV; + PFNGLPATHDASHARRAYNVPROC PathDashArrayNV; + PFNGLPATHGLYPHINDEXARRAYNVPROC PathGlyphIndexArrayNV; + PFNGLPATHGLYPHINDEXRANGENVPROC PathGlyphIndexRangeNV; + PFNGLPATHGLYPHRANGENVPROC PathGlyphRangeNV; + PFNGLPATHGLYPHSNVPROC PathGlyphsNV; + PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC PathMemoryGlyphIndexArrayNV; + PFNGLPATHPARAMETERFNVPROC PathParameterfNV; + PFNGLPATHPARAMETERFVNVPROC PathParameterfvNV; + PFNGLPATHPARAMETERINVPROC PathParameteriNV; + PFNGLPATHPARAMETERIVNVPROC PathParameterivNV; + PFNGLPATHSTENCILDEPTHOFFSETNVPROC PathStencilDepthOffsetNV; + PFNGLPATHSTENCILFUNCNVPROC PathStencilFuncNV; + PFNGLPATHSTRINGNVPROC PathStringNV; + PFNGLPATHSUBCOMMANDSNVPROC PathSubCommandsNV; + PFNGLPATHSUBCOORDSNVPROC PathSubCoordsNV; + PFNGLPAUSETRANSFORMFEEDBACKPROC PauseTransformFeedback; + PFNGLPAUSETRANSFORMFEEDBACKNVPROC PauseTransformFeedbackNV; + PFNGLPIXELDATARANGENVPROC PixelDataRangeNV; + PFNGLPIXELMAPXPROC PixelMapx; + PFNGLPIXELSTOREFPROC PixelStoref; + PFNGLPIXELSTOREIPROC PixelStorei; + PFNGLPIXELSTOREXPROC PixelStorex; + PFNGLPIXELTEXGENPARAMETERFSGISPROC PixelTexGenParameterfSGIS; + PFNGLPIXELTEXGENPARAMETERFVSGISPROC PixelTexGenParameterfvSGIS; + PFNGLPIXELTEXGENPARAMETERISGISPROC PixelTexGenParameteriSGIS; + PFNGLPIXELTEXGENPARAMETERIVSGISPROC PixelTexGenParameterivSGIS; + PFNGLPIXELTEXGENSGIXPROC PixelTexGenSGIX; + PFNGLPIXELTRANSFERXOESPROC PixelTransferxOES; + PFNGLPIXELTRANSFORMPARAMETERFEXTPROC PixelTransformParameterfEXT; + PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC PixelTransformParameterfvEXT; + PFNGLPIXELTRANSFORMPARAMETERIEXTPROC PixelTransformParameteriEXT; + PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC PixelTransformParameterivEXT; + PFNGLPIXELZOOMXOESPROC PixelZoomxOES; + PFNGLPOINTALONGPATHNVPROC PointAlongPathNV; + PFNGLPOINTPARAMETERFPROC PointParameterf; + PFNGLPOINTPARAMETERFARBPROC PointParameterfARB; + PFNGLPOINTPARAMETERFEXTPROC PointParameterfEXT; + PFNGLPOINTPARAMETERFSGISPROC PointParameterfSGIS; + PFNGLPOINTPARAMETERFVPROC PointParameterfv; + PFNGLPOINTPARAMETERFVARBPROC PointParameterfvARB; + PFNGLPOINTPARAMETERFVEXTPROC PointParameterfvEXT; + PFNGLPOINTPARAMETERFVSGISPROC PointParameterfvSGIS; + PFNGLPOINTPARAMETERIPROC PointParameteri; + PFNGLPOINTPARAMETERINVPROC PointParameteriNV; + PFNGLPOINTPARAMETERIVPROC PointParameteriv; + PFNGLPOINTPARAMETERIVNVPROC PointParameterivNV; + PFNGLPOINTPARAMETERXVOESPROC PointParameterxvOES; + PFNGLPOINTSIZEPROC PointSize; + PFNGLPOINTSIZEXOESPROC PointSizexOES; + PFNGLPOLLASYNCSGIXPROC PollAsyncSGIX; + PFNGLPOLLINSTRUMENTSSGIXPROC PollInstrumentsSGIX; + PFNGLPOLYGONMODEPROC PolygonMode; + PFNGLPOLYGONOFFSETPROC PolygonOffset; + PFNGLPOLYGONOFFSETCLAMPPROC PolygonOffsetClamp; + PFNGLPOLYGONOFFSETCLAMPEXTPROC PolygonOffsetClampEXT; + PFNGLPOLYGONOFFSETEXTPROC PolygonOffsetEXT; + PFNGLPOLYGONOFFSETXOESPROC PolygonOffsetxOES; + PFNGLPOPDEBUGGROUPPROC PopDebugGroup; + PFNGLPOPGROUPMARKEREXTPROC PopGroupMarkerEXT; + PFNGLPRESENTFRAMEDUALFILLNVPROC PresentFrameDualFillNV; + PFNGLPRESENTFRAMEKEYEDNVPROC PresentFrameKeyedNV; + PFNGLPRIMITIVEBOUNDINGBOXARBPROC PrimitiveBoundingBoxARB; + PFNGLPRIMITIVERESTARTINDEXPROC PrimitiveRestartIndex; + PFNGLPRIMITIVERESTARTINDEXNVPROC PrimitiveRestartIndexNV; + PFNGLPRIMITIVERESTARTNVPROC PrimitiveRestartNV; + PFNGLPRIORITIZETEXTURESEXTPROC PrioritizeTexturesEXT; + PFNGLPRIORITIZETEXTURESXOESPROC PrioritizeTexturesxOES; + PFNGLPROGRAMBINARYPROC ProgramBinary; + PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC ProgramBufferParametersIivNV; + PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC ProgramBufferParametersIuivNV; + PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC ProgramBufferParametersfvNV; + PFNGLPROGRAMENVPARAMETER4DARBPROC ProgramEnvParameter4dARB; + PFNGLPROGRAMENVPARAMETER4DVARBPROC ProgramEnvParameter4dvARB; + PFNGLPROGRAMENVPARAMETER4FARBPROC ProgramEnvParameter4fARB; + PFNGLPROGRAMENVPARAMETER4FVARBPROC ProgramEnvParameter4fvARB; + PFNGLPROGRAMENVPARAMETERI4INVPROC ProgramEnvParameterI4iNV; + PFNGLPROGRAMENVPARAMETERI4IVNVPROC ProgramEnvParameterI4ivNV; + PFNGLPROGRAMENVPARAMETERI4UINVPROC ProgramEnvParameterI4uiNV; + PFNGLPROGRAMENVPARAMETERI4UIVNVPROC ProgramEnvParameterI4uivNV; + PFNGLPROGRAMENVPARAMETERS4FVEXTPROC ProgramEnvParameters4fvEXT; + PFNGLPROGRAMENVPARAMETERSI4IVNVPROC ProgramEnvParametersI4ivNV; + PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC ProgramEnvParametersI4uivNV; + PFNGLPROGRAMLOCALPARAMETER4DARBPROC ProgramLocalParameter4dARB; + PFNGLPROGRAMLOCALPARAMETER4DVARBPROC ProgramLocalParameter4dvARB; + PFNGLPROGRAMLOCALPARAMETER4FARBPROC ProgramLocalParameter4fARB; + PFNGLPROGRAMLOCALPARAMETER4FVARBPROC ProgramLocalParameter4fvARB; + PFNGLPROGRAMLOCALPARAMETERI4INVPROC ProgramLocalParameterI4iNV; + PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC ProgramLocalParameterI4ivNV; + PFNGLPROGRAMLOCALPARAMETERI4UINVPROC ProgramLocalParameterI4uiNV; + PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC ProgramLocalParameterI4uivNV; + PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC ProgramLocalParameters4fvEXT; + PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC ProgramLocalParametersI4ivNV; + PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC ProgramLocalParametersI4uivNV; + PFNGLPROGRAMNAMEDPARAMETER4DNVPROC ProgramNamedParameter4dNV; + PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC ProgramNamedParameter4dvNV; + PFNGLPROGRAMNAMEDPARAMETER4FNVPROC ProgramNamedParameter4fNV; + PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC ProgramNamedParameter4fvNV; + PFNGLPROGRAMPARAMETER4DNVPROC ProgramParameter4dNV; + PFNGLPROGRAMPARAMETER4DVNVPROC ProgramParameter4dvNV; + PFNGLPROGRAMPARAMETER4FNVPROC ProgramParameter4fNV; + PFNGLPROGRAMPARAMETER4FVNVPROC ProgramParameter4fvNV; + PFNGLPROGRAMPARAMETERIPROC ProgramParameteri; + PFNGLPROGRAMPARAMETERIARBPROC ProgramParameteriARB; + PFNGLPROGRAMPARAMETERIEXTPROC ProgramParameteriEXT; + PFNGLPROGRAMPARAMETERS4DVNVPROC ProgramParameters4dvNV; + PFNGLPROGRAMPARAMETERS4FVNVPROC ProgramParameters4fvNV; + PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC ProgramPathFragmentInputGenNV; + PFNGLPROGRAMSTRINGARBPROC ProgramStringARB; + PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC ProgramSubroutineParametersuivNV; + PFNGLPROGRAMUNIFORM1DPROC ProgramUniform1d; + PFNGLPROGRAMUNIFORM1DEXTPROC ProgramUniform1dEXT; + PFNGLPROGRAMUNIFORM1DVPROC ProgramUniform1dv; + PFNGLPROGRAMUNIFORM1DVEXTPROC ProgramUniform1dvEXT; + PFNGLPROGRAMUNIFORM1FPROC ProgramUniform1f; + PFNGLPROGRAMUNIFORM1FEXTPROC ProgramUniform1fEXT; + PFNGLPROGRAMUNIFORM1FVPROC ProgramUniform1fv; + PFNGLPROGRAMUNIFORM1FVEXTPROC ProgramUniform1fvEXT; + PFNGLPROGRAMUNIFORM1IPROC ProgramUniform1i; + PFNGLPROGRAMUNIFORM1I64ARBPROC ProgramUniform1i64ARB; + PFNGLPROGRAMUNIFORM1I64NVPROC ProgramUniform1i64NV; + PFNGLPROGRAMUNIFORM1I64VARBPROC ProgramUniform1i64vARB; + PFNGLPROGRAMUNIFORM1I64VNVPROC ProgramUniform1i64vNV; + PFNGLPROGRAMUNIFORM1IEXTPROC ProgramUniform1iEXT; + PFNGLPROGRAMUNIFORM1IVPROC ProgramUniform1iv; + PFNGLPROGRAMUNIFORM1IVEXTPROC ProgramUniform1ivEXT; + PFNGLPROGRAMUNIFORM1UIPROC ProgramUniform1ui; + PFNGLPROGRAMUNIFORM1UI64ARBPROC ProgramUniform1ui64ARB; + PFNGLPROGRAMUNIFORM1UI64NVPROC ProgramUniform1ui64NV; + PFNGLPROGRAMUNIFORM1UI64VARBPROC ProgramUniform1ui64vARB; + PFNGLPROGRAMUNIFORM1UI64VNVPROC ProgramUniform1ui64vNV; + PFNGLPROGRAMUNIFORM1UIEXTPROC ProgramUniform1uiEXT; + PFNGLPROGRAMUNIFORM1UIVPROC ProgramUniform1uiv; + PFNGLPROGRAMUNIFORM1UIVEXTPROC ProgramUniform1uivEXT; + PFNGLPROGRAMUNIFORM2DPROC ProgramUniform2d; + PFNGLPROGRAMUNIFORM2DEXTPROC ProgramUniform2dEXT; + PFNGLPROGRAMUNIFORM2DVPROC ProgramUniform2dv; + PFNGLPROGRAMUNIFORM2DVEXTPROC ProgramUniform2dvEXT; + PFNGLPROGRAMUNIFORM2FPROC ProgramUniform2f; + PFNGLPROGRAMUNIFORM2FEXTPROC ProgramUniform2fEXT; + PFNGLPROGRAMUNIFORM2FVPROC ProgramUniform2fv; + PFNGLPROGRAMUNIFORM2FVEXTPROC ProgramUniform2fvEXT; + PFNGLPROGRAMUNIFORM2IPROC ProgramUniform2i; + PFNGLPROGRAMUNIFORM2I64ARBPROC ProgramUniform2i64ARB; + PFNGLPROGRAMUNIFORM2I64NVPROC ProgramUniform2i64NV; + PFNGLPROGRAMUNIFORM2I64VARBPROC ProgramUniform2i64vARB; + PFNGLPROGRAMUNIFORM2I64VNVPROC ProgramUniform2i64vNV; + PFNGLPROGRAMUNIFORM2IEXTPROC ProgramUniform2iEXT; + PFNGLPROGRAMUNIFORM2IVPROC ProgramUniform2iv; + PFNGLPROGRAMUNIFORM2IVEXTPROC ProgramUniform2ivEXT; + PFNGLPROGRAMUNIFORM2UIPROC ProgramUniform2ui; + PFNGLPROGRAMUNIFORM2UI64ARBPROC ProgramUniform2ui64ARB; + PFNGLPROGRAMUNIFORM2UI64NVPROC ProgramUniform2ui64NV; + PFNGLPROGRAMUNIFORM2UI64VARBPROC ProgramUniform2ui64vARB; + PFNGLPROGRAMUNIFORM2UI64VNVPROC ProgramUniform2ui64vNV; + PFNGLPROGRAMUNIFORM2UIEXTPROC ProgramUniform2uiEXT; + PFNGLPROGRAMUNIFORM2UIVPROC ProgramUniform2uiv; + PFNGLPROGRAMUNIFORM2UIVEXTPROC ProgramUniform2uivEXT; + PFNGLPROGRAMUNIFORM3DPROC ProgramUniform3d; + PFNGLPROGRAMUNIFORM3DEXTPROC ProgramUniform3dEXT; + PFNGLPROGRAMUNIFORM3DVPROC ProgramUniform3dv; + PFNGLPROGRAMUNIFORM3DVEXTPROC ProgramUniform3dvEXT; + PFNGLPROGRAMUNIFORM3FPROC ProgramUniform3f; + PFNGLPROGRAMUNIFORM3FEXTPROC ProgramUniform3fEXT; + PFNGLPROGRAMUNIFORM3FVPROC ProgramUniform3fv; + PFNGLPROGRAMUNIFORM3FVEXTPROC ProgramUniform3fvEXT; + PFNGLPROGRAMUNIFORM3IPROC ProgramUniform3i; + PFNGLPROGRAMUNIFORM3I64ARBPROC ProgramUniform3i64ARB; + PFNGLPROGRAMUNIFORM3I64NVPROC ProgramUniform3i64NV; + PFNGLPROGRAMUNIFORM3I64VARBPROC ProgramUniform3i64vARB; + PFNGLPROGRAMUNIFORM3I64VNVPROC ProgramUniform3i64vNV; + PFNGLPROGRAMUNIFORM3IEXTPROC ProgramUniform3iEXT; + PFNGLPROGRAMUNIFORM3IVPROC ProgramUniform3iv; + PFNGLPROGRAMUNIFORM3IVEXTPROC ProgramUniform3ivEXT; + PFNGLPROGRAMUNIFORM3UIPROC ProgramUniform3ui; + PFNGLPROGRAMUNIFORM3UI64ARBPROC ProgramUniform3ui64ARB; + PFNGLPROGRAMUNIFORM3UI64NVPROC ProgramUniform3ui64NV; + PFNGLPROGRAMUNIFORM3UI64VARBPROC ProgramUniform3ui64vARB; + PFNGLPROGRAMUNIFORM3UI64VNVPROC ProgramUniform3ui64vNV; + PFNGLPROGRAMUNIFORM3UIEXTPROC ProgramUniform3uiEXT; + PFNGLPROGRAMUNIFORM3UIVPROC ProgramUniform3uiv; + PFNGLPROGRAMUNIFORM3UIVEXTPROC ProgramUniform3uivEXT; + PFNGLPROGRAMUNIFORM4DPROC ProgramUniform4d; + PFNGLPROGRAMUNIFORM4DEXTPROC ProgramUniform4dEXT; + PFNGLPROGRAMUNIFORM4DVPROC ProgramUniform4dv; + PFNGLPROGRAMUNIFORM4DVEXTPROC ProgramUniform4dvEXT; + PFNGLPROGRAMUNIFORM4FPROC ProgramUniform4f; + PFNGLPROGRAMUNIFORM4FEXTPROC ProgramUniform4fEXT; + PFNGLPROGRAMUNIFORM4FVPROC ProgramUniform4fv; + PFNGLPROGRAMUNIFORM4FVEXTPROC ProgramUniform4fvEXT; + PFNGLPROGRAMUNIFORM4IPROC ProgramUniform4i; + PFNGLPROGRAMUNIFORM4I64ARBPROC ProgramUniform4i64ARB; + PFNGLPROGRAMUNIFORM4I64NVPROC ProgramUniform4i64NV; + PFNGLPROGRAMUNIFORM4I64VARBPROC ProgramUniform4i64vARB; + PFNGLPROGRAMUNIFORM4I64VNVPROC ProgramUniform4i64vNV; + PFNGLPROGRAMUNIFORM4IEXTPROC ProgramUniform4iEXT; + PFNGLPROGRAMUNIFORM4IVPROC ProgramUniform4iv; + PFNGLPROGRAMUNIFORM4IVEXTPROC ProgramUniform4ivEXT; + PFNGLPROGRAMUNIFORM4UIPROC ProgramUniform4ui; + PFNGLPROGRAMUNIFORM4UI64ARBPROC ProgramUniform4ui64ARB; + PFNGLPROGRAMUNIFORM4UI64NVPROC ProgramUniform4ui64NV; + PFNGLPROGRAMUNIFORM4UI64VARBPROC ProgramUniform4ui64vARB; + PFNGLPROGRAMUNIFORM4UI64VNVPROC ProgramUniform4ui64vNV; + PFNGLPROGRAMUNIFORM4UIEXTPROC ProgramUniform4uiEXT; + PFNGLPROGRAMUNIFORM4UIVPROC ProgramUniform4uiv; + PFNGLPROGRAMUNIFORM4UIVEXTPROC ProgramUniform4uivEXT; + PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC ProgramUniformHandleui64ARB; + PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC ProgramUniformHandleui64NV; + PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC ProgramUniformHandleui64vARB; + PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC ProgramUniformHandleui64vNV; + PFNGLPROGRAMUNIFORMMATRIX2DVPROC ProgramUniformMatrix2dv; + PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC ProgramUniformMatrix2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2FVPROC ProgramUniformMatrix2fv; + PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC ProgramUniformMatrix2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC ProgramUniformMatrix2x3dv; + PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC ProgramUniformMatrix2x3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC ProgramUniformMatrix2x3fv; + PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC ProgramUniformMatrix2x3fvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC ProgramUniformMatrix2x4dv; + PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC ProgramUniformMatrix2x4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC ProgramUniformMatrix2x4fv; + PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC ProgramUniformMatrix2x4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3DVPROC ProgramUniformMatrix3dv; + PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC ProgramUniformMatrix3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3FVPROC ProgramUniformMatrix3fv; + PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC ProgramUniformMatrix3fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC ProgramUniformMatrix3x2dv; + PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC ProgramUniformMatrix3x2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC ProgramUniformMatrix3x2fv; + PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC ProgramUniformMatrix3x2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC ProgramUniformMatrix3x4dv; + PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC ProgramUniformMatrix3x4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC ProgramUniformMatrix3x4fv; + PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC ProgramUniformMatrix3x4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4DVPROC ProgramUniformMatrix4dv; + PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC ProgramUniformMatrix4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4FVPROC ProgramUniformMatrix4fv; + PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC ProgramUniformMatrix4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC ProgramUniformMatrix4x2dv; + PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC ProgramUniformMatrix4x2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC ProgramUniformMatrix4x2fv; + PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC ProgramUniformMatrix4x2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC ProgramUniformMatrix4x3dv; + PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC ProgramUniformMatrix4x3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC ProgramUniformMatrix4x3fv; + PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC ProgramUniformMatrix4x3fvEXT; + PFNGLPROGRAMUNIFORMUI64NVPROC ProgramUniformui64NV; + PFNGLPROGRAMUNIFORMUI64VNVPROC ProgramUniformui64vNV; + PFNGLPROGRAMVERTEXLIMITNVPROC ProgramVertexLimitNV; + PFNGLPROVOKINGVERTEXPROC ProvokingVertex; + PFNGLPROVOKINGVERTEXEXTPROC ProvokingVertexEXT; + PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC PushClientAttribDefaultEXT; + PFNGLPUSHDEBUGGROUPPROC PushDebugGroup; + PFNGLPUSHGROUPMARKEREXTPROC PushGroupMarkerEXT; + PFNGLQUERYCOUNTERPROC QueryCounter; + PFNGLQUERYMATRIXXOESPROC QueryMatrixxOES; + PFNGLQUERYOBJECTPARAMETERUIAMDPROC QueryObjectParameteruiAMD; + PFNGLQUERYRESOURCENVPROC QueryResourceNV; + PFNGLQUERYRESOURCETAGNVPROC QueryResourceTagNV; + PFNGLRASTERPOS2XOESPROC RasterPos2xOES; + PFNGLRASTERPOS2XVOESPROC RasterPos2xvOES; + PFNGLRASTERPOS3XOESPROC RasterPos3xOES; + PFNGLRASTERPOS3XVOESPROC RasterPos3xvOES; + PFNGLRASTERPOS4XOESPROC RasterPos4xOES; + PFNGLRASTERPOS4XVOESPROC RasterPos4xvOES; + PFNGLRASTERSAMPLESEXTPROC RasterSamplesEXT; + PFNGLREADBUFFERPROC ReadBuffer; + PFNGLREADINSTRUMENTSSGIXPROC ReadInstrumentsSGIX; + PFNGLREADPIXELSPROC ReadPixels; + PFNGLREADNPIXELSPROC ReadnPixels; + PFNGLREADNPIXELSARBPROC ReadnPixelsARB; + PFNGLRECTXOESPROC RectxOES; + PFNGLRECTXVOESPROC RectxvOES; + PFNGLREFERENCEPLANESGIXPROC ReferencePlaneSGIX; + PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC ReleaseKeyedMutexWin32EXT; + PFNGLRELEASESHADERCOMPILERPROC ReleaseShaderCompiler; + PFNGLRENDERGPUMASKNVPROC RenderGpuMaskNV; + PFNGLRENDERBUFFERSTORAGEPROC RenderbufferStorage; + PFNGLRENDERBUFFERSTORAGEEXTPROC RenderbufferStorageEXT; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC RenderbufferStorageMultisample; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC RenderbufferStorageMultisampleAdvancedAMD; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC RenderbufferStorageMultisampleCoverageNV; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC RenderbufferStorageMultisampleEXT; + PFNGLREPLACEMENTCODEPOINTERSUNPROC ReplacementCodePointerSUN; + PFNGLREPLACEMENTCODEUBSUNPROC ReplacementCodeubSUN; + PFNGLREPLACEMENTCODEUBVSUNPROC ReplacementCodeubvSUN; + PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC ReplacementCodeuiColor3fVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC ReplacementCodeuiColor3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC + ReplacementCodeuiColor4fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC + ReplacementCodeuiColor4fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC ReplacementCodeuiColor4ubVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC ReplacementCodeuiColor4ubVertex3fvSUN; + PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC ReplacementCodeuiNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC ReplacementCodeuiNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUISUNPROC ReplacementCodeuiSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC + ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC + ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC + ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC + ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC ReplacementCodeuiTexCoord2fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC ReplacementCodeuiTexCoord2fVertex3fvSUN; + PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC ReplacementCodeuiVertex3fSUN; + PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC ReplacementCodeuiVertex3fvSUN; + PFNGLREPLACEMENTCODEUIVSUNPROC ReplacementCodeuivSUN; + PFNGLREPLACEMENTCODEUSSUNPROC ReplacementCodeusSUN; + PFNGLREPLACEMENTCODEUSVSUNPROC ReplacementCodeusvSUN; + PFNGLREQUESTRESIDENTPROGRAMSNVPROC RequestResidentProgramsNV; + PFNGLRESETHISTOGRAMEXTPROC ResetHistogramEXT; + PFNGLRESETMEMORYOBJECTPARAMETERNVPROC ResetMemoryObjectParameterNV; + PFNGLRESETMINMAXEXTPROC ResetMinmaxEXT; + PFNGLRESIZEBUFFERSMESAPROC ResizeBuffersMESA; + PFNGLRESOLVEDEPTHVALUESNVPROC ResolveDepthValuesNV; + PFNGLRESUMETRANSFORMFEEDBACKPROC ResumeTransformFeedback; + PFNGLRESUMETRANSFORMFEEDBACKNVPROC ResumeTransformFeedbackNV; + PFNGLROTATEXOESPROC RotatexOES; + PFNGLSAMPLECOVERAGEPROC SampleCoverage; + PFNGLSAMPLECOVERAGEARBPROC SampleCoverageARB; + PFNGLSAMPLEMAPATIPROC SampleMapATI; + PFNGLSAMPLEMASKEXTPROC SampleMaskEXT; + PFNGLSAMPLEMASKINDEXEDNVPROC SampleMaskIndexedNV; + PFNGLSAMPLEMASKSGISPROC SampleMaskSGIS; + PFNGLSAMPLEMASKIPROC SampleMaski; + PFNGLSAMPLEPATTERNEXTPROC SamplePatternEXT; + PFNGLSAMPLEPATTERNSGISPROC SamplePatternSGIS; + PFNGLSAMPLERPARAMETERIIVPROC SamplerParameterIiv; + PFNGLSAMPLERPARAMETERIUIVPROC SamplerParameterIuiv; + PFNGLSAMPLERPARAMETERFPROC SamplerParameterf; + PFNGLSAMPLERPARAMETERFVPROC SamplerParameterfv; + PFNGLSAMPLERPARAMETERIPROC SamplerParameteri; + PFNGLSAMPLERPARAMETERIVPROC SamplerParameteriv; + PFNGLSCALEXOESPROC ScalexOES; + PFNGLSCISSORPROC Scissor; + PFNGLSCISSORARRAYVPROC ScissorArrayv; + PFNGLSCISSOREXCLUSIVEARRAYVNVPROC ScissorExclusiveArrayvNV; + PFNGLSCISSOREXCLUSIVENVPROC ScissorExclusiveNV; + PFNGLSCISSORINDEXEDPROC ScissorIndexed; + PFNGLSCISSORINDEXEDVPROC ScissorIndexedv; + PFNGLSECONDARYCOLOR3BEXTPROC SecondaryColor3bEXT; + PFNGLSECONDARYCOLOR3BVEXTPROC SecondaryColor3bvEXT; + PFNGLSECONDARYCOLOR3DEXTPROC SecondaryColor3dEXT; + PFNGLSECONDARYCOLOR3DVEXTPROC SecondaryColor3dvEXT; + PFNGLSECONDARYCOLOR3FEXTPROC SecondaryColor3fEXT; + PFNGLSECONDARYCOLOR3FVEXTPROC SecondaryColor3fvEXT; + PFNGLSECONDARYCOLOR3HNVPROC SecondaryColor3hNV; + PFNGLSECONDARYCOLOR3HVNVPROC SecondaryColor3hvNV; + PFNGLSECONDARYCOLOR3IEXTPROC SecondaryColor3iEXT; + PFNGLSECONDARYCOLOR3IVEXTPROC SecondaryColor3ivEXT; + PFNGLSECONDARYCOLOR3SEXTPROC SecondaryColor3sEXT; + PFNGLSECONDARYCOLOR3SVEXTPROC SecondaryColor3svEXT; + PFNGLSECONDARYCOLOR3UBEXTPROC SecondaryColor3ubEXT; + PFNGLSECONDARYCOLOR3UBVEXTPROC SecondaryColor3ubvEXT; + PFNGLSECONDARYCOLOR3UIEXTPROC SecondaryColor3uiEXT; + PFNGLSECONDARYCOLOR3UIVEXTPROC SecondaryColor3uivEXT; + PFNGLSECONDARYCOLOR3USEXTPROC SecondaryColor3usEXT; + PFNGLSECONDARYCOLOR3USVEXTPROC SecondaryColor3usvEXT; + PFNGLSECONDARYCOLORFORMATNVPROC SecondaryColorFormatNV; + PFNGLSECONDARYCOLORPOINTEREXTPROC SecondaryColorPointerEXT; + PFNGLSECONDARYCOLORPOINTERLISTIBMPROC SecondaryColorPointerListIBM; + PFNGLSELECTPERFMONITORCOUNTERSAMDPROC SelectPerfMonitorCountersAMD; + PFNGLSEMAPHOREPARAMETERIVNVPROC SemaphoreParameterivNV; + PFNGLSEMAPHOREPARAMETERUI64VEXTPROC SemaphoreParameterui64vEXT; + PFNGLSEPARABLEFILTER2DEXTPROC SeparableFilter2DEXT; + PFNGLSETFENCEAPPLEPROC SetFenceAPPLE; + PFNGLSETFENCENVPROC SetFenceNV; + PFNGLSETFRAGMENTSHADERCONSTANTATIPROC SetFragmentShaderConstantATI; + PFNGLSETINVARIANTEXTPROC SetInvariantEXT; + PFNGLSETLOCALCONSTANTEXTPROC SetLocalConstantEXT; + PFNGLSETMULTISAMPLEFVAMDPROC SetMultisamplefvAMD; + PFNGLSHADERBINARYPROC ShaderBinary; + PFNGLSHADEROP1EXTPROC ShaderOp1EXT; + PFNGLSHADEROP2EXTPROC ShaderOp2EXT; + PFNGLSHADEROP3EXTPROC ShaderOp3EXT; + PFNGLSHADERSOURCEPROC ShaderSource; + PFNGLSHADERSOURCEARBPROC ShaderSourceARB; + PFNGLSHADERSTORAGEBLOCKBINDINGPROC ShaderStorageBlockBinding; + PFNGLSHADINGRATEIMAGEBARRIERNVPROC ShadingRateImageBarrierNV; + PFNGLSHADINGRATEIMAGEPALETTENVPROC ShadingRateImagePaletteNV; + PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC ShadingRateSampleOrderCustomNV; + PFNGLSHADINGRATESAMPLEORDERNVPROC ShadingRateSampleOrderNV; + PFNGLSHARPENTEXFUNCSGISPROC SharpenTexFuncSGIS; + PFNGLSIGNALSEMAPHOREEXTPROC SignalSemaphoreEXT; + PFNGLSIGNALSEMAPHOREUI64NVXPROC SignalSemaphoreui64NVX; + PFNGLSIGNALVKFENCENVPROC SignalVkFenceNV; + PFNGLSIGNALVKSEMAPHORENVPROC SignalVkSemaphoreNV; + PFNGLSPECIALIZESHADERPROC SpecializeShader; + PFNGLSPECIALIZESHADERARBPROC SpecializeShaderARB; + PFNGLSPRITEPARAMETERFSGIXPROC SpriteParameterfSGIX; + PFNGLSPRITEPARAMETERFVSGIXPROC SpriteParameterfvSGIX; + PFNGLSPRITEPARAMETERISGIXPROC SpriteParameteriSGIX; + PFNGLSPRITEPARAMETERIVSGIXPROC SpriteParameterivSGIX; + PFNGLSTARTINSTRUMENTSSGIXPROC StartInstrumentsSGIX; + PFNGLSTATECAPTURENVPROC StateCaptureNV; + PFNGLSTENCILCLEARTAGEXTPROC StencilClearTagEXT; + PFNGLSTENCILFILLPATHINSTANCEDNVPROC StencilFillPathInstancedNV; + PFNGLSTENCILFILLPATHNVPROC StencilFillPathNV; + PFNGLSTENCILFUNCPROC StencilFunc; + PFNGLSTENCILFUNCSEPARATEPROC StencilFuncSeparate; + PFNGLSTENCILFUNCSEPARATEATIPROC StencilFuncSeparateATI; + PFNGLSTENCILMASKPROC StencilMask; + PFNGLSTENCILMASKSEPARATEPROC StencilMaskSeparate; + PFNGLSTENCILOPPROC StencilOp; + PFNGLSTENCILOPSEPARATEPROC StencilOpSeparate; + PFNGLSTENCILOPSEPARATEATIPROC StencilOpSeparateATI; + PFNGLSTENCILOPVALUEAMDPROC StencilOpValueAMD; + PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC StencilStrokePathInstancedNV; + PFNGLSTENCILSTROKEPATHNVPROC StencilStrokePathNV; + PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC StencilThenCoverFillPathInstancedNV; + PFNGLSTENCILTHENCOVERFILLPATHNVPROC StencilThenCoverFillPathNV; + PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC StencilThenCoverStrokePathInstancedNV; + PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC StencilThenCoverStrokePathNV; + PFNGLSTOPINSTRUMENTSSGIXPROC StopInstrumentsSGIX; + PFNGLSTRINGMARKERGREMEDYPROC StringMarkerGREMEDY; + PFNGLSUBPIXELPRECISIONBIASNVPROC SubpixelPrecisionBiasNV; + PFNGLSWIZZLEEXTPROC SwizzleEXT; + PFNGLSYNCTEXTUREINTELPROC SyncTextureINTEL; + PFNGLTAGSAMPLEBUFFERSGIXPROC TagSampleBufferSGIX; + PFNGLTANGENT3BEXTPROC Tangent3bEXT; + PFNGLTANGENT3BVEXTPROC Tangent3bvEXT; + PFNGLTANGENT3DEXTPROC Tangent3dEXT; + PFNGLTANGENT3DVEXTPROC Tangent3dvEXT; + PFNGLTANGENT3FEXTPROC Tangent3fEXT; + PFNGLTANGENT3FVEXTPROC Tangent3fvEXT; + PFNGLTANGENT3IEXTPROC Tangent3iEXT; + PFNGLTANGENT3IVEXTPROC Tangent3ivEXT; + PFNGLTANGENT3SEXTPROC Tangent3sEXT; + PFNGLTANGENT3SVEXTPROC Tangent3svEXT; + PFNGLTANGENTPOINTEREXTPROC TangentPointerEXT; + PFNGLTBUFFERMASK3DFXPROC TbufferMask3DFX; + PFNGLTESSELLATIONFACTORAMDPROC TessellationFactorAMD; + PFNGLTESSELLATIONMODEAMDPROC TessellationModeAMD; + PFNGLTESTFENCEAPPLEPROC TestFenceAPPLE; + PFNGLTESTFENCENVPROC TestFenceNV; + PFNGLTESTOBJECTAPPLEPROC TestObjectAPPLE; + PFNGLTEXATTACHMEMORYNVPROC TexAttachMemoryNV; + PFNGLTEXBUFFERPROC TexBuffer; + PFNGLTEXBUFFERARBPROC TexBufferARB; + PFNGLTEXBUFFEREXTPROC TexBufferEXT; + PFNGLTEXBUFFERRANGEPROC TexBufferRange; + PFNGLTEXBUMPPARAMETERFVATIPROC TexBumpParameterfvATI; + PFNGLTEXBUMPPARAMETERIVATIPROC TexBumpParameterivATI; + PFNGLTEXCOORD1BOESPROC TexCoord1bOES; + PFNGLTEXCOORD1BVOESPROC TexCoord1bvOES; + PFNGLTEXCOORD1HNVPROC TexCoord1hNV; + PFNGLTEXCOORD1HVNVPROC TexCoord1hvNV; + PFNGLTEXCOORD1XOESPROC TexCoord1xOES; + PFNGLTEXCOORD1XVOESPROC TexCoord1xvOES; + PFNGLTEXCOORD2BOESPROC TexCoord2bOES; + PFNGLTEXCOORD2BVOESPROC TexCoord2bvOES; + PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC TexCoord2fColor3fVertex3fSUN; + PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC TexCoord2fColor3fVertex3fvSUN; + PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC TexCoord2fColor4fNormal3fVertex3fSUN; + PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC TexCoord2fColor4fNormal3fVertex3fvSUN; + PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC TexCoord2fColor4ubVertex3fSUN; + PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC TexCoord2fColor4ubVertex3fvSUN; + PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC TexCoord2fNormal3fVertex3fSUN; + PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC TexCoord2fNormal3fVertex3fvSUN; + PFNGLTEXCOORD2FVERTEX3FSUNPROC TexCoord2fVertex3fSUN; + PFNGLTEXCOORD2FVERTEX3FVSUNPROC TexCoord2fVertex3fvSUN; + PFNGLTEXCOORD2HNVPROC TexCoord2hNV; + PFNGLTEXCOORD2HVNVPROC TexCoord2hvNV; + PFNGLTEXCOORD2XOESPROC TexCoord2xOES; + PFNGLTEXCOORD2XVOESPROC TexCoord2xvOES; + PFNGLTEXCOORD3BOESPROC TexCoord3bOES; + PFNGLTEXCOORD3BVOESPROC TexCoord3bvOES; + PFNGLTEXCOORD3HNVPROC TexCoord3hNV; + PFNGLTEXCOORD3HVNVPROC TexCoord3hvNV; + PFNGLTEXCOORD3XOESPROC TexCoord3xOES; + PFNGLTEXCOORD3XVOESPROC TexCoord3xvOES; + PFNGLTEXCOORD4BOESPROC TexCoord4bOES; + PFNGLTEXCOORD4BVOESPROC TexCoord4bvOES; + PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC TexCoord4fColor4fNormal3fVertex4fSUN; + PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC TexCoord4fColor4fNormal3fVertex4fvSUN; + PFNGLTEXCOORD4FVERTEX4FSUNPROC TexCoord4fVertex4fSUN; + PFNGLTEXCOORD4FVERTEX4FVSUNPROC TexCoord4fVertex4fvSUN; + PFNGLTEXCOORD4HNVPROC TexCoord4hNV; + PFNGLTEXCOORD4HVNVPROC TexCoord4hvNV; + PFNGLTEXCOORD4XOESPROC TexCoord4xOES; + PFNGLTEXCOORD4XVOESPROC TexCoord4xvOES; + PFNGLTEXCOORDFORMATNVPROC TexCoordFormatNV; + PFNGLTEXCOORDPOINTEREXTPROC TexCoordPointerEXT; + PFNGLTEXCOORDPOINTERLISTIBMPROC TexCoordPointerListIBM; + PFNGLTEXCOORDPOINTERVINTELPROC TexCoordPointervINTEL; + PFNGLTEXENVXOESPROC TexEnvxOES; + PFNGLTEXENVXVOESPROC TexEnvxvOES; + PFNGLTEXFILTERFUNCSGISPROC TexFilterFuncSGIS; + PFNGLTEXGENXOESPROC TexGenxOES; + PFNGLTEXGENXVOESPROC TexGenxvOES; + PFNGLTEXIMAGE1DPROC TexImage1D; + PFNGLTEXIMAGE2DPROC TexImage2D; + PFNGLTEXIMAGE2DMULTISAMPLEPROC TexImage2DMultisample; + PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC TexImage2DMultisampleCoverageNV; + PFNGLTEXIMAGE3DPROC TexImage3D; + PFNGLTEXIMAGE3DEXTPROC TexImage3DEXT; + PFNGLTEXIMAGE3DMULTISAMPLEPROC TexImage3DMultisample; + PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC TexImage3DMultisampleCoverageNV; + PFNGLTEXIMAGE4DSGISPROC TexImage4DSGIS; + PFNGLTEXPAGECOMMITMENTARBPROC TexPageCommitmentARB; + PFNGLTEXPAGECOMMITMENTMEMNVPROC TexPageCommitmentMemNV; + PFNGLTEXPARAMETERIIVPROC TexParameterIiv; + PFNGLTEXPARAMETERIIVEXTPROC TexParameterIivEXT; + PFNGLTEXPARAMETERIUIVPROC TexParameterIuiv; + PFNGLTEXPARAMETERIUIVEXTPROC TexParameterIuivEXT; + PFNGLTEXPARAMETERFPROC TexParameterf; + PFNGLTEXPARAMETERFVPROC TexParameterfv; + PFNGLTEXPARAMETERIPROC TexParameteri; + PFNGLTEXPARAMETERIVPROC TexParameteriv; + PFNGLTEXPARAMETERXOESPROC TexParameterxOES; + PFNGLTEXPARAMETERXVOESPROC TexParameterxvOES; + PFNGLTEXRENDERBUFFERNVPROC TexRenderbufferNV; + PFNGLTEXSTORAGE1DPROC TexStorage1D; + PFNGLTEXSTORAGE1DEXTPROC TexStorage1DEXT; + PFNGLTEXSTORAGE2DPROC TexStorage2D; + PFNGLTEXSTORAGE2DEXTPROC TexStorage2DEXT; + PFNGLTEXSTORAGE2DMULTISAMPLEPROC TexStorage2DMultisample; + PFNGLTEXSTORAGE3DPROC TexStorage3D; + PFNGLTEXSTORAGE3DEXTPROC TexStorage3DEXT; + PFNGLTEXSTORAGE3DMULTISAMPLEPROC TexStorage3DMultisample; + PFNGLTEXSTORAGEMEM1DEXTPROC TexStorageMem1DEXT; + PFNGLTEXSTORAGEMEM2DEXTPROC TexStorageMem2DEXT; + PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC TexStorageMem2DMultisampleEXT; + PFNGLTEXSTORAGEMEM3DEXTPROC TexStorageMem3DEXT; + PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC TexStorageMem3DMultisampleEXT; + PFNGLTEXSTORAGESPARSEAMDPROC TexStorageSparseAMD; + PFNGLTEXSUBIMAGE1DPROC TexSubImage1D; + PFNGLTEXSUBIMAGE1DEXTPROC TexSubImage1DEXT; + PFNGLTEXSUBIMAGE2DPROC TexSubImage2D; + PFNGLTEXSUBIMAGE2DEXTPROC TexSubImage2DEXT; + PFNGLTEXSUBIMAGE3DPROC TexSubImage3D; + PFNGLTEXSUBIMAGE3DEXTPROC TexSubImage3DEXT; + PFNGLTEXSUBIMAGE4DSGISPROC TexSubImage4DSGIS; + PFNGLTEXTUREATTACHMEMORYNVPROC TextureAttachMemoryNV; + PFNGLTEXTUREBARRIERPROC TextureBarrier; + PFNGLTEXTUREBARRIERNVPROC TextureBarrierNV; + PFNGLTEXTUREBUFFERPROC TextureBuffer; + PFNGLTEXTUREBUFFEREXTPROC TextureBufferEXT; + PFNGLTEXTUREBUFFERRANGEPROC TextureBufferRange; + PFNGLTEXTUREBUFFERRANGEEXTPROC TextureBufferRangeEXT; + PFNGLTEXTURECOLORMASKSGISPROC TextureColorMaskSGIS; + PFNGLTEXTUREIMAGE1DEXTPROC TextureImage1DEXT; + PFNGLTEXTUREIMAGE2DEXTPROC TextureImage2DEXT; + PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC TextureImage2DMultisampleCoverageNV; + PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC TextureImage2DMultisampleNV; + PFNGLTEXTUREIMAGE3DEXTPROC TextureImage3DEXT; + PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC TextureImage3DMultisampleCoverageNV; + PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC TextureImage3DMultisampleNV; + PFNGLTEXTURELIGHTEXTPROC TextureLightEXT; + PFNGLTEXTUREMATERIALEXTPROC TextureMaterialEXT; + PFNGLTEXTURENORMALEXTPROC TextureNormalEXT; + PFNGLTEXTUREPAGECOMMITMENTEXTPROC TexturePageCommitmentEXT; + PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC TexturePageCommitmentMemNV; + PFNGLTEXTUREPARAMETERIIVPROC TextureParameterIiv; + PFNGLTEXTUREPARAMETERIIVEXTPROC TextureParameterIivEXT; + PFNGLTEXTUREPARAMETERIUIVPROC TextureParameterIuiv; + PFNGLTEXTUREPARAMETERIUIVEXTPROC TextureParameterIuivEXT; + PFNGLTEXTUREPARAMETERFPROC TextureParameterf; + PFNGLTEXTUREPARAMETERFEXTPROC TextureParameterfEXT; + PFNGLTEXTUREPARAMETERFVPROC TextureParameterfv; + PFNGLTEXTUREPARAMETERFVEXTPROC TextureParameterfvEXT; + PFNGLTEXTUREPARAMETERIPROC TextureParameteri; + PFNGLTEXTUREPARAMETERIEXTPROC TextureParameteriEXT; + PFNGLTEXTUREPARAMETERIVPROC TextureParameteriv; + PFNGLTEXTUREPARAMETERIVEXTPROC TextureParameterivEXT; + PFNGLTEXTURERANGEAPPLEPROC TextureRangeAPPLE; + PFNGLTEXTURERENDERBUFFEREXTPROC TextureRenderbufferEXT; + PFNGLTEXTURESTORAGE1DPROC TextureStorage1D; + PFNGLTEXTURESTORAGE1DEXTPROC TextureStorage1DEXT; + PFNGLTEXTURESTORAGE2DPROC TextureStorage2D; + PFNGLTEXTURESTORAGE2DEXTPROC TextureStorage2DEXT; + PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC TextureStorage2DMultisample; + PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC TextureStorage2DMultisampleEXT; + PFNGLTEXTURESTORAGE3DPROC TextureStorage3D; + PFNGLTEXTURESTORAGE3DEXTPROC TextureStorage3DEXT; + PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC TextureStorage3DMultisample; + PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC TextureStorage3DMultisampleEXT; + PFNGLTEXTURESTORAGEMEM1DEXTPROC TextureStorageMem1DEXT; + PFNGLTEXTURESTORAGEMEM2DEXTPROC TextureStorageMem2DEXT; + PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC TextureStorageMem2DMultisampleEXT; + PFNGLTEXTURESTORAGEMEM3DEXTPROC TextureStorageMem3DEXT; + PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC TextureStorageMem3DMultisampleEXT; + PFNGLTEXTURESTORAGESPARSEAMDPROC TextureStorageSparseAMD; + PFNGLTEXTURESUBIMAGE1DPROC TextureSubImage1D; + PFNGLTEXTURESUBIMAGE1DEXTPROC TextureSubImage1DEXT; + PFNGLTEXTURESUBIMAGE2DPROC TextureSubImage2D; + PFNGLTEXTURESUBIMAGE2DEXTPROC TextureSubImage2DEXT; + PFNGLTEXTURESUBIMAGE3DPROC TextureSubImage3D; + PFNGLTEXTURESUBIMAGE3DEXTPROC TextureSubImage3DEXT; + PFNGLTEXTUREVIEWPROC TextureView; + PFNGLTRACKMATRIXNVPROC TrackMatrixNV; + PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC TransformFeedbackAttribsNV; + PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC TransformFeedbackBufferBase; + PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC TransformFeedbackBufferRange; + PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC TransformFeedbackStreamAttribsNV; + PFNGLTRANSFORMFEEDBACKVARYINGSPROC TransformFeedbackVaryings; + PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC TransformFeedbackVaryingsEXT; + PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC TransformFeedbackVaryingsNV; + PFNGLTRANSFORMPATHNVPROC TransformPathNV; + PFNGLTRANSLATEXOESPROC TranslatexOES; + PFNGLUNIFORM1DPROC Uniform1d; + PFNGLUNIFORM1DVPROC Uniform1dv; + PFNGLUNIFORM1FPROC Uniform1f; + PFNGLUNIFORM1FARBPROC Uniform1fARB; + PFNGLUNIFORM1FVPROC Uniform1fv; + PFNGLUNIFORM1FVARBPROC Uniform1fvARB; + PFNGLUNIFORM1IPROC Uniform1i; + PFNGLUNIFORM1I64ARBPROC Uniform1i64ARB; + PFNGLUNIFORM1I64NVPROC Uniform1i64NV; + PFNGLUNIFORM1I64VARBPROC Uniform1i64vARB; + PFNGLUNIFORM1I64VNVPROC Uniform1i64vNV; + PFNGLUNIFORM1IARBPROC Uniform1iARB; + PFNGLUNIFORM1IVPROC Uniform1iv; + PFNGLUNIFORM1IVARBPROC Uniform1ivARB; + PFNGLUNIFORM1UIPROC Uniform1ui; + PFNGLUNIFORM1UI64ARBPROC Uniform1ui64ARB; + PFNGLUNIFORM1UI64NVPROC Uniform1ui64NV; + PFNGLUNIFORM1UI64VARBPROC Uniform1ui64vARB; + PFNGLUNIFORM1UI64VNVPROC Uniform1ui64vNV; + PFNGLUNIFORM1UIEXTPROC Uniform1uiEXT; + PFNGLUNIFORM1UIVPROC Uniform1uiv; + PFNGLUNIFORM1UIVEXTPROC Uniform1uivEXT; + PFNGLUNIFORM2DPROC Uniform2d; + PFNGLUNIFORM2DVPROC Uniform2dv; + PFNGLUNIFORM2FPROC Uniform2f; + PFNGLUNIFORM2FARBPROC Uniform2fARB; + PFNGLUNIFORM2FVPROC Uniform2fv; + PFNGLUNIFORM2FVARBPROC Uniform2fvARB; + PFNGLUNIFORM2IPROC Uniform2i; + PFNGLUNIFORM2I64ARBPROC Uniform2i64ARB; + PFNGLUNIFORM2I64NVPROC Uniform2i64NV; + PFNGLUNIFORM2I64VARBPROC Uniform2i64vARB; + PFNGLUNIFORM2I64VNVPROC Uniform2i64vNV; + PFNGLUNIFORM2IARBPROC Uniform2iARB; + PFNGLUNIFORM2IVPROC Uniform2iv; + PFNGLUNIFORM2IVARBPROC Uniform2ivARB; + PFNGLUNIFORM2UIPROC Uniform2ui; + PFNGLUNIFORM2UI64ARBPROC Uniform2ui64ARB; + PFNGLUNIFORM2UI64NVPROC Uniform2ui64NV; + PFNGLUNIFORM2UI64VARBPROC Uniform2ui64vARB; + PFNGLUNIFORM2UI64VNVPROC Uniform2ui64vNV; + PFNGLUNIFORM2UIEXTPROC Uniform2uiEXT; + PFNGLUNIFORM2UIVPROC Uniform2uiv; + PFNGLUNIFORM2UIVEXTPROC Uniform2uivEXT; + PFNGLUNIFORM3DPROC Uniform3d; + PFNGLUNIFORM3DVPROC Uniform3dv; + PFNGLUNIFORM3FPROC Uniform3f; + PFNGLUNIFORM3FARBPROC Uniform3fARB; + PFNGLUNIFORM3FVPROC Uniform3fv; + PFNGLUNIFORM3FVARBPROC Uniform3fvARB; + PFNGLUNIFORM3IPROC Uniform3i; + PFNGLUNIFORM3I64ARBPROC Uniform3i64ARB; + PFNGLUNIFORM3I64NVPROC Uniform3i64NV; + PFNGLUNIFORM3I64VARBPROC Uniform3i64vARB; + PFNGLUNIFORM3I64VNVPROC Uniform3i64vNV; + PFNGLUNIFORM3IARBPROC Uniform3iARB; + PFNGLUNIFORM3IVPROC Uniform3iv; + PFNGLUNIFORM3IVARBPROC Uniform3ivARB; + PFNGLUNIFORM3UIPROC Uniform3ui; + PFNGLUNIFORM3UI64ARBPROC Uniform3ui64ARB; + PFNGLUNIFORM3UI64NVPROC Uniform3ui64NV; + PFNGLUNIFORM3UI64VARBPROC Uniform3ui64vARB; + PFNGLUNIFORM3UI64VNVPROC Uniform3ui64vNV; + PFNGLUNIFORM3UIEXTPROC Uniform3uiEXT; + PFNGLUNIFORM3UIVPROC Uniform3uiv; + PFNGLUNIFORM3UIVEXTPROC Uniform3uivEXT; + PFNGLUNIFORM4DPROC Uniform4d; + PFNGLUNIFORM4DVPROC Uniform4dv; + PFNGLUNIFORM4FPROC Uniform4f; + PFNGLUNIFORM4FARBPROC Uniform4fARB; + PFNGLUNIFORM4FVPROC Uniform4fv; + PFNGLUNIFORM4FVARBPROC Uniform4fvARB; + PFNGLUNIFORM4IPROC Uniform4i; + PFNGLUNIFORM4I64ARBPROC Uniform4i64ARB; + PFNGLUNIFORM4I64NVPROC Uniform4i64NV; + PFNGLUNIFORM4I64VARBPROC Uniform4i64vARB; + PFNGLUNIFORM4I64VNVPROC Uniform4i64vNV; + PFNGLUNIFORM4IARBPROC Uniform4iARB; + PFNGLUNIFORM4IVPROC Uniform4iv; + PFNGLUNIFORM4IVARBPROC Uniform4ivARB; + PFNGLUNIFORM4UIPROC Uniform4ui; + PFNGLUNIFORM4UI64ARBPROC Uniform4ui64ARB; + PFNGLUNIFORM4UI64NVPROC Uniform4ui64NV; + PFNGLUNIFORM4UI64VARBPROC Uniform4ui64vARB; + PFNGLUNIFORM4UI64VNVPROC Uniform4ui64vNV; + PFNGLUNIFORM4UIEXTPROC Uniform4uiEXT; + PFNGLUNIFORM4UIVPROC Uniform4uiv; + PFNGLUNIFORM4UIVEXTPROC Uniform4uivEXT; + PFNGLUNIFORMBLOCKBINDINGPROC UniformBlockBinding; + PFNGLUNIFORMBUFFEREXTPROC UniformBufferEXT; + PFNGLUNIFORMHANDLEUI64ARBPROC UniformHandleui64ARB; + PFNGLUNIFORMHANDLEUI64NVPROC UniformHandleui64NV; + PFNGLUNIFORMHANDLEUI64VARBPROC UniformHandleui64vARB; + PFNGLUNIFORMHANDLEUI64VNVPROC UniformHandleui64vNV; + PFNGLUNIFORMMATRIX2DVPROC UniformMatrix2dv; + PFNGLUNIFORMMATRIX2FVPROC UniformMatrix2fv; + PFNGLUNIFORMMATRIX2FVARBPROC UniformMatrix2fvARB; + PFNGLUNIFORMMATRIX2X3DVPROC UniformMatrix2x3dv; + PFNGLUNIFORMMATRIX2X3FVPROC UniformMatrix2x3fv; + PFNGLUNIFORMMATRIX2X4DVPROC UniformMatrix2x4dv; + PFNGLUNIFORMMATRIX2X4FVPROC UniformMatrix2x4fv; + PFNGLUNIFORMMATRIX3DVPROC UniformMatrix3dv; + PFNGLUNIFORMMATRIX3FVPROC UniformMatrix3fv; + PFNGLUNIFORMMATRIX3FVARBPROC UniformMatrix3fvARB; + PFNGLUNIFORMMATRIX3X2DVPROC UniformMatrix3x2dv; + PFNGLUNIFORMMATRIX3X2FVPROC UniformMatrix3x2fv; + PFNGLUNIFORMMATRIX3X4DVPROC UniformMatrix3x4dv; + PFNGLUNIFORMMATRIX3X4FVPROC UniformMatrix3x4fv; + PFNGLUNIFORMMATRIX4DVPROC UniformMatrix4dv; + PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv; + PFNGLUNIFORMMATRIX4FVARBPROC UniformMatrix4fvARB; + PFNGLUNIFORMMATRIX4X2DVPROC UniformMatrix4x2dv; + PFNGLUNIFORMMATRIX4X2FVPROC UniformMatrix4x2fv; + PFNGLUNIFORMMATRIX4X3DVPROC UniformMatrix4x3dv; + PFNGLUNIFORMMATRIX4X3FVPROC UniformMatrix4x3fv; + PFNGLUNIFORMSUBROUTINESUIVPROC UniformSubroutinesuiv; + PFNGLUNIFORMUI64NVPROC Uniformui64NV; + PFNGLUNIFORMUI64VNVPROC Uniformui64vNV; + PFNGLUNLOCKARRAYSEXTPROC UnlockArraysEXT; + PFNGLUNMAPBUFFERPROC UnmapBuffer; + PFNGLUNMAPBUFFERARBPROC UnmapBufferARB; + PFNGLUNMAPNAMEDBUFFERPROC UnmapNamedBuffer; + PFNGLUNMAPNAMEDBUFFEREXTPROC UnmapNamedBufferEXT; + PFNGLUNMAPOBJECTBUFFERATIPROC UnmapObjectBufferATI; + PFNGLUNMAPTEXTURE2DINTELPROC UnmapTexture2DINTEL; + PFNGLUPDATEOBJECTBUFFERATIPROC UpdateObjectBufferATI; + PFNGLUPLOADGPUMASKNVXPROC UploadGpuMaskNVX; + PFNGLUSEPROGRAMPROC UseProgram; + PFNGLUSEPROGRAMOBJECTARBPROC UseProgramObjectARB; + PFNGLUSEPROGRAMSTAGESPROC UseProgramStages; + PFNGLUSESHADERPROGRAMEXTPROC UseShaderProgramEXT; + PFNGLVDPAUFININVPROC VDPAUFiniNV; + PFNGLVDPAUGETSURFACEIVNVPROC VDPAUGetSurfaceivNV; + PFNGLVDPAUINITNVPROC VDPAUInitNV; + PFNGLVDPAUISSURFACENVPROC VDPAUIsSurfaceNV; + PFNGLVDPAUMAPSURFACESNVPROC VDPAUMapSurfacesNV; + PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC VDPAURegisterOutputSurfaceNV; + PFNGLVDPAUREGISTERVIDEOSURFACENVPROC VDPAURegisterVideoSurfaceNV; + PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC + VDPAURegisterVideoSurfaceWithPictureStructureNV; + PFNGLVDPAUSURFACEACCESSNVPROC VDPAUSurfaceAccessNV; + PFNGLVDPAUUNMAPSURFACESNVPROC VDPAUUnmapSurfacesNV; + PFNGLVDPAUUNREGISTERSURFACENVPROC VDPAUUnregisterSurfaceNV; + PFNGLVALIDATEPROGRAMPROC ValidateProgram; + PFNGLVALIDATEPROGRAMARBPROC ValidateProgramARB; + PFNGLVALIDATEPROGRAMPIPELINEPROC ValidateProgramPipeline; + PFNGLVARIANTARRAYOBJECTATIPROC VariantArrayObjectATI; + PFNGLVARIANTPOINTEREXTPROC VariantPointerEXT; + PFNGLVARIANTBVEXTPROC VariantbvEXT; + PFNGLVARIANTDVEXTPROC VariantdvEXT; + PFNGLVARIANTFVEXTPROC VariantfvEXT; + PFNGLVARIANTIVEXTPROC VariantivEXT; + PFNGLVARIANTSVEXTPROC VariantsvEXT; + PFNGLVARIANTUBVEXTPROC VariantubvEXT; + PFNGLVARIANTUIVEXTPROC VariantuivEXT; + PFNGLVARIANTUSVEXTPROC VariantusvEXT; + PFNGLVERTEX2BOESPROC Vertex2bOES; + PFNGLVERTEX2BVOESPROC Vertex2bvOES; + PFNGLVERTEX2HNVPROC Vertex2hNV; + PFNGLVERTEX2HVNVPROC Vertex2hvNV; + PFNGLVERTEX2XOESPROC Vertex2xOES; + PFNGLVERTEX2XVOESPROC Vertex2xvOES; + PFNGLVERTEX3BOESPROC Vertex3bOES; + PFNGLVERTEX3BVOESPROC Vertex3bvOES; + PFNGLVERTEX3HNVPROC Vertex3hNV; + PFNGLVERTEX3HVNVPROC Vertex3hvNV; + PFNGLVERTEX3XOESPROC Vertex3xOES; + PFNGLVERTEX3XVOESPROC Vertex3xvOES; + PFNGLVERTEX4BOESPROC Vertex4bOES; + PFNGLVERTEX4BVOESPROC Vertex4bvOES; + PFNGLVERTEX4HNVPROC Vertex4hNV; + PFNGLVERTEX4HVNVPROC Vertex4hvNV; + PFNGLVERTEX4XOESPROC Vertex4xOES; + PFNGLVERTEX4XVOESPROC Vertex4xvOES; + PFNGLVERTEXARRAYATTRIBBINDINGPROC VertexArrayAttribBinding; + PFNGLVERTEXARRAYATTRIBFORMATPROC VertexArrayAttribFormat; + PFNGLVERTEXARRAYATTRIBIFORMATPROC VertexArrayAttribIFormat; + PFNGLVERTEXARRAYATTRIBLFORMATPROC VertexArrayAttribLFormat; + PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC VertexArrayBindVertexBufferEXT; + PFNGLVERTEXARRAYBINDINGDIVISORPROC VertexArrayBindingDivisor; + PFNGLVERTEXARRAYCOLOROFFSETEXTPROC VertexArrayColorOffsetEXT; + PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC VertexArrayEdgeFlagOffsetEXT; + PFNGLVERTEXARRAYELEMENTBUFFERPROC VertexArrayElementBuffer; + PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC VertexArrayFogCoordOffsetEXT; + PFNGLVERTEXARRAYINDEXOFFSETEXTPROC VertexArrayIndexOffsetEXT; + PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC VertexArrayMultiTexCoordOffsetEXT; + PFNGLVERTEXARRAYNORMALOFFSETEXTPROC VertexArrayNormalOffsetEXT; + PFNGLVERTEXARRAYPARAMETERIAPPLEPROC VertexArrayParameteriAPPLE; + PFNGLVERTEXARRAYRANGEAPPLEPROC VertexArrayRangeAPPLE; + PFNGLVERTEXARRAYRANGENVPROC VertexArrayRangeNV; + PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC VertexArraySecondaryColorOffsetEXT; + PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC VertexArrayTexCoordOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC VertexArrayVertexAttribBindingEXT; + PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC VertexArrayVertexAttribDivisorEXT; + PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC VertexArrayVertexAttribFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC VertexArrayVertexAttribIFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC VertexArrayVertexAttribIOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC VertexArrayVertexAttribLFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC VertexArrayVertexAttribLOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC VertexArrayVertexAttribOffsetEXT; + PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC VertexArrayVertexBindingDivisorEXT; + PFNGLVERTEXARRAYVERTEXBUFFERPROC VertexArrayVertexBuffer; + PFNGLVERTEXARRAYVERTEXBUFFERSPROC VertexArrayVertexBuffers; + PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC VertexArrayVertexOffsetEXT; + PFNGLVERTEXATTRIB1DPROC VertexAttrib1d; + PFNGLVERTEXATTRIB1DARBPROC VertexAttrib1dARB; + PFNGLVERTEXATTRIB1DNVPROC VertexAttrib1dNV; + PFNGLVERTEXATTRIB1DVPROC VertexAttrib1dv; + PFNGLVERTEXATTRIB1DVARBPROC VertexAttrib1dvARB; + PFNGLVERTEXATTRIB1DVNVPROC VertexAttrib1dvNV; + PFNGLVERTEXATTRIB1FPROC VertexAttrib1f; + PFNGLVERTEXATTRIB1FARBPROC VertexAttrib1fARB; + PFNGLVERTEXATTRIB1FNVPROC VertexAttrib1fNV; + PFNGLVERTEXATTRIB1FVPROC VertexAttrib1fv; + PFNGLVERTEXATTRIB1FVARBPROC VertexAttrib1fvARB; + PFNGLVERTEXATTRIB1FVNVPROC VertexAttrib1fvNV; + PFNGLVERTEXATTRIB1HNVPROC VertexAttrib1hNV; + PFNGLVERTEXATTRIB1HVNVPROC VertexAttrib1hvNV; + PFNGLVERTEXATTRIB1SPROC VertexAttrib1s; + PFNGLVERTEXATTRIB1SARBPROC VertexAttrib1sARB; + PFNGLVERTEXATTRIB1SNVPROC VertexAttrib1sNV; + PFNGLVERTEXATTRIB1SVPROC VertexAttrib1sv; + PFNGLVERTEXATTRIB1SVARBPROC VertexAttrib1svARB; + PFNGLVERTEXATTRIB1SVNVPROC VertexAttrib1svNV; + PFNGLVERTEXATTRIB2DPROC VertexAttrib2d; + PFNGLVERTEXATTRIB2DARBPROC VertexAttrib2dARB; + PFNGLVERTEXATTRIB2DNVPROC VertexAttrib2dNV; + PFNGLVERTEXATTRIB2DVPROC VertexAttrib2dv; + PFNGLVERTEXATTRIB2DVARBPROC VertexAttrib2dvARB; + PFNGLVERTEXATTRIB2DVNVPROC VertexAttrib2dvNV; + PFNGLVERTEXATTRIB2FPROC VertexAttrib2f; + PFNGLVERTEXATTRIB2FARBPROC VertexAttrib2fARB; + PFNGLVERTEXATTRIB2FNVPROC VertexAttrib2fNV; + PFNGLVERTEXATTRIB2FVPROC VertexAttrib2fv; + PFNGLVERTEXATTRIB2FVARBPROC VertexAttrib2fvARB; + PFNGLVERTEXATTRIB2FVNVPROC VertexAttrib2fvNV; + PFNGLVERTEXATTRIB2HNVPROC VertexAttrib2hNV; + PFNGLVERTEXATTRIB2HVNVPROC VertexAttrib2hvNV; + PFNGLVERTEXATTRIB2SPROC VertexAttrib2s; + PFNGLVERTEXATTRIB2SARBPROC VertexAttrib2sARB; + PFNGLVERTEXATTRIB2SNVPROC VertexAttrib2sNV; + PFNGLVERTEXATTRIB2SVPROC VertexAttrib2sv; + PFNGLVERTEXATTRIB2SVARBPROC VertexAttrib2svARB; + PFNGLVERTEXATTRIB2SVNVPROC VertexAttrib2svNV; + PFNGLVERTEXATTRIB3DPROC VertexAttrib3d; + PFNGLVERTEXATTRIB3DARBPROC VertexAttrib3dARB; + PFNGLVERTEXATTRIB3DNVPROC VertexAttrib3dNV; + PFNGLVERTEXATTRIB3DVPROC VertexAttrib3dv; + PFNGLVERTEXATTRIB3DVARBPROC VertexAttrib3dvARB; + PFNGLVERTEXATTRIB3DVNVPROC VertexAttrib3dvNV; + PFNGLVERTEXATTRIB3FPROC VertexAttrib3f; + PFNGLVERTEXATTRIB3FARBPROC VertexAttrib3fARB; + PFNGLVERTEXATTRIB3FNVPROC VertexAttrib3fNV; + PFNGLVERTEXATTRIB3FVPROC VertexAttrib3fv; + PFNGLVERTEXATTRIB3FVARBPROC VertexAttrib3fvARB; + PFNGLVERTEXATTRIB3FVNVPROC VertexAttrib3fvNV; + PFNGLVERTEXATTRIB3HNVPROC VertexAttrib3hNV; + PFNGLVERTEXATTRIB3HVNVPROC VertexAttrib3hvNV; + PFNGLVERTEXATTRIB3SPROC VertexAttrib3s; + PFNGLVERTEXATTRIB3SARBPROC VertexAttrib3sARB; + PFNGLVERTEXATTRIB3SNVPROC VertexAttrib3sNV; + PFNGLVERTEXATTRIB3SVPROC VertexAttrib3sv; + PFNGLVERTEXATTRIB3SVARBPROC VertexAttrib3svARB; + PFNGLVERTEXATTRIB3SVNVPROC VertexAttrib3svNV; + PFNGLVERTEXATTRIB4NBVPROC VertexAttrib4Nbv; + PFNGLVERTEXATTRIB4NBVARBPROC VertexAttrib4NbvARB; + PFNGLVERTEXATTRIB4NIVPROC VertexAttrib4Niv; + PFNGLVERTEXATTRIB4NIVARBPROC VertexAttrib4NivARB; + PFNGLVERTEXATTRIB4NSVPROC VertexAttrib4Nsv; + PFNGLVERTEXATTRIB4NSVARBPROC VertexAttrib4NsvARB; + PFNGLVERTEXATTRIB4NUBPROC VertexAttrib4Nub; + PFNGLVERTEXATTRIB4NUBARBPROC VertexAttrib4NubARB; + PFNGLVERTEXATTRIB4NUBVPROC VertexAttrib4Nubv; + PFNGLVERTEXATTRIB4NUBVARBPROC VertexAttrib4NubvARB; + PFNGLVERTEXATTRIB4NUIVPROC VertexAttrib4Nuiv; + PFNGLVERTEXATTRIB4NUIVARBPROC VertexAttrib4NuivARB; + PFNGLVERTEXATTRIB4NUSVPROC VertexAttrib4Nusv; + PFNGLVERTEXATTRIB4NUSVARBPROC VertexAttrib4NusvARB; + PFNGLVERTEXATTRIB4BVPROC VertexAttrib4bv; + PFNGLVERTEXATTRIB4BVARBPROC VertexAttrib4bvARB; + PFNGLVERTEXATTRIB4DPROC VertexAttrib4d; + PFNGLVERTEXATTRIB4DARBPROC VertexAttrib4dARB; + PFNGLVERTEXATTRIB4DNVPROC VertexAttrib4dNV; + PFNGLVERTEXATTRIB4DVPROC VertexAttrib4dv; + PFNGLVERTEXATTRIB4DVARBPROC VertexAttrib4dvARB; + PFNGLVERTEXATTRIB4DVNVPROC VertexAttrib4dvNV; + PFNGLVERTEXATTRIB4FPROC VertexAttrib4f; + PFNGLVERTEXATTRIB4FARBPROC VertexAttrib4fARB; + PFNGLVERTEXATTRIB4FNVPROC VertexAttrib4fNV; + PFNGLVERTEXATTRIB4FVPROC VertexAttrib4fv; + PFNGLVERTEXATTRIB4FVARBPROC VertexAttrib4fvARB; + PFNGLVERTEXATTRIB4FVNVPROC VertexAttrib4fvNV; + PFNGLVERTEXATTRIB4HNVPROC VertexAttrib4hNV; + PFNGLVERTEXATTRIB4HVNVPROC VertexAttrib4hvNV; + PFNGLVERTEXATTRIB4IVPROC VertexAttrib4iv; + PFNGLVERTEXATTRIB4IVARBPROC VertexAttrib4ivARB; + PFNGLVERTEXATTRIB4SPROC VertexAttrib4s; + PFNGLVERTEXATTRIB4SARBPROC VertexAttrib4sARB; + PFNGLVERTEXATTRIB4SNVPROC VertexAttrib4sNV; + PFNGLVERTEXATTRIB4SVPROC VertexAttrib4sv; + PFNGLVERTEXATTRIB4SVARBPROC VertexAttrib4svARB; + PFNGLVERTEXATTRIB4SVNVPROC VertexAttrib4svNV; + PFNGLVERTEXATTRIB4UBNVPROC VertexAttrib4ubNV; + PFNGLVERTEXATTRIB4UBVPROC VertexAttrib4ubv; + PFNGLVERTEXATTRIB4UBVARBPROC VertexAttrib4ubvARB; + PFNGLVERTEXATTRIB4UBVNVPROC VertexAttrib4ubvNV; + PFNGLVERTEXATTRIB4UIVPROC VertexAttrib4uiv; + PFNGLVERTEXATTRIB4UIVARBPROC VertexAttrib4uivARB; + PFNGLVERTEXATTRIB4USVPROC VertexAttrib4usv; + PFNGLVERTEXATTRIB4USVARBPROC VertexAttrib4usvARB; + PFNGLVERTEXATTRIBARRAYOBJECTATIPROC VertexAttribArrayObjectATI; + PFNGLVERTEXATTRIBBINDINGPROC VertexAttribBinding; + PFNGLVERTEXATTRIBDIVISORPROC VertexAttribDivisor; + PFNGLVERTEXATTRIBDIVISORARBPROC VertexAttribDivisorARB; + PFNGLVERTEXATTRIBFORMATPROC VertexAttribFormat; + PFNGLVERTEXATTRIBFORMATNVPROC VertexAttribFormatNV; + PFNGLVERTEXATTRIBI1IPROC VertexAttribI1i; + PFNGLVERTEXATTRIBI1IEXTPROC VertexAttribI1iEXT; + PFNGLVERTEXATTRIBI1IVPROC VertexAttribI1iv; + PFNGLVERTEXATTRIBI1IVEXTPROC VertexAttribI1ivEXT; + PFNGLVERTEXATTRIBI1UIPROC VertexAttribI1ui; + PFNGLVERTEXATTRIBI1UIEXTPROC VertexAttribI1uiEXT; + PFNGLVERTEXATTRIBI1UIVPROC VertexAttribI1uiv; + PFNGLVERTEXATTRIBI1UIVEXTPROC VertexAttribI1uivEXT; + PFNGLVERTEXATTRIBI2IPROC VertexAttribI2i; + PFNGLVERTEXATTRIBI2IEXTPROC VertexAttribI2iEXT; + PFNGLVERTEXATTRIBI2IVPROC VertexAttribI2iv; + PFNGLVERTEXATTRIBI2IVEXTPROC VertexAttribI2ivEXT; + PFNGLVERTEXATTRIBI2UIPROC VertexAttribI2ui; + PFNGLVERTEXATTRIBI2UIEXTPROC VertexAttribI2uiEXT; + PFNGLVERTEXATTRIBI2UIVPROC VertexAttribI2uiv; + PFNGLVERTEXATTRIBI2UIVEXTPROC VertexAttribI2uivEXT; + PFNGLVERTEXATTRIBI3IPROC VertexAttribI3i; + PFNGLVERTEXATTRIBI3IEXTPROC VertexAttribI3iEXT; + PFNGLVERTEXATTRIBI3IVPROC VertexAttribI3iv; + PFNGLVERTEXATTRIBI3IVEXTPROC VertexAttribI3ivEXT; + PFNGLVERTEXATTRIBI3UIPROC VertexAttribI3ui; + PFNGLVERTEXATTRIBI3UIEXTPROC VertexAttribI3uiEXT; + PFNGLVERTEXATTRIBI3UIVPROC VertexAttribI3uiv; + PFNGLVERTEXATTRIBI3UIVEXTPROC VertexAttribI3uivEXT; + PFNGLVERTEXATTRIBI4BVPROC VertexAttribI4bv; + PFNGLVERTEXATTRIBI4BVEXTPROC VertexAttribI4bvEXT; + PFNGLVERTEXATTRIBI4IPROC VertexAttribI4i; + PFNGLVERTEXATTRIBI4IEXTPROC VertexAttribI4iEXT; + PFNGLVERTEXATTRIBI4IVPROC VertexAttribI4iv; + PFNGLVERTEXATTRIBI4IVEXTPROC VertexAttribI4ivEXT; + PFNGLVERTEXATTRIBI4SVPROC VertexAttribI4sv; + PFNGLVERTEXATTRIBI4SVEXTPROC VertexAttribI4svEXT; + PFNGLVERTEXATTRIBI4UBVPROC VertexAttribI4ubv; + PFNGLVERTEXATTRIBI4UBVEXTPROC VertexAttribI4ubvEXT; + PFNGLVERTEXATTRIBI4UIPROC VertexAttribI4ui; + PFNGLVERTEXATTRIBI4UIEXTPROC VertexAttribI4uiEXT; + PFNGLVERTEXATTRIBI4UIVPROC VertexAttribI4uiv; + PFNGLVERTEXATTRIBI4UIVEXTPROC VertexAttribI4uivEXT; + PFNGLVERTEXATTRIBI4USVPROC VertexAttribI4usv; + PFNGLVERTEXATTRIBI4USVEXTPROC VertexAttribI4usvEXT; + PFNGLVERTEXATTRIBIFORMATPROC VertexAttribIFormat; + PFNGLVERTEXATTRIBIFORMATNVPROC VertexAttribIFormatNV; + PFNGLVERTEXATTRIBIPOINTERPROC VertexAttribIPointer; + PFNGLVERTEXATTRIBIPOINTEREXTPROC VertexAttribIPointerEXT; + PFNGLVERTEXATTRIBL1DPROC VertexAttribL1d; + PFNGLVERTEXATTRIBL1DEXTPROC VertexAttribL1dEXT; + PFNGLVERTEXATTRIBL1DVPROC VertexAttribL1dv; + PFNGLVERTEXATTRIBL1DVEXTPROC VertexAttribL1dvEXT; + PFNGLVERTEXATTRIBL1I64NVPROC VertexAttribL1i64NV; + PFNGLVERTEXATTRIBL1I64VNVPROC VertexAttribL1i64vNV; + PFNGLVERTEXATTRIBL1UI64ARBPROC VertexAttribL1ui64ARB; + PFNGLVERTEXATTRIBL1UI64NVPROC VertexAttribL1ui64NV; + PFNGLVERTEXATTRIBL1UI64VARBPROC VertexAttribL1ui64vARB; + PFNGLVERTEXATTRIBL1UI64VNVPROC VertexAttribL1ui64vNV; + PFNGLVERTEXATTRIBL2DPROC VertexAttribL2d; + PFNGLVERTEXATTRIBL2DEXTPROC VertexAttribL2dEXT; + PFNGLVERTEXATTRIBL2DVPROC VertexAttribL2dv; + PFNGLVERTEXATTRIBL2DVEXTPROC VertexAttribL2dvEXT; + PFNGLVERTEXATTRIBL2I64NVPROC VertexAttribL2i64NV; + PFNGLVERTEXATTRIBL2I64VNVPROC VertexAttribL2i64vNV; + PFNGLVERTEXATTRIBL2UI64NVPROC VertexAttribL2ui64NV; + PFNGLVERTEXATTRIBL2UI64VNVPROC VertexAttribL2ui64vNV; + PFNGLVERTEXATTRIBL3DPROC VertexAttribL3d; + PFNGLVERTEXATTRIBL3DEXTPROC VertexAttribL3dEXT; + PFNGLVERTEXATTRIBL3DVPROC VertexAttribL3dv; + PFNGLVERTEXATTRIBL3DVEXTPROC VertexAttribL3dvEXT; + PFNGLVERTEXATTRIBL3I64NVPROC VertexAttribL3i64NV; + PFNGLVERTEXATTRIBL3I64VNVPROC VertexAttribL3i64vNV; + PFNGLVERTEXATTRIBL3UI64NVPROC VertexAttribL3ui64NV; + PFNGLVERTEXATTRIBL3UI64VNVPROC VertexAttribL3ui64vNV; + PFNGLVERTEXATTRIBL4DPROC VertexAttribL4d; + PFNGLVERTEXATTRIBL4DEXTPROC VertexAttribL4dEXT; + PFNGLVERTEXATTRIBL4DVPROC VertexAttribL4dv; + PFNGLVERTEXATTRIBL4DVEXTPROC VertexAttribL4dvEXT; + PFNGLVERTEXATTRIBL4I64NVPROC VertexAttribL4i64NV; + PFNGLVERTEXATTRIBL4I64VNVPROC VertexAttribL4i64vNV; + PFNGLVERTEXATTRIBL4UI64NVPROC VertexAttribL4ui64NV; + PFNGLVERTEXATTRIBL4UI64VNVPROC VertexAttribL4ui64vNV; + PFNGLVERTEXATTRIBLFORMATPROC VertexAttribLFormat; + PFNGLVERTEXATTRIBLFORMATNVPROC VertexAttribLFormatNV; + PFNGLVERTEXATTRIBLPOINTERPROC VertexAttribLPointer; + PFNGLVERTEXATTRIBLPOINTEREXTPROC VertexAttribLPointerEXT; + PFNGLVERTEXATTRIBP1UIPROC VertexAttribP1ui; + PFNGLVERTEXATTRIBP1UIVPROC VertexAttribP1uiv; + PFNGLVERTEXATTRIBP2UIPROC VertexAttribP2ui; + PFNGLVERTEXATTRIBP2UIVPROC VertexAttribP2uiv; + PFNGLVERTEXATTRIBP3UIPROC VertexAttribP3ui; + PFNGLVERTEXATTRIBP3UIVPROC VertexAttribP3uiv; + PFNGLVERTEXATTRIBP4UIPROC VertexAttribP4ui; + PFNGLVERTEXATTRIBP4UIVPROC VertexAttribP4uiv; + PFNGLVERTEXATTRIBPARAMETERIAMDPROC VertexAttribParameteriAMD; + PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer; + PFNGLVERTEXATTRIBPOINTERARBPROC VertexAttribPointerARB; + PFNGLVERTEXATTRIBPOINTERNVPROC VertexAttribPointerNV; + PFNGLVERTEXATTRIBS1DVNVPROC VertexAttribs1dvNV; + PFNGLVERTEXATTRIBS1FVNVPROC VertexAttribs1fvNV; + PFNGLVERTEXATTRIBS1HVNVPROC VertexAttribs1hvNV; + PFNGLVERTEXATTRIBS1SVNVPROC VertexAttribs1svNV; + PFNGLVERTEXATTRIBS2DVNVPROC VertexAttribs2dvNV; + PFNGLVERTEXATTRIBS2FVNVPROC VertexAttribs2fvNV; + PFNGLVERTEXATTRIBS2HVNVPROC VertexAttribs2hvNV; + PFNGLVERTEXATTRIBS2SVNVPROC VertexAttribs2svNV; + PFNGLVERTEXATTRIBS3DVNVPROC VertexAttribs3dvNV; + PFNGLVERTEXATTRIBS3FVNVPROC VertexAttribs3fvNV; + PFNGLVERTEXATTRIBS3HVNVPROC VertexAttribs3hvNV; + PFNGLVERTEXATTRIBS3SVNVPROC VertexAttribs3svNV; + PFNGLVERTEXATTRIBS4DVNVPROC VertexAttribs4dvNV; + PFNGLVERTEXATTRIBS4FVNVPROC VertexAttribs4fvNV; + PFNGLVERTEXATTRIBS4HVNVPROC VertexAttribs4hvNV; + PFNGLVERTEXATTRIBS4SVNVPROC VertexAttribs4svNV; + PFNGLVERTEXATTRIBS4UBVNVPROC VertexAttribs4ubvNV; + PFNGLVERTEXBINDINGDIVISORPROC VertexBindingDivisor; + PFNGLVERTEXBLENDARBPROC VertexBlendARB; + PFNGLVERTEXBLENDENVFATIPROC VertexBlendEnvfATI; + PFNGLVERTEXBLENDENVIATIPROC VertexBlendEnviATI; + PFNGLVERTEXFORMATNVPROC VertexFormatNV; + PFNGLVERTEXPOINTEREXTPROC VertexPointerEXT; + PFNGLVERTEXPOINTERLISTIBMPROC VertexPointerListIBM; + PFNGLVERTEXPOINTERVINTELPROC VertexPointervINTEL; + PFNGLVERTEXSTREAM1DATIPROC VertexStream1dATI; + PFNGLVERTEXSTREAM1DVATIPROC VertexStream1dvATI; + PFNGLVERTEXSTREAM1FATIPROC VertexStream1fATI; + PFNGLVERTEXSTREAM1FVATIPROC VertexStream1fvATI; + PFNGLVERTEXSTREAM1IATIPROC VertexStream1iATI; + PFNGLVERTEXSTREAM1IVATIPROC VertexStream1ivATI; + PFNGLVERTEXSTREAM1SATIPROC VertexStream1sATI; + PFNGLVERTEXSTREAM1SVATIPROC VertexStream1svATI; + PFNGLVERTEXSTREAM2DATIPROC VertexStream2dATI; + PFNGLVERTEXSTREAM2DVATIPROC VertexStream2dvATI; + PFNGLVERTEXSTREAM2FATIPROC VertexStream2fATI; + PFNGLVERTEXSTREAM2FVATIPROC VertexStream2fvATI; + PFNGLVERTEXSTREAM2IATIPROC VertexStream2iATI; + PFNGLVERTEXSTREAM2IVATIPROC VertexStream2ivATI; + PFNGLVERTEXSTREAM2SATIPROC VertexStream2sATI; + PFNGLVERTEXSTREAM2SVATIPROC VertexStream2svATI; + PFNGLVERTEXSTREAM3DATIPROC VertexStream3dATI; + PFNGLVERTEXSTREAM3DVATIPROC VertexStream3dvATI; + PFNGLVERTEXSTREAM3FATIPROC VertexStream3fATI; + PFNGLVERTEXSTREAM3FVATIPROC VertexStream3fvATI; + PFNGLVERTEXSTREAM3IATIPROC VertexStream3iATI; + PFNGLVERTEXSTREAM3IVATIPROC VertexStream3ivATI; + PFNGLVERTEXSTREAM3SATIPROC VertexStream3sATI; + PFNGLVERTEXSTREAM3SVATIPROC VertexStream3svATI; + PFNGLVERTEXSTREAM4DATIPROC VertexStream4dATI; + PFNGLVERTEXSTREAM4DVATIPROC VertexStream4dvATI; + PFNGLVERTEXSTREAM4FATIPROC VertexStream4fATI; + PFNGLVERTEXSTREAM4FVATIPROC VertexStream4fvATI; + PFNGLVERTEXSTREAM4IATIPROC VertexStream4iATI; + PFNGLVERTEXSTREAM4IVATIPROC VertexStream4ivATI; + PFNGLVERTEXSTREAM4SATIPROC VertexStream4sATI; + PFNGLVERTEXSTREAM4SVATIPROC VertexStream4svATI; + PFNGLVERTEXWEIGHTPOINTEREXTPROC VertexWeightPointerEXT; + PFNGLVERTEXWEIGHTFEXTPROC VertexWeightfEXT; + PFNGLVERTEXWEIGHTFVEXTPROC VertexWeightfvEXT; + PFNGLVERTEXWEIGHTHNVPROC VertexWeighthNV; + PFNGLVERTEXWEIGHTHVNVPROC VertexWeighthvNV; + PFNGLVIDEOCAPTURENVPROC VideoCaptureNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC VideoCaptureStreamParameterdvNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC VideoCaptureStreamParameterfvNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC VideoCaptureStreamParameterivNV; + PFNGLVIEWPORTPROC Viewport; + PFNGLVIEWPORTARRAYVPROC ViewportArrayv; + PFNGLVIEWPORTINDEXEDFPROC ViewportIndexedf; + PFNGLVIEWPORTINDEXEDFVPROC ViewportIndexedfv; + PFNGLVIEWPORTPOSITIONWSCALENVPROC ViewportPositionWScaleNV; + PFNGLVIEWPORTSWIZZLENVPROC ViewportSwizzleNV; + PFNGLWAITSEMAPHOREEXTPROC WaitSemaphoreEXT; + PFNGLWAITSEMAPHOREUI64NVXPROC WaitSemaphoreui64NVX; + PFNGLWAITSYNCPROC WaitSync; + PFNGLWAITVKSEMAPHORENVPROC WaitVkSemaphoreNV; + PFNGLWEIGHTPATHSNVPROC WeightPathsNV; + PFNGLWEIGHTPOINTERARBPROC WeightPointerARB; + PFNGLWEIGHTBVARBPROC WeightbvARB; + PFNGLWEIGHTDVARBPROC WeightdvARB; + PFNGLWEIGHTFVARBPROC WeightfvARB; + PFNGLWEIGHTIVARBPROC WeightivARB; + PFNGLWEIGHTSVARBPROC WeightsvARB; + PFNGLWEIGHTUBVARBPROC WeightubvARB; + PFNGLWEIGHTUIVARBPROC WeightuivARB; + PFNGLWEIGHTUSVARBPROC WeightusvARB; + PFNGLWINDOWPOS2DARBPROC WindowPos2dARB; + PFNGLWINDOWPOS2DMESAPROC WindowPos2dMESA; + PFNGLWINDOWPOS2DVARBPROC WindowPos2dvARB; + PFNGLWINDOWPOS2DVMESAPROC WindowPos2dvMESA; + PFNGLWINDOWPOS2FARBPROC WindowPos2fARB; + PFNGLWINDOWPOS2FMESAPROC WindowPos2fMESA; + PFNGLWINDOWPOS2FVARBPROC WindowPos2fvARB; + PFNGLWINDOWPOS2FVMESAPROC WindowPos2fvMESA; + PFNGLWINDOWPOS2IARBPROC WindowPos2iARB; + PFNGLWINDOWPOS2IMESAPROC WindowPos2iMESA; + PFNGLWINDOWPOS2IVARBPROC WindowPos2ivARB; + PFNGLWINDOWPOS2IVMESAPROC WindowPos2ivMESA; + PFNGLWINDOWPOS2SARBPROC WindowPos2sARB; + PFNGLWINDOWPOS2SMESAPROC WindowPos2sMESA; + PFNGLWINDOWPOS2SVARBPROC WindowPos2svARB; + PFNGLWINDOWPOS2SVMESAPROC WindowPos2svMESA; + PFNGLWINDOWPOS3DARBPROC WindowPos3dARB; + PFNGLWINDOWPOS3DMESAPROC WindowPos3dMESA; + PFNGLWINDOWPOS3DVARBPROC WindowPos3dvARB; + PFNGLWINDOWPOS3DVMESAPROC WindowPos3dvMESA; + PFNGLWINDOWPOS3FARBPROC WindowPos3fARB; + PFNGLWINDOWPOS3FMESAPROC WindowPos3fMESA; + PFNGLWINDOWPOS3FVARBPROC WindowPos3fvARB; + PFNGLWINDOWPOS3FVMESAPROC WindowPos3fvMESA; + PFNGLWINDOWPOS3IARBPROC WindowPos3iARB; + PFNGLWINDOWPOS3IMESAPROC WindowPos3iMESA; + PFNGLWINDOWPOS3IVARBPROC WindowPos3ivARB; + PFNGLWINDOWPOS3IVMESAPROC WindowPos3ivMESA; + PFNGLWINDOWPOS3SARBPROC WindowPos3sARB; + PFNGLWINDOWPOS3SMESAPROC WindowPos3sMESA; + PFNGLWINDOWPOS3SVARBPROC WindowPos3svARB; + PFNGLWINDOWPOS3SVMESAPROC WindowPos3svMESA; + PFNGLWINDOWPOS4DMESAPROC WindowPos4dMESA; + PFNGLWINDOWPOS4DVMESAPROC WindowPos4dvMESA; + PFNGLWINDOWPOS4FMESAPROC WindowPos4fMESA; + PFNGLWINDOWPOS4FVMESAPROC WindowPos4fvMESA; + PFNGLWINDOWPOS4IMESAPROC WindowPos4iMESA; + PFNGLWINDOWPOS4IVMESAPROC WindowPos4ivMESA; + PFNGLWINDOWPOS4SMESAPROC WindowPos4sMESA; + PFNGLWINDOWPOS4SVMESAPROC WindowPos4svMESA; + PFNGLWINDOWRECTANGLESEXTPROC WindowRectanglesEXT; + PFNGLWRITEMASKEXTPROC WriteMaskEXT; +} GladGLContext; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/StgSharp.Native/sn-head/khrplatform.h b/StgSharp.Native/sn-head/khrplatform.h new file mode 100644 index 00000000..5cd17f65 --- /dev/null +++ b/StgSharp.Native/sn-head/khrplatform.h @@ -0,0 +1,310 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 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. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +#define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) +/* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +#define KHRONOS_APICALL +#elif defined(_WIN32) +#define KHRONOS_APICALL __declspec(dllimport) +#elif defined(__SYMBIAN32__) +#define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +#define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +#define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) +/* Win32 but not WinCE */ +#define KHRONOS_APIENTRY __stdcall +#else +#define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined(__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || \ + defined(__SCO__) || defined(__USLC__) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/StgSharp.Native/sn-head/sn_intrinsic.h b/StgSharp.Native/sn-head/sn_intrinsic.h index 3a34a6f1..62e9faad 100644 --- a/StgSharp.Native/sn-head/sn_intrinsic.h +++ b/StgSharp.Native/sn-head/sn_intrinsic.h @@ -140,9 +140,13 @@ typedef void(SN_DECL *PNL_PROC_LRAS)(mat_panel *left, mat_panel *right, mat_pane typedef void(SN_DECL *PNL_PROC_RAS)(mat_panel *right, mat_panel *ans, scalar_pack *scalar); #define PNL_PROC(T_type, T_arch, T_op_name) T_type##_pnl_##T_op_name##_##T_arch +<<<<<<< HEAD #define DECLARE_PNL_PROC_ANS(T_type, T_arch, T_op_name) \ INTERNAL void SN_DECL PNL_PROC(T_type, T_arch, \ T_op_name)(MAT_PANEL_##T_arch##(T_type) *restrict ans) +======= + +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 #define DECLARE_PNL_PROC_LEFT_RIGHT_ANS(T_type, T_arch, T_op_name) \ INTERNAL void SN_DECL PNL_PROC(T_type, T_arch, \ T_op_name)(MAT_PANEL_##T_arch##(T_type) const *left, \ @@ -225,6 +229,7 @@ DECLARE_BUF_PROC_ANS_SCALAR(float, 512, fill); #pragma region fma +<<<<<<< HEAD DECLARE_PNL_PROC_ANS(float, sse, clear); DECLARE_PNL_PROC_ANS(float, avx, clear); DECLARE_PNL_PROC_ANS(float, 512, clear); @@ -233,6 +238,10 @@ DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, sse, fma); DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, avx, fma); DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, avx_fma, fma); DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, 512, fma); +======= +DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, sse, fma); +DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, avx, fma); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 #pragma endregion @@ -274,7 +283,10 @@ typedef struct sn_intrinsic { BUF_PROC_LRA f32_buffer_sub; KER_PROC_RA f32_buffer_transpose; PANEL_PROC f32_build_panel; +<<<<<<< HEAD PANEL_PROC f32_clear_panel; +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 VECTORNORMALIZEPROC f32_normalize_3; PNL_PROC_LRA f32_panel_fma; PANEL_PROC f32_store_panel; diff --git a/StgSharp.Native/sn-head/sn_matkernel.h b/StgSharp.Native/sn-head/sn_matkernel.h index c322f983..306f0fff 100644 --- a/StgSharp.Native/sn-head/sn_matkernel.h +++ b/StgSharp.Native/sn-head/sn_matkernel.h @@ -117,11 +117,16 @@ extern __declspec(align(64)) sn_zero_kernel_u64 SN_ZERO_KERNEL; int col_index, int row_index) /* Declarations for AVX float variant */ +<<<<<<< HEAD DECLARE_BUILD_PANEL(sse, float); DECLARE_BUILD_PANEL(avx, float); DECLARE_BUILD_PANEL(512, float); DECLARE_STORE_PANEL(sse, float); DECLARE_STORE_PANEL(avx, float); DECLARE_STORE_PANEL(512, float); +======= +DECLARE_BUILD_PANEL(avx, float); +DECLARE_STORE_PANEL(avx, float); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 #endif /* SN_MATKERNEL */ diff --git a/StgSharp.Native/sn-head/ssc_internal.h b/StgSharp.Native/sn-head/ssc_internal.h new file mode 100644 index 00000000..35921e9f --- /dev/null +++ b/StgSharp.Native/sn-head/ssc_internal.h @@ -0,0 +1,32 @@ +#ifdef _MSC_VER +#pragma once +#endif + +#include + +#ifndef SSC_INTERNAL +#define SSC_INTERNAL + +#ifdef _MSC_VER +#define _CRT_SECURE_NO_WARNINGS 1 +#define WIN32_LEAN_AND_MEAN +#define SSCDECL __cdecl +#define SSCAPI __declspec(dllexport) +#define FORCEINLINE __forceinline +#include +#elif defined(__clang__) || defined(__GNUC__) +#define SSCDECL __attribute__((cdecl)) +#define SSCAPI __attribute__((dllexport)) +#define FORCEINLINE __attribute__((always_inline)) +#else +#define SSCAPI +#define SSCDECL +#define FORCEINLINE +#endif + +#define SSCAPI_DEFINE + +#define PRIVATE static +#define INTERNAL extern + +#endif // diff --git a/StgSharp.Native/sn-head/ssc_intrinsic.h b/StgSharp.Native/sn-head/ssc_intrinsic.h new file mode 100644 index 00000000..e66e467a --- /dev/null +++ b/StgSharp.Native/sn-head/ssc_intrinsic.h @@ -0,0 +1,176 @@ +#ifdef _MSC_VER +#pragma once +#endif + +#ifndef SSC_INTRIN +#define SSC_INTRIN + +#include "StgSharpC.h" +#include +#include + +#ifdef _MSC_VER +#include +#include +#endif + +#define LASTTWO(x) (x & 3) +#define LAST(x) (x & 3) +#define get_align_begin(x) ((x + 15) & (~15)) + +#define SSE_INSERT(source, target, reset3, reset2, reset1, reset0) \ + (LASTTWO(source - 1) << 6) | (LASTTWO(target - 1) << 4) | (LAST(reset3) << 3) | \ + (LAST(reset2) << 2) | (LAST(reset1) << 1) | LAST(reset0) +#define SSE_INSERT_SIMPLE(source, target) SSE_INSERT(source, target, 0, 0, 0, 0) +#define M256_PERMUTE(s3, s2, s1, s0) (LASTTWO(s3) << 6) | (LASTTWO(s2) << 4) | (LASTTWO(s1) << 2) | (LASTTWO(s0) + +#define zero_vec _mm_setzero_ps() +#define zero_vec_256 _mm256_setzero_ps() + +typedef union uint64_u { + uint64_t u64; + uint32_t u32[2]; +} uint64_u; + +typedef union mat_kernel{ + __m128 xmm[4]; + __m256 ymm[2]; + __m512 zmm[1]; + float m[4][4]; +}mat_kernel; + +typedef union column_2 { + __m256 stream; + __m128 column[2]; + float m[4][2]; +} __2_columnset; + +typedef union column_3 { + __m256 part; + __m128 column[3]; + float m[4][3]; +} __3_columnset; + +typedef union column_4 { + __m512 stream; + __m256 half[2]; + __m128 column[4]; + float m[4][4]; +} __4_columnset; + +typedef void(SSCDECL *VECTORNORMALIZEPROC)(__m128 *source, __m128 *target); +typedef void(SSCDECL *DOTPROC)(void *transpose, __m128 *vector, __m128 *ans); +typedef void(SSCDECL *MATRIXTRANSPOSEPROC)(void *source, void *target); +typedef void(SSCDECL *MATRIXDETPROC)(void *mat, void *transpose); +typedef void(SSCDECL *MATARITHMETIC)(void *left, void *right, void *ans); +typedef void(SSCDECL *SCALERMATARITHMETIC)(void *left, void *right, void *ans); +typedef uint64_t(SSCDECL *FACTORIALROC)(int n); + + +#pragma region matix function + +INTERNAL void normalize(__m128 *source, __m128 *target); + +INTERNAL void SSCDECL addmatrix2_sse(__2_columnset *left, __2_columnset *right, __2_columnset *ans); +INTERNAL void SSCDECL addmatrix2_avx(__2_columnset *left, __2_columnset *right, __2_columnset *ans); +INTERNAL void SSCDECL submatrix2_sse(__2_columnset *left, __2_columnset *right, __2_columnset *ans); +INTERNAL void SSCDECL addmatrix2_avx(__2_columnset *left, __2_columnset *right, __2_columnset *ans); +INTERNAL void SSCDECL transpose23(__2_columnset const *source, __3_columnset *target); +INTERNAL void SSCDECL transpose24(__2_columnset const *source, __4_columnset *target); + +INTERNAL void SSCDECL addmatrix3_sse(__3_columnset *left, __3_columnset *right, __3_columnset *ans); +INTERNAL void SSCDECL addmatrix3_avx(__3_columnset *left, __3_columnset *right, __3_columnset *ans); +INTERNAL void SSCDECL addmatrix3_512(__3_columnset *left, __3_columnset *right, __3_columnset *ans); +INTERNAL void SSCDECL submatrix3_sse(__3_columnset *left, __3_columnset *right, __3_columnset *ans); +INTERNAL void SSCDECL submatrix3_avx(__3_columnset *left, __3_columnset *right, __3_columnset *ans); +INTERNAL void SSCDECL submatrix3_512(__3_columnset *left, __3_columnset *right, __3_columnset *ans); +INTERNAL void SSCDECL transpose32(__3_columnset const *source, __2_columnset *target); +INTERNAL void SSCDECL transpose33(__3_columnset const *source, __3_columnset *target); +INTERNAL void SSCDECL transpose34(__3_columnset const *source, __4_columnset *target); +INTERNAL float SSCDECL det_mat3(__3_columnset *matrix, __3_columnset *tranpose); + +INTERNAL void SSCDECL addmatrix4_sse(__4_columnset *left, __4_columnset *right, __4_columnset *ans); +INTERNAL void SSCDECL addmatrix4_avx(__4_columnset *left, __4_columnset *right, __4_columnset *ans); +INTERNAL void SSCDECL addmatrix4_512(__4_columnset *left, __4_columnset *right, __4_columnset *ans); +INTERNAL void SSCDECL submatrix4_sse(__4_columnset *left, __4_columnset *right, __4_columnset *ans); +INTERNAL void SSCDECL submatrix4_avx(__4_columnset *left, __4_columnset *right, __4_columnset *ans); +INTERNAL void SSCDECL submatrix4_512(__4_columnset *left, __4_columnset *right, __4_columnset *ans); +INTERNAL void SSCDECL transpose42(__4_columnset const *source, __2_columnset *target); +INTERNAL void SSCDECL transpose43(__4_columnset const *source, __3_columnset *target); +INTERNAL void SSCDECL transpose44(__4_columnset const *source, __4_columnset *target); +INTERNAL float SSCDECL det_mat4(__4_columnset *matrix, __4_columnset *transpose); + +#pragma endregion + +#pragma region dot + +INTERNAL void FORCEINLINE SSCDECL dot_41_sse(__4_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void FORCEINLINE SSCDECL dot_31_sse(__3_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void FORCEINLINE SSCDECL dot_41_avx(__4_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void FORCEINLINE SSCDECL dot_31_avx(__3_columnset *transpose, __m128 *vector, __m128 *ans); + +INTERNAL void SSCDECL dot_32_sse(__3_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void SSCDECL dot_32_avx(__3_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void SSCDECL dot_42_sse(__4_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void SSCDECL dot_42_avx(__4_columnset *transpose, __m128 *vector, __m128 *ans); + +INTERNAL void SSCDECL dot_43_sse(__4_columnset *transpose, __m128 *vector, __m128 *ans); +INTERNAL void SSCDECL dot_43_avx(__4_columnset *transpose, __m128 *vector, __m128 *ans); +//INTERNAL void SSCDECL dot_43_512(__4_columnset *transpose, __m128 *vector, __m128 *ans); + +#pragma endregion + +#pragma region scaler_simd +INTERNAL uint64_t SSCDECL factorial_simd_sse(int n); +#pragma endregion + +#pragma region string + +INTERNAL int SSCDECL city_hash_simplify_sse(byte const *str, int length); +INTERNAL int SSCDECL index_pair_sse(short const *str, uint32_t target, int length); + +#pragma endregion + +typedef struct ssc_intrinsic { + MATARITHMETIC add_m2; + MATARITHMETIC add_m3; + MATARITHMETIC add_m4; + int (*city_hash_simplify)(byte *str, int length); + MATRIXDETPROC det_matrix33; + MATRIXDETPROC det_matrix44; + DOTPROC dot_31; + DOTPROC dot_32; + DOTPROC dot_41; + DOTPROC dot_42; + DOTPROC dot_43; + FACTORIALROC factorial_simd; + int (*index_pair)(short const *str, uint32_t target, int length); + VECTORNORMALIZEPROC normalize_3; + MATARITHMETIC sub_m2; + MATARITHMETIC sub_m3; + MATARITHMETIC sub_m4; + MATRIXTRANSPOSEPROC transpose_23; + MATRIXTRANSPOSEPROC transpose_24; + MATRIXTRANSPOSEPROC transpose_32; + MATRIXTRANSPOSEPROC transpose_33; + MATRIXTRANSPOSEPROC transpose_34; + MATRIXTRANSPOSEPROC transpose_42; + MATRIXTRANSPOSEPROC transpose_43; + MATRIXTRANSPOSEPROC transpose_44; +} ssc_intrinsic; + +typedef enum most_advanced_instruction { +#ifdef _MSC_VER + SSE = __IA_SUPPORT_SSE42, + AVX256 = __IA_SUPPORT_VECTOR256, + AVX512 = __IA_SUPPORT_VECTOR512, + NEON +#else + SSE, + AVX256, + AVX512, + NEON +#endif +} most_advanced_instruction; + +#endif // !SSC_INTRIN diff --git a/StgSharp.Native/sn-head/wgl.h b/StgSharp.Native/sn-head/wgl.h new file mode 100644 index 00000000..a48052de --- /dev/null +++ b/StgSharp.Native/sn-head/wgl.h @@ -0,0 +1,1076 @@ +/** + * Loader generated by glad 2.0.5 on Fri Feb 16 00:51:03 2024 + * + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + * + * Generator: C/C++ + * Specification: wgl + * Extensions: 57 + * + * APIs: + * - wgl=1.0 + * + * Options: + * - ALIAS = False + * - DEBUG = False + * - HEADER_ONLY = False + * - LOADER = False + * - MX = True + * - ON_DEMAND = False + * + * Commandline: + * --api='wgl=1.0' --extensions='WGL_3DFX_multisample,WGL_3DL_stereo_control,WGL_AMD_gpu_association,WGL_ARB_buffer_region,WGL_ARB_context_flush_control,WGL_ARB_create_context,WGL_ARB_create_context_no_error,WGL_ARB_create_context_profile,WGL_ARB_create_context_robustness,WGL_ARB_extensions_string,WGL_ARB_framebuffer_sRGB,WGL_ARB_make_current_read,WGL_ARB_multisample,WGL_ARB_pbuffer,WGL_ARB_pixel_format,WGL_ARB_pixel_format_float,WGL_ARB_render_texture,WGL_ARB_robustness_application_isolation,WGL_ARB_robustness_share_group_isolation,WGL_ATI_pixel_format_float,WGL_ATI_render_texture_rectangle,WGL_EXT_colorspace,WGL_EXT_create_context_es2_profile,WGL_EXT_create_context_es_profile,WGL_EXT_depth_float,WGL_EXT_display_color_table,WGL_EXT_extensions_string,WGL_EXT_framebuffer_sRGB,WGL_EXT_make_current_read,WGL_EXT_multisample,WGL_EXT_pbuffer,WGL_EXT_pixel_format,WGL_EXT_pixel_format_packed_float,WGL_EXT_swap_control,WGL_EXT_swap_control_tear,WGL_I3D_digital_video_control,WGL_I3D_gamma,WGL_I3D_genlock,WGL_I3D_image_buffer,WGL_I3D_swap_frame_lock,WGL_I3D_swap_frame_usage,WGL_NV_DX_interop,WGL_NV_DX_interop2,WGL_NV_copy_image,WGL_NV_delay_before_swap,WGL_NV_float_buffer,WGL_NV_gpu_affinity,WGL_NV_multigpu_context,WGL_NV_multisample_coverage,WGL_NV_present_video,WGL_NV_render_depth_texture,WGL_NV_render_texture_rectangle,WGL_NV_swap_group,WGL_NV_vertex_array_range,WGL_NV_video_capture,WGL_NV_video_output,WGL_OML_sync_control' c --mx + * + * Online: + * http://glad.sh/#api=wgl%3D1.0&extensions=WGL_3DFX_multisample%2CWGL_3DL_stereo_control%2CWGL_AMD_gpu_association%2CWGL_ARB_buffer_region%2CWGL_ARB_context_flush_control%2CWGL_ARB_create_context%2CWGL_ARB_create_context_no_error%2CWGL_ARB_create_context_profile%2CWGL_ARB_create_context_robustness%2CWGL_ARB_extensions_string%2CWGL_ARB_framebuffer_sRGB%2CWGL_ARB_make_current_read%2CWGL_ARB_multisample%2CWGL_ARB_pbuffer%2CWGL_ARB_pixel_format%2CWGL_ARB_pixel_format_float%2CWGL_ARB_render_texture%2CWGL_ARB_robustness_application_isolation%2CWGL_ARB_robustness_share_group_isolation%2CWGL_ATI_pixel_format_float%2CWGL_ATI_render_texture_rectangle%2CWGL_EXT_colorspace%2CWGL_EXT_create_context_es2_profile%2CWGL_EXT_create_context_es_profile%2CWGL_EXT_depth_float%2CWGL_EXT_display_color_table%2CWGL_EXT_extensions_string%2CWGL_EXT_framebuffer_sRGB%2CWGL_EXT_make_current_read%2CWGL_EXT_multisample%2CWGL_EXT_pbuffer%2CWGL_EXT_pixel_format%2CWGL_EXT_pixel_format_packed_float%2CWGL_EXT_swap_control%2CWGL_EXT_swap_control_tear%2CWGL_I3D_digital_video_control%2CWGL_I3D_gamma%2CWGL_I3D_genlock%2CWGL_I3D_image_buffer%2CWGL_I3D_swap_frame_lock%2CWGL_I3D_swap_frame_usage%2CWGL_NV_DX_interop%2CWGL_NV_DX_interop2%2CWGL_NV_copy_image%2CWGL_NV_delay_before_swap%2CWGL_NV_float_buffer%2CWGL_NV_gpu_affinity%2CWGL_NV_multigpu_context%2CWGL_NV_multisample_coverage%2CWGL_NV_present_video%2CWGL_NV_render_depth_texture%2CWGL_NV_render_texture_rectangle%2CWGL_NV_swap_group%2CWGL_NV_vertex_array_range%2CWGL_NV_video_capture%2CWGL_NV_video_output%2CWGL_OML_sync_control&generator=c&options=MX + * + */ + +#ifndef GLAD_WGL_H_ +#define GLAD_WGL_H_ + +#include +#include "gl.h" + +#define GLAD_WGL + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef GLAD_PLATFORM_H_ +#define GLAD_PLATFORM_H_ + +#ifndef GLAD_PLATFORM_WIN32 +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) +#define GLAD_PLATFORM_WIN32 1 +#else +#define GLAD_PLATFORM_WIN32 0 +#endif +#endif + +#ifndef GLAD_PLATFORM_APPLE +#ifdef __APPLE__ +#define GLAD_PLATFORM_APPLE 1 +#else +#define GLAD_PLATFORM_APPLE 0 +#endif +#endif + +#ifndef GLAD_PLATFORM_EMSCRIPTEN +#ifdef __EMSCRIPTEN__ +#define GLAD_PLATFORM_EMSCRIPTEN 1 +#else +#define GLAD_PLATFORM_EMSCRIPTEN 0 +#endif +#endif + +#ifndef GLAD_PLATFORM_UWP +#if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) +#ifdef __has_include +#if __has_include() +#define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 +#endif +#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ +#define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 +#endif +#endif + +#ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY +#include +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && \ + WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#define GLAD_PLATFORM_UWP 1 +#endif +#endif + +#ifndef GLAD_PLATFORM_UWP +#define GLAD_PLATFORM_UWP 0 +#endif +#endif + +#ifdef __GNUC__ +#define GLAD_GNUC_EXTENSION __extension__ +#else +#define GLAD_GNUC_EXTENSION +#endif + +#define GLAD_UNUSED(x) (void)(x) + +#ifndef GLAD_API_CALL +#if defined(GLAD_API_CALL_EXPORT) +#if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) +#if defined(GLAD_API_CALL_EXPORT_BUILD) +#if defined(__GNUC__) +#define GLAD_API_CALL __attribute__((dllexport)) extern +#else +#define GLAD_API_CALL __declspec(dllexport) extern +#endif +#else +#if defined(__GNUC__) +#define GLAD_API_CALL __attribute__((dllimport)) extern +#else +#define GLAD_API_CALL __declspec(dllimport) extern +#endif +#endif +#elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) +#define GLAD_API_CALL __attribute__((visibility("default"))) extern +#else +#define GLAD_API_CALL extern +#endif +#else +#define GLAD_API_CALL extern +#endif +#endif + +#ifdef APIENTRY +#define GLAD_API_PTR APIENTRY +#elif GLAD_PLATFORM_WIN32 +#define GLAD_API_PTR __stdcall +#else +#define GLAD_API_PTR +#endif + +#ifndef GLAPI +#define GLAPI GLAD_API_CALL +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY GLAD_API_PTR +#endif + +#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) +#define GLAD_VERSION_MAJOR(version) (version / 10000) +#define GLAD_VERSION_MINOR(version) (version % 10000) + +#define GLAD_GENERATOR_VERSION "2.0.5" + +typedef void (*GLADapiproc)(void); + +typedef GLADapiproc (*GLADloadfunc)(const char *name); +typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); + +typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); +typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, + ...); + +#endif /* GLAD_PLATFORM_H_ */ + +#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 +#define ERROR_INVALID_PROFILE_ARB 0x2096 +#define ERROR_INVALID_VERSION_ARB 0x2095 +#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_ACCESS_READ_ONLY_NV 0x00000000 +#define WGL_ACCESS_READ_WRITE_NV 0x00000001 +#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 +#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 +#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_COLORSPACE_EXT 0x309D +#define WGL_COLORSPACE_LINEAR_EXT 0x308A +#define WGL_COLORSPACE_SRGB_EXT 0x3089 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_COLOR_SAMPLES_NV 0x20B9 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC +#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD +#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE +#define WGL_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA +#define WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB +#define WGL_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define WGL_COVERAGE_SAMPLES_NV 0x2042 +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 +#define WGL_DEPTH_FLOAT_EXT 0x2040 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_FONT_LINES 0 +#define WGL_FONT_POLYGONS 1 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GPU_CLOCK_AMD 0x21A4 +#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define WGL_GPU_NUM_PIPES_AMD 0x21A5 +#define WGL_GPU_NUM_RB_AMD 0x21A7 +#define WGL_GPU_NUM_SIMD_AMD 0x21A6 +#define WGL_GPU_NUM_SPI_AMD 0x21A8 +#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define WGL_GPU_RAM_AMD 0x21A3 +#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 +#define WGL_GPU_VENDOR_AMD 0x1F00 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_LOST_ARB 0x2036 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_SAMPLES_3DFX 0x2061 +#define WGL_SAMPLES_ARB 0x2042 +#define WGL_SAMPLES_EXT 0x2042 +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 +#define WGL_STEREO_ARB 0x2012 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EXT 0x2012 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_MAIN_PLANE 0x00000001 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_SWAP_OVERLAY1 0x00000002 +#define WGL_SWAP_OVERLAY10 0x00000400 +#define WGL_SWAP_OVERLAY11 0x00000800 +#define WGL_SWAP_OVERLAY12 0x00001000 +#define WGL_SWAP_OVERLAY13 0x00002000 +#define WGL_SWAP_OVERLAY14 0x00004000 +#define WGL_SWAP_OVERLAY15 0x00008000 +#define WGL_SWAP_OVERLAY2 0x00000004 +#define WGL_SWAP_OVERLAY3 0x00000008 +#define WGL_SWAP_OVERLAY4 0x00000010 +#define WGL_SWAP_OVERLAY5 0x00000020 +#define WGL_SWAP_OVERLAY6 0x00000040 +#define WGL_SWAP_OVERLAY7 0x00000080 +#define WGL_SWAP_OVERLAY8 0x00000100 +#define WGL_SWAP_OVERLAY9 0x00000200 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_SWAP_UNDERLAY1 0x00010000 +#define WGL_SWAP_UNDERLAY10 0x02000000 +#define WGL_SWAP_UNDERLAY11 0x04000000 +#define WGL_SWAP_UNDERLAY12 0x08000000 +#define WGL_SWAP_UNDERLAY13 0x10000000 +#define WGL_SWAP_UNDERLAY14 0x20000000 +#define WGL_SWAP_UNDERLAY15 0x40000000 +#define WGL_SWAP_UNDERLAY2 0x00020000 +#define WGL_SWAP_UNDERLAY3 0x00040000 +#define WGL_SWAP_UNDERLAY4 0x00080000 +#define WGL_SWAP_UNDERLAY5 0x00100000 +#define WGL_SWAP_UNDERLAY6 0x00200000 +#define WGL_SWAP_UNDERLAY7 0x00400000 +#define WGL_SWAP_UNDERLAY8 0x00800000 +#define WGL_SWAP_UNDERLAY9 0x01000000 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +#define WGL_TYPE_COLORINDEX_EXT 0x202C +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 +#define WGL_UNIQUE_ID_NV 0x20CE +#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 +#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 +#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 +#define WGL_VIDEO_OUT_FIELD_1 0x20C9 +#define WGL_VIDEO_OUT_FIELD_2 0x20CA +#define WGL_VIDEO_OUT_FRAME 0x20C8 +#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB +#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC + +struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +}; +DECLARE_HANDLE(HPBUFFERARB); +DECLARE_HANDLE(HPBUFFEREXT); +DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); +DECLARE_HANDLE(HPVIDEODEV); +DECLARE_HANDLE(HPGPUNV); +DECLARE_HANDLE(HGPUNV); +DECLARE_HANDLE(HVIDEOINPUTDEVICENV); +typedef struct _GPU_DEVICE GPU_DEVICE; +typedef struct _GPU_DEVICE *PGPU_DEVICE; + +#define WGL_VERSION_1_0 1 +GLAD_API_CALL int GLAD_WGL_VERSION_1_0; +#define WGL_3DFX_multisample 1 +GLAD_API_CALL int GLAD_WGL_3DFX_multisample; +#define WGL_3DL_stereo_control 1 +GLAD_API_CALL int GLAD_WGL_3DL_stereo_control; +#define WGL_AMD_gpu_association 1 +GLAD_API_CALL int GLAD_WGL_AMD_gpu_association; +#define WGL_ARB_buffer_region 1 +GLAD_API_CALL int GLAD_WGL_ARB_buffer_region; +#define WGL_ARB_context_flush_control 1 +GLAD_API_CALL int GLAD_WGL_ARB_context_flush_control; +#define WGL_ARB_create_context 1 +GLAD_API_CALL int GLAD_WGL_ARB_create_context; +#define WGL_ARB_create_context_no_error 1 +GLAD_API_CALL int GLAD_WGL_ARB_create_context_no_error; +#define WGL_ARB_create_context_profile 1 +GLAD_API_CALL int GLAD_WGL_ARB_create_context_profile; +#define WGL_ARB_create_context_robustness 1 +GLAD_API_CALL int GLAD_WGL_ARB_create_context_robustness; +#define WGL_ARB_extensions_string 1 +GLAD_API_CALL int GLAD_WGL_ARB_extensions_string; +#define WGL_ARB_framebuffer_sRGB 1 +GLAD_API_CALL int GLAD_WGL_ARB_framebuffer_sRGB; +#define WGL_ARB_make_current_read 1 +GLAD_API_CALL int GLAD_WGL_ARB_make_current_read; +#define WGL_ARB_multisample 1 +GLAD_API_CALL int GLAD_WGL_ARB_multisample; +#define WGL_ARB_pbuffer 1 +GLAD_API_CALL int GLAD_WGL_ARB_pbuffer; +#define WGL_ARB_pixel_format 1 +GLAD_API_CALL int GLAD_WGL_ARB_pixel_format; +#define WGL_ARB_pixel_format_float 1 +GLAD_API_CALL int GLAD_WGL_ARB_pixel_format_float; +#define WGL_ARB_render_texture 1 +GLAD_API_CALL int GLAD_WGL_ARB_render_texture; +#define WGL_ARB_robustness_application_isolation 1 +GLAD_API_CALL int GLAD_WGL_ARB_robustness_application_isolation; +#define WGL_ARB_robustness_share_group_isolation 1 +GLAD_API_CALL int GLAD_WGL_ARB_robustness_share_group_isolation; +#define WGL_ATI_pixel_format_float 1 +GLAD_API_CALL int GLAD_WGL_ATI_pixel_format_float; +#define WGL_ATI_render_texture_rectangle 1 +GLAD_API_CALL int GLAD_WGL_ATI_render_texture_rectangle; +#define WGL_EXT_colorspace 1 +GLAD_API_CALL int GLAD_WGL_EXT_colorspace; +#define WGL_EXT_create_context_es2_profile 1 +GLAD_API_CALL int GLAD_WGL_EXT_create_context_es2_profile; +#define WGL_EXT_create_context_es_profile 1 +GLAD_API_CALL int GLAD_WGL_EXT_create_context_es_profile; +#define WGL_EXT_depth_float 1 +GLAD_API_CALL int GLAD_WGL_EXT_depth_float; +#define WGL_EXT_display_color_table 1 +GLAD_API_CALL int GLAD_WGL_EXT_display_color_table; +#define WGL_EXT_extensions_string 1 +GLAD_API_CALL int GLAD_WGL_EXT_extensions_string; +#define WGL_EXT_framebuffer_sRGB 1 +GLAD_API_CALL int GLAD_WGL_EXT_framebuffer_sRGB; +#define WGL_EXT_make_current_read 1 +GLAD_API_CALL int GLAD_WGL_EXT_make_current_read; +#define WGL_EXT_multisample 1 +GLAD_API_CALL int GLAD_WGL_EXT_multisample; +#define WGL_EXT_pbuffer 1 +GLAD_API_CALL int GLAD_WGL_EXT_pbuffer; +#define WGL_EXT_pixel_format 1 +GLAD_API_CALL int GLAD_WGL_EXT_pixel_format; +#define WGL_EXT_pixel_format_packed_float 1 +GLAD_API_CALL int GLAD_WGL_EXT_pixel_format_packed_float; +#define WGL_EXT_swap_control 1 +GLAD_API_CALL int GLAD_WGL_EXT_swap_control; +#define WGL_EXT_swap_control_tear 1 +GLAD_API_CALL int GLAD_WGL_EXT_swap_control_tear; +#define WGL_I3D_digital_video_control 1 +GLAD_API_CALL int GLAD_WGL_I3D_digital_video_control; +#define WGL_I3D_gamma 1 +GLAD_API_CALL int GLAD_WGL_I3D_gamma; +#define WGL_I3D_genlock 1 +GLAD_API_CALL int GLAD_WGL_I3D_genlock; +#define WGL_I3D_image_buffer 1 +GLAD_API_CALL int GLAD_WGL_I3D_image_buffer; +#define WGL_I3D_swap_frame_lock 1 +GLAD_API_CALL int GLAD_WGL_I3D_swap_frame_lock; +#define WGL_I3D_swap_frame_usage 1 +GLAD_API_CALL int GLAD_WGL_I3D_swap_frame_usage; +#define WGL_NV_DX_interop 1 +GLAD_API_CALL int GLAD_WGL_NV_DX_interop; +#define WGL_NV_DX_interop2 1 +GLAD_API_CALL int GLAD_WGL_NV_DX_interop2; +#define WGL_NV_copy_image 1 +GLAD_API_CALL int GLAD_WGL_NV_copy_image; +#define WGL_NV_delay_before_swap 1 +GLAD_API_CALL int GLAD_WGL_NV_delay_before_swap; +#define WGL_NV_float_buffer 1 +GLAD_API_CALL int GLAD_WGL_NV_float_buffer; +#define WGL_NV_gpu_affinity 1 +GLAD_API_CALL int GLAD_WGL_NV_gpu_affinity; +#define WGL_NV_multigpu_context 1 +GLAD_API_CALL int GLAD_WGL_NV_multigpu_context; +#define WGL_NV_multisample_coverage 1 +GLAD_API_CALL int GLAD_WGL_NV_multisample_coverage; +#define WGL_NV_present_video 1 +GLAD_API_CALL int GLAD_WGL_NV_present_video; +#define WGL_NV_render_depth_texture 1 +GLAD_API_CALL int GLAD_WGL_NV_render_depth_texture; +#define WGL_NV_render_texture_rectangle 1 +GLAD_API_CALL int GLAD_WGL_NV_render_texture_rectangle; +#define WGL_NV_swap_group 1 +GLAD_API_CALL int GLAD_WGL_NV_swap_group; +#define WGL_NV_vertex_array_range 1 +GLAD_API_CALL int GLAD_WGL_NV_vertex_array_range; +#define WGL_NV_video_capture 1 +GLAD_API_CALL int GLAD_WGL_NV_video_capture; +#define WGL_NV_video_output 1 +GLAD_API_CALL int GLAD_WGL_NV_video_output; +#define WGL_OML_sync_control 1 +GLAD_API_CALL int GLAD_WGL_OML_sync_control; + +typedef int(GLAD_API_PTR *PFNCHOOSEPIXELFORMATPROC)(HDC hDc, const PIXELFORMATDESCRIPTOR *pPfd); +typedef int(GLAD_API_PTR *PFNDESCRIBEPIXELFORMATPROC)(HDC hdc, int ipfd, UINT cjpfd, + PIXELFORMATDESCRIPTOR *ppfd); +typedef UINT(GLAD_API_PTR *PFNGETENHMETAFILEPIXELFORMATPROC)(HENHMETAFILE hemf, UINT cbBuffer, + PIXELFORMATDESCRIPTOR *ppfd); +typedef int(GLAD_API_PTR *PFNGETPIXELFORMATPROC)(HDC hdc); +typedef BOOL(GLAD_API_PTR *PFNSETPIXELFORMATPROC)(HDC hdc, int ipfd, + const PIXELFORMATDESCRIPTOR *ppfd); +typedef BOOL(GLAD_API_PTR *PFNSWAPBUFFERSPROC)(HDC hdc); +typedef void *(GLAD_API_PTR *PFNWGLALLOCATEMEMORYNVPROC)(GLsizei size, GLfloat readfreq, + GLfloat writefreq, GLfloat priority); +typedef BOOL(GLAD_API_PTR *PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const HANDLE *pEvent, + const LPVOID *pAddress, + const DWORD *pSize, UINT count); +typedef BOOL(GLAD_API_PTR *PFNWGLBEGINFRAMETRACKINGI3DPROC)(void); +typedef GLboolean(GLAD_API_PTR *PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef BOOL(GLAD_API_PTR *PFNWGLBINDSWAPBARRIERNVPROC)(GLuint group, GLuint barrier); +typedef BOOL(GLAD_API_PTR *PFNWGLBINDTEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL(GLAD_API_PTR *PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)(UINT uVideoSlot, + HVIDEOINPUTDEVICENV hDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLBINDVIDEODEVICENVPROC)(HDC hDc, unsigned int uVideoSlot, + HVIDEOOUTPUTDEVICENV hVideoDevice, + const int *piAttribList); +typedef BOOL(GLAD_API_PTR *PFNWGLBINDVIDEOIMAGENVPROC)(HPVIDEODEV hVideoDevice, + HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef VOID(GLAD_API_PTR *PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)( + HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, + GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef BOOL(GLAD_API_PTR *PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int *piAttribIList, + const FLOAT *pfAttribFList, + UINT nMaxFormats, int *piFormats, + UINT *nNumFormats); +typedef BOOL(GLAD_API_PTR *PFNWGLCHOOSEPIXELFORMATEXTPROC)(HDC hdc, const int *piAttribIList, + const FLOAT *pfAttribFList, + UINT nMaxFormats, int *piFormats, + UINT *nNumFormats); +typedef BOOL(GLAD_API_PTR *PFNWGLCOPYCONTEXTPROC)(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask); +typedef BOOL(GLAD_API_PTR *PFNWGLCOPYIMAGESUBDATANVPROC)( + HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, + GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, + GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef HDC(GLAD_API_PTR *PFNWGLCREATEAFFINITYDCNVPROC)(const HGPUNV *phGpuList); +typedef HGLRC(GLAD_API_PTR *PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)(UINT id); +typedef HGLRC(GLAD_API_PTR *PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(UINT id, + HGLRC hShareContext, + const int *attribList); +typedef HANDLE(GLAD_API_PTR *PFNWGLCREATEBUFFERREGIONARBPROC)(HDC hDC, int iLayerPlane, UINT uType); +typedef HGLRC(GLAD_API_PTR *PFNWGLCREATECONTEXTPROC)(HDC hDc); +typedef HGLRC(GLAD_API_PTR *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, + const int *attribList); +typedef GLboolean(GLAD_API_PTR *PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef LPVOID(GLAD_API_PTR *PFNWGLCREATEIMAGEBUFFERI3DPROC)(HDC hDC, DWORD dwSize, UINT uFlags); +typedef HGLRC(GLAD_API_PTR *PFNWGLCREATELAYERCONTEXTPROC)(HDC hDc, int level); +typedef HPBUFFERARB(GLAD_API_PTR *PFNWGLCREATEPBUFFERARBPROC)(HDC hDC, int iPixelFormat, int iWidth, + int iHeight, const int *piAttribList); +typedef HPBUFFEREXT(GLAD_API_PTR *PFNWGLCREATEPBUFFEREXTPROC)(HDC hDC, int iPixelFormat, int iWidth, + int iHeight, const int *piAttribList); +typedef BOOL(GLAD_API_PTR *PFNWGLDXCLOSEDEVICENVPROC)(HANDLE hDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLDXLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, + HANDLE *hObjects); +typedef BOOL(GLAD_API_PTR *PFNWGLDXOBJECTACCESSNVPROC)(HANDLE hObject, GLenum access); +typedef HANDLE(GLAD_API_PTR *PFNWGLDXOPENDEVICENVPROC)(void *dxDevice); +typedef HANDLE(GLAD_API_PTR *PFNWGLDXREGISTEROBJECTNVPROC)(HANDLE hDevice, void *dxObject, + GLuint name, GLenum type, GLenum access); +typedef BOOL(GLAD_API_PTR *PFNWGLDXSETRESOURCESHAREHANDLENVPROC)(void *dxObject, + HANDLE shareHandle); +typedef BOOL(GLAD_API_PTR *PFNWGLDXUNLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, + HANDLE *hObjects); +typedef BOOL(GLAD_API_PTR *PFNWGLDXUNREGISTEROBJECTNVPROC)(HANDLE hDevice, HANDLE hObject); +typedef BOOL(GLAD_API_PTR *PFNWGLDELAYBEFORESWAPNVPROC)(HDC hDC, GLfloat seconds); +typedef BOOL(GLAD_API_PTR *PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)(HGLRC hglrc); +typedef VOID(GLAD_API_PTR *PFNWGLDELETEBUFFERREGIONARBPROC)(HANDLE hRegion); +typedef BOOL(GLAD_API_PTR *PFNWGLDELETECONTEXTPROC)(HGLRC oldContext); +typedef BOOL(GLAD_API_PTR *PFNWGLDELETEDCNVPROC)(HDC hdc); +typedef BOOL(GLAD_API_PTR *PFNWGLDESCRIBELAYERPLANEPROC)(HDC hDc, int pixelFormat, int layerPlane, + UINT nBytes, LAYERPLANEDESCRIPTOR *plpd); +typedef VOID(GLAD_API_PTR *PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef BOOL(GLAD_API_PTR *PFNWGLDESTROYIMAGEBUFFERI3DPROC)(HDC hDC, LPVOID pAddress); +typedef BOOL(GLAD_API_PTR *PFNWGLDESTROYPBUFFERARBPROC)(HPBUFFERARB hPbuffer); +typedef BOOL(GLAD_API_PTR *PFNWGLDESTROYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer); +typedef BOOL(GLAD_API_PTR *PFNWGLDISABLEFRAMELOCKI3DPROC)(void); +typedef BOOL(GLAD_API_PTR *PFNWGLDISABLEGENLOCKI3DPROC)(HDC hDC); +typedef BOOL(GLAD_API_PTR *PFNWGLENABLEFRAMELOCKI3DPROC)(void); +typedef BOOL(GLAD_API_PTR *PFNWGLENABLEGENLOCKI3DPROC)(HDC hDC); +typedef BOOL(GLAD_API_PTR *PFNWGLENDFRAMETRACKINGI3DPROC)(void); +typedef BOOL(GLAD_API_PTR *PFNWGLENUMGPUDEVICESNVPROC)(HGPUNV hGpu, UINT iDeviceIndex, + PGPU_DEVICE lpGpuDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)(HDC hAffinityDC, UINT iGpuIndex, + HGPUNV *hGpu); +typedef BOOL(GLAD_API_PTR *PFNWGLENUMGPUSNVPROC)(UINT iGpuIndex, HGPUNV *phGpu); +typedef UINT(GLAD_API_PTR *PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)( + HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +typedef int(GLAD_API_PTR *PFNWGLENUMERATEVIDEODEVICESNVPROC)(HDC hDc, + HVIDEOOUTPUTDEVICENV *phDeviceList); +typedef void(GLAD_API_PTR *PFNWGLFREEMEMORYNVPROC)(void *pointer); +typedef BOOL(GLAD_API_PTR *PFNWGLGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT uRate); +typedef BOOL(GLAD_API_PTR *PFNWGLGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT uDelay); +typedef BOOL(GLAD_API_PTR *PFNWGLGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT uEdge); +typedef BOOL(GLAD_API_PTR *PFNWGLGENLOCKSOURCEI3DPROC)(HDC hDC, UINT uSource); +typedef UINT(GLAD_API_PTR *PFNWGLGETCONTEXTGPUIDAMDPROC)(HGLRC hglrc); +typedef HGLRC(GLAD_API_PTR *PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); +typedef HGLRC(GLAD_API_PTR *PFNWGLGETCURRENTCONTEXTPROC)(void); +typedef HDC(GLAD_API_PTR *PFNWGLGETCURRENTDCPROC)(void); +typedef HDC(GLAD_API_PTR *PFNWGLGETCURRENTREADDCARBPROC)(void); +typedef HDC(GLAD_API_PTR *PFNWGLGETCURRENTREADDCEXTPROC)(void); +typedef BOOL(GLAD_API_PTR *PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, + int *piValue); +typedef const char *(GLAD_API_PTR *PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc); +typedef const char *(GLAD_API_PTR *PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void); +typedef BOOL(GLAD_API_PTR *PFNWGLGETFRAMEUSAGEI3DPROC)(float *pUsage); +typedef UINT(GLAD_API_PTR *PFNWGLGETGPUIDSAMDPROC)(UINT maxCount, UINT *ids); +typedef INT(GLAD_API_PTR *PFNWGLGETGPUINFOAMDPROC)(UINT id, INT property, GLenum dataType, + UINT size, void *data); +typedef BOOL(GLAD_API_PTR *PFNWGLGETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, USHORT *puRed, + USHORT *puGreen, USHORT *puBlue); +typedef BOOL(GLAD_API_PTR *PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, + int *piValue); +typedef BOOL(GLAD_API_PTR *PFNWGLGETGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT *uRate); +typedef BOOL(GLAD_API_PTR *PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT *uDelay); +typedef BOOL(GLAD_API_PTR *PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT *uEdge); +typedef BOOL(GLAD_API_PTR *PFNWGLGETGENLOCKSOURCEI3DPROC)(HDC hDC, UINT *uSource); +typedef int(GLAD_API_PTR *PFNWGLGETLAYERPALETTEENTRIESPROC)(HDC hdc, int iLayerPlane, int iStart, + int cEntries, COLORREF *pcr); +typedef BOOL(GLAD_API_PTR *PFNWGLGETMSCRATEOMLPROC)(HDC hdc, INT32 *numerator, INT32 *denominator); +typedef HDC(GLAD_API_PTR *PFNWGLGETPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer); +typedef HDC(GLAD_API_PTR *PFNWGLGETPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer); +typedef BOOL(GLAD_API_PTR *PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat, + int iLayerPlane, UINT nAttributes, + const int *piAttributes, + FLOAT *pfValues); +typedef BOOL(GLAD_API_PTR *PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)(HDC hdc, int iPixelFormat, + int iLayerPlane, UINT nAttributes, + int *piAttributes, FLOAT *pfValues); +typedef BOOL(GLAD_API_PTR *PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat, + int iLayerPlane, UINT nAttributes, + const int *piAttributes, + int *piValues); +typedef BOOL(GLAD_API_PTR *PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)(HDC hdc, int iPixelFormat, + int iLayerPlane, UINT nAttributes, + int *piAttributes, int *piValues); +typedef PROC(GLAD_API_PTR *PFNWGLGETPROCADDRESSPROC)(LPCSTR lpszProc); +typedef int(GLAD_API_PTR *PFNWGLGETSWAPINTERVALEXTPROC)(void); +typedef BOOL(GLAD_API_PTR *PFNWGLGETSYNCVALUESOMLPROC)(HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); +typedef BOOL(GLAD_API_PTR *PFNWGLGETVIDEODEVICENVPROC)(HDC hDC, int numDevices, + HPVIDEODEV *hVideoDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLGETVIDEOINFONVPROC)(HPVIDEODEV hpVideoDevice, + unsigned long *pulCounterOutputPbuffer, + unsigned long *pulCounterOutputVideo); +typedef BOOL(GLAD_API_PTR *PFNWGLISENABLEDFRAMELOCKI3DPROC)(BOOL *pFlag); +typedef BOOL(GLAD_API_PTR *PFNWGLISENABLEDGENLOCKI3DPROC)(HDC hDC, BOOL *pFlag); +typedef BOOL(GLAD_API_PTR *PFNWGLJOINSWAPGROUPNVPROC)(HDC hDC, GLuint group); +typedef GLboolean(GLAD_API_PTR *PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)(const GLushort *table, + GLuint length); +typedef BOOL(GLAD_API_PTR *PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)(HDC hDc, + HVIDEOINPUTDEVICENV hDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(HGLRC hglrc); +typedef BOOL(GLAD_API_PTR *PFNWGLMAKECONTEXTCURRENTARBPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef BOOL(GLAD_API_PTR *PFNWGLMAKECONTEXTCURRENTEXTPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef BOOL(GLAD_API_PTR *PFNWGLMAKECURRENTPROC)(HDC hDc, HGLRC newContext); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYCURRENTCONTEXTNVPROC)(int iAttribute, int *piValue); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYFRAMECOUNTNVPROC)(HDC hDC, GLuint *count); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYFRAMELOCKMASTERI3DPROC)(BOOL *pFlag); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYFRAMETRACKINGI3DPROC)(DWORD *pFrameCount, + DWORD *pMissedFrames, + float *pLastMissedUsage); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)(HDC hDC, UINT *uMaxLineDelay, + UINT *uMaxPixelDelay); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYMAXSWAPGROUPSNVPROC)(HDC hDC, GLuint *maxGroups, + GLuint *maxBarriers); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYPBUFFERARBPROC)(HPBUFFERARB hPbuffer, int iAttribute, + int *piValue); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer, int iAttribute, + int *piValue); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYSWAPGROUPNVPROC)(HDC hDC, GLuint *group, GLuint *barrier); +typedef BOOL(GLAD_API_PTR *PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)(HDC hDc, + HVIDEOINPUTDEVICENV hDevice, + int iAttribute, int *piValue); +typedef BOOL(GLAD_API_PTR *PFNWGLREALIZELAYERPALETTEPROC)(HDC hdc, int iLayerPlane, BOOL bRealize); +typedef BOOL(GLAD_API_PTR *PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const LPVOID *pAddress, + UINT count); +typedef int(GLAD_API_PTR *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer, HDC hDC); +typedef int(GLAD_API_PTR *PFNWGLRELEASEPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer, HDC hDC); +typedef BOOL(GLAD_API_PTR *PFNWGLRELEASETEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL(GLAD_API_PTR *PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)(HDC hDc, + HVIDEOINPUTDEVICENV hDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLRELEASEVIDEODEVICENVPROC)(HPVIDEODEV hVideoDevice); +typedef BOOL(GLAD_API_PTR *PFNWGLRELEASEVIDEOIMAGENVPROC)(HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL(GLAD_API_PTR *PFNWGLRESETFRAMECOUNTNVPROC)(HDC hDC); +typedef BOOL(GLAD_API_PTR *PFNWGLRESTOREBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, + int width, int height, int xSrc, + int ySrc); +typedef BOOL(GLAD_API_PTR *PFNWGLSAVEBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, + int height); +typedef BOOL(GLAD_API_PTR *PFNWGLSENDPBUFFERTOVIDEONVPROC)(HPBUFFERARB hPbuffer, int iBufferType, + unsigned long *pulCounterPbuffer, + BOOL bBlock); +typedef BOOL(GLAD_API_PTR *PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, + const int *piValue); +typedef BOOL(GLAD_API_PTR *PFNWGLSETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, const USHORT *puRed, + const USHORT *puGreen, const USHORT *puBlue); +typedef BOOL(GLAD_API_PTR *PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, + const int *piValue); +typedef int(GLAD_API_PTR *PFNWGLSETLAYERPALETTEENTRIESPROC)(HDC hdc, int iLayerPlane, int iStart, + int cEntries, const COLORREF *pcr); +typedef BOOL(GLAD_API_PTR *PFNWGLSETPBUFFERATTRIBARBPROC)(HPBUFFERARB hPbuffer, + const int *piAttribList); +typedef BOOL(GLAD_API_PTR *PFNWGLSETSTEREOEMITTERSTATE3DLPROC)(HDC hDC, UINT uState); +typedef BOOL(GLAD_API_PTR *PFNWGLSHARELISTSPROC)(HGLRC hrcSrvShare, HGLRC hrcSrvSource); +typedef INT64(GLAD_API_PTR *PFNWGLSWAPBUFFERSMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, + INT64 remainder); +typedef BOOL(GLAD_API_PTR *PFNWGLSWAPINTERVALEXTPROC)(int interval); +typedef BOOL(GLAD_API_PTR *PFNWGLSWAPLAYERBUFFERSPROC)(HDC hdc, UINT fuFlags); +typedef INT64(GLAD_API_PTR *PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)(HDC hdc, INT fuPlanes, + INT64 target_msc, INT64 divisor, + INT64 remainder); +typedef BOOL(GLAD_API_PTR *PFNWGLUSEFONTBITMAPSPROC)(HDC hDC, DWORD first, DWORD count, + DWORD listBase); +typedef BOOL(GLAD_API_PTR *PFNWGLUSEFONTBITMAPSAPROC)(HDC hDC, DWORD first, DWORD count, + DWORD listBase); +typedef BOOL(GLAD_API_PTR *PFNWGLUSEFONTBITMAPSWPROC)(HDC hDC, DWORD first, DWORD count, + DWORD listBase); +typedef BOOL(GLAD_API_PTR *PFNWGLUSEFONTOUTLINESPROC)(HDC hDC, DWORD first, DWORD count, + DWORD listBase, FLOAT deviation, + FLOAT extrusion, int format, + LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL(GLAD_API_PTR *PFNWGLUSEFONTOUTLINESAPROC)(HDC hDC, DWORD first, DWORD count, + DWORD listBase, FLOAT deviation, + FLOAT extrusion, int format, + LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL(GLAD_API_PTR *PFNWGLUSEFONTOUTLINESWPROC)(HDC hDC, DWORD first, DWORD count, + DWORD listBase, FLOAT deviation, + FLOAT extrusion, int format, + LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL(GLAD_API_PTR *PFNWGLWAITFORMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, + INT64 remainder, INT64 *ust, INT64 *msc, + INT64 *sbc); +typedef BOOL(GLAD_API_PTR *PFNWGLWAITFORSBCOMLPROC)(HDC hdc, INT64 target_sbc, INT64 *ust, + INT64 *msc, INT64 *sbc); + +GLAD_API_CALL PFNWGLALLOCATEMEMORYNVPROC glad_wglAllocateMemoryNV; +#define wglAllocateMemoryNV glad_wglAllocateMemoryNV +GLAD_API_CALL PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC glad_wglAssociateImageBufferEventsI3D; +#define wglAssociateImageBufferEventsI3D glad_wglAssociateImageBufferEventsI3D +GLAD_API_CALL PFNWGLBEGINFRAMETRACKINGI3DPROC glad_wglBeginFrameTrackingI3D; +#define wglBeginFrameTrackingI3D glad_wglBeginFrameTrackingI3D +GLAD_API_CALL PFNWGLBINDDISPLAYCOLORTABLEEXTPROC glad_wglBindDisplayColorTableEXT; +#define wglBindDisplayColorTableEXT glad_wglBindDisplayColorTableEXT +GLAD_API_CALL PFNWGLBINDSWAPBARRIERNVPROC glad_wglBindSwapBarrierNV; +#define wglBindSwapBarrierNV glad_wglBindSwapBarrierNV +GLAD_API_CALL PFNWGLBINDTEXIMAGEARBPROC glad_wglBindTexImageARB; +#define wglBindTexImageARB glad_wglBindTexImageARB +GLAD_API_CALL PFNWGLBINDVIDEOCAPTUREDEVICENVPROC glad_wglBindVideoCaptureDeviceNV; +#define wglBindVideoCaptureDeviceNV glad_wglBindVideoCaptureDeviceNV +GLAD_API_CALL PFNWGLBINDVIDEODEVICENVPROC glad_wglBindVideoDeviceNV; +#define wglBindVideoDeviceNV glad_wglBindVideoDeviceNV +GLAD_API_CALL PFNWGLBINDVIDEOIMAGENVPROC glad_wglBindVideoImageNV; +#define wglBindVideoImageNV glad_wglBindVideoImageNV +GLAD_API_CALL PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC glad_wglBlitContextFramebufferAMD; +#define wglBlitContextFramebufferAMD glad_wglBlitContextFramebufferAMD +GLAD_API_CALL PFNWGLCHOOSEPIXELFORMATARBPROC glad_wglChoosePixelFormatARB; +#define wglChoosePixelFormatARB glad_wglChoosePixelFormatARB +GLAD_API_CALL PFNWGLCHOOSEPIXELFORMATEXTPROC glad_wglChoosePixelFormatEXT; +#define wglChoosePixelFormatEXT glad_wglChoosePixelFormatEXT +GLAD_API_CALL PFNWGLCOPYIMAGESUBDATANVPROC glad_wglCopyImageSubDataNV; +#define wglCopyImageSubDataNV glad_wglCopyImageSubDataNV +GLAD_API_CALL PFNWGLCREATEAFFINITYDCNVPROC glad_wglCreateAffinityDCNV; +#define wglCreateAffinityDCNV glad_wglCreateAffinityDCNV +GLAD_API_CALL PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC glad_wglCreateAssociatedContextAMD; +#define wglCreateAssociatedContextAMD glad_wglCreateAssociatedContextAMD +GLAD_API_CALL PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC glad_wglCreateAssociatedContextAttribsAMD; +#define wglCreateAssociatedContextAttribsAMD glad_wglCreateAssociatedContextAttribsAMD +GLAD_API_CALL PFNWGLCREATEBUFFERREGIONARBPROC glad_wglCreateBufferRegionARB; +#define wglCreateBufferRegionARB glad_wglCreateBufferRegionARB +GLAD_API_CALL PFNWGLCREATECONTEXTATTRIBSARBPROC glad_wglCreateContextAttribsARB; +#define wglCreateContextAttribsARB glad_wglCreateContextAttribsARB +GLAD_API_CALL PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC glad_wglCreateDisplayColorTableEXT; +#define wglCreateDisplayColorTableEXT glad_wglCreateDisplayColorTableEXT +GLAD_API_CALL PFNWGLCREATEIMAGEBUFFERI3DPROC glad_wglCreateImageBufferI3D; +#define wglCreateImageBufferI3D glad_wglCreateImageBufferI3D +GLAD_API_CALL PFNWGLCREATEPBUFFERARBPROC glad_wglCreatePbufferARB; +#define wglCreatePbufferARB glad_wglCreatePbufferARB +GLAD_API_CALL PFNWGLCREATEPBUFFEREXTPROC glad_wglCreatePbufferEXT; +#define wglCreatePbufferEXT glad_wglCreatePbufferEXT +GLAD_API_CALL PFNWGLDXCLOSEDEVICENVPROC glad_wglDXCloseDeviceNV; +#define wglDXCloseDeviceNV glad_wglDXCloseDeviceNV +GLAD_API_CALL PFNWGLDXLOCKOBJECTSNVPROC glad_wglDXLockObjectsNV; +#define wglDXLockObjectsNV glad_wglDXLockObjectsNV +GLAD_API_CALL PFNWGLDXOBJECTACCESSNVPROC glad_wglDXObjectAccessNV; +#define wglDXObjectAccessNV glad_wglDXObjectAccessNV +GLAD_API_CALL PFNWGLDXOPENDEVICENVPROC glad_wglDXOpenDeviceNV; +#define wglDXOpenDeviceNV glad_wglDXOpenDeviceNV +GLAD_API_CALL PFNWGLDXREGISTEROBJECTNVPROC glad_wglDXRegisterObjectNV; +#define wglDXRegisterObjectNV glad_wglDXRegisterObjectNV +GLAD_API_CALL PFNWGLDXSETRESOURCESHAREHANDLENVPROC glad_wglDXSetResourceShareHandleNV; +#define wglDXSetResourceShareHandleNV glad_wglDXSetResourceShareHandleNV +GLAD_API_CALL PFNWGLDXUNLOCKOBJECTSNVPROC glad_wglDXUnlockObjectsNV; +#define wglDXUnlockObjectsNV glad_wglDXUnlockObjectsNV +GLAD_API_CALL PFNWGLDXUNREGISTEROBJECTNVPROC glad_wglDXUnregisterObjectNV; +#define wglDXUnregisterObjectNV glad_wglDXUnregisterObjectNV +GLAD_API_CALL PFNWGLDELAYBEFORESWAPNVPROC glad_wglDelayBeforeSwapNV; +#define wglDelayBeforeSwapNV glad_wglDelayBeforeSwapNV +GLAD_API_CALL PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC glad_wglDeleteAssociatedContextAMD; +#define wglDeleteAssociatedContextAMD glad_wglDeleteAssociatedContextAMD +GLAD_API_CALL PFNWGLDELETEBUFFERREGIONARBPROC glad_wglDeleteBufferRegionARB; +#define wglDeleteBufferRegionARB glad_wglDeleteBufferRegionARB +GLAD_API_CALL PFNWGLDELETEDCNVPROC glad_wglDeleteDCNV; +#define wglDeleteDCNV glad_wglDeleteDCNV +GLAD_API_CALL PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC glad_wglDestroyDisplayColorTableEXT; +#define wglDestroyDisplayColorTableEXT glad_wglDestroyDisplayColorTableEXT +GLAD_API_CALL PFNWGLDESTROYIMAGEBUFFERI3DPROC glad_wglDestroyImageBufferI3D; +#define wglDestroyImageBufferI3D glad_wglDestroyImageBufferI3D +GLAD_API_CALL PFNWGLDESTROYPBUFFERARBPROC glad_wglDestroyPbufferARB; +#define wglDestroyPbufferARB glad_wglDestroyPbufferARB +GLAD_API_CALL PFNWGLDESTROYPBUFFEREXTPROC glad_wglDestroyPbufferEXT; +#define wglDestroyPbufferEXT glad_wglDestroyPbufferEXT +GLAD_API_CALL PFNWGLDISABLEFRAMELOCKI3DPROC glad_wglDisableFrameLockI3D; +#define wglDisableFrameLockI3D glad_wglDisableFrameLockI3D +GLAD_API_CALL PFNWGLDISABLEGENLOCKI3DPROC glad_wglDisableGenlockI3D; +#define wglDisableGenlockI3D glad_wglDisableGenlockI3D +GLAD_API_CALL PFNWGLENABLEFRAMELOCKI3DPROC glad_wglEnableFrameLockI3D; +#define wglEnableFrameLockI3D glad_wglEnableFrameLockI3D +GLAD_API_CALL PFNWGLENABLEGENLOCKI3DPROC glad_wglEnableGenlockI3D; +#define wglEnableGenlockI3D glad_wglEnableGenlockI3D +GLAD_API_CALL PFNWGLENDFRAMETRACKINGI3DPROC glad_wglEndFrameTrackingI3D; +#define wglEndFrameTrackingI3D glad_wglEndFrameTrackingI3D +GLAD_API_CALL PFNWGLENUMGPUDEVICESNVPROC glad_wglEnumGpuDevicesNV; +#define wglEnumGpuDevicesNV glad_wglEnumGpuDevicesNV +GLAD_API_CALL PFNWGLENUMGPUSFROMAFFINITYDCNVPROC glad_wglEnumGpusFromAffinityDCNV; +#define wglEnumGpusFromAffinityDCNV glad_wglEnumGpusFromAffinityDCNV +GLAD_API_CALL PFNWGLENUMGPUSNVPROC glad_wglEnumGpusNV; +#define wglEnumGpusNV glad_wglEnumGpusNV +GLAD_API_CALL PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC glad_wglEnumerateVideoCaptureDevicesNV; +#define wglEnumerateVideoCaptureDevicesNV glad_wglEnumerateVideoCaptureDevicesNV +GLAD_API_CALL PFNWGLENUMERATEVIDEODEVICESNVPROC glad_wglEnumerateVideoDevicesNV; +#define wglEnumerateVideoDevicesNV glad_wglEnumerateVideoDevicesNV +GLAD_API_CALL PFNWGLFREEMEMORYNVPROC glad_wglFreeMemoryNV; +#define wglFreeMemoryNV glad_wglFreeMemoryNV +GLAD_API_CALL PFNWGLGENLOCKSAMPLERATEI3DPROC glad_wglGenlockSampleRateI3D; +#define wglGenlockSampleRateI3D glad_wglGenlockSampleRateI3D +GLAD_API_CALL PFNWGLGENLOCKSOURCEDELAYI3DPROC glad_wglGenlockSourceDelayI3D; +#define wglGenlockSourceDelayI3D glad_wglGenlockSourceDelayI3D +GLAD_API_CALL PFNWGLGENLOCKSOURCEEDGEI3DPROC glad_wglGenlockSourceEdgeI3D; +#define wglGenlockSourceEdgeI3D glad_wglGenlockSourceEdgeI3D +GLAD_API_CALL PFNWGLGENLOCKSOURCEI3DPROC glad_wglGenlockSourceI3D; +#define wglGenlockSourceI3D glad_wglGenlockSourceI3D +GLAD_API_CALL PFNWGLGETCONTEXTGPUIDAMDPROC glad_wglGetContextGPUIDAMD; +#define wglGetContextGPUIDAMD glad_wglGetContextGPUIDAMD +GLAD_API_CALL PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC glad_wglGetCurrentAssociatedContextAMD; +#define wglGetCurrentAssociatedContextAMD glad_wglGetCurrentAssociatedContextAMD +GLAD_API_CALL PFNWGLGETCURRENTREADDCARBPROC glad_wglGetCurrentReadDCARB; +#define wglGetCurrentReadDCARB glad_wglGetCurrentReadDCARB +GLAD_API_CALL PFNWGLGETCURRENTREADDCEXTPROC glad_wglGetCurrentReadDCEXT; +#define wglGetCurrentReadDCEXT glad_wglGetCurrentReadDCEXT +GLAD_API_CALL PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC glad_wglGetDigitalVideoParametersI3D; +#define wglGetDigitalVideoParametersI3D glad_wglGetDigitalVideoParametersI3D +GLAD_API_CALL PFNWGLGETEXTENSIONSSTRINGARBPROC glad_wglGetExtensionsStringARB; +#define wglGetExtensionsStringARB glad_wglGetExtensionsStringARB +GLAD_API_CALL PFNWGLGETEXTENSIONSSTRINGEXTPROC glad_wglGetExtensionsStringEXT; +#define wglGetExtensionsStringEXT glad_wglGetExtensionsStringEXT +GLAD_API_CALL PFNWGLGETFRAMEUSAGEI3DPROC glad_wglGetFrameUsageI3D; +#define wglGetFrameUsageI3D glad_wglGetFrameUsageI3D +GLAD_API_CALL PFNWGLGETGPUIDSAMDPROC glad_wglGetGPUIDsAMD; +#define wglGetGPUIDsAMD glad_wglGetGPUIDsAMD +GLAD_API_CALL PFNWGLGETGPUINFOAMDPROC glad_wglGetGPUInfoAMD; +#define wglGetGPUInfoAMD glad_wglGetGPUInfoAMD +GLAD_API_CALL PFNWGLGETGAMMATABLEI3DPROC glad_wglGetGammaTableI3D; +#define wglGetGammaTableI3D glad_wglGetGammaTableI3D +GLAD_API_CALL PFNWGLGETGAMMATABLEPARAMETERSI3DPROC glad_wglGetGammaTableParametersI3D; +#define wglGetGammaTableParametersI3D glad_wglGetGammaTableParametersI3D +GLAD_API_CALL PFNWGLGETGENLOCKSAMPLERATEI3DPROC glad_wglGetGenlockSampleRateI3D; +#define wglGetGenlockSampleRateI3D glad_wglGetGenlockSampleRateI3D +GLAD_API_CALL PFNWGLGETGENLOCKSOURCEDELAYI3DPROC glad_wglGetGenlockSourceDelayI3D; +#define wglGetGenlockSourceDelayI3D glad_wglGetGenlockSourceDelayI3D +GLAD_API_CALL PFNWGLGETGENLOCKSOURCEEDGEI3DPROC glad_wglGetGenlockSourceEdgeI3D; +#define wglGetGenlockSourceEdgeI3D glad_wglGetGenlockSourceEdgeI3D +GLAD_API_CALL PFNWGLGETGENLOCKSOURCEI3DPROC glad_wglGetGenlockSourceI3D; +#define wglGetGenlockSourceI3D glad_wglGetGenlockSourceI3D +GLAD_API_CALL PFNWGLGETMSCRATEOMLPROC glad_wglGetMscRateOML; +#define wglGetMscRateOML glad_wglGetMscRateOML +GLAD_API_CALL PFNWGLGETPBUFFERDCARBPROC glad_wglGetPbufferDCARB; +#define wglGetPbufferDCARB glad_wglGetPbufferDCARB +GLAD_API_CALL PFNWGLGETPBUFFERDCEXTPROC glad_wglGetPbufferDCEXT; +#define wglGetPbufferDCEXT glad_wglGetPbufferDCEXT +GLAD_API_CALL PFNWGLGETPIXELFORMATATTRIBFVARBPROC glad_wglGetPixelFormatAttribfvARB; +#define wglGetPixelFormatAttribfvARB glad_wglGetPixelFormatAttribfvARB +GLAD_API_CALL PFNWGLGETPIXELFORMATATTRIBFVEXTPROC glad_wglGetPixelFormatAttribfvEXT; +#define wglGetPixelFormatAttribfvEXT glad_wglGetPixelFormatAttribfvEXT +GLAD_API_CALL PFNWGLGETPIXELFORMATATTRIBIVARBPROC glad_wglGetPixelFormatAttribivARB; +#define wglGetPixelFormatAttribivARB glad_wglGetPixelFormatAttribivARB +GLAD_API_CALL PFNWGLGETPIXELFORMATATTRIBIVEXTPROC glad_wglGetPixelFormatAttribivEXT; +#define wglGetPixelFormatAttribivEXT glad_wglGetPixelFormatAttribivEXT +GLAD_API_CALL PFNWGLGETSWAPINTERVALEXTPROC glad_wglGetSwapIntervalEXT; +#define wglGetSwapIntervalEXT glad_wglGetSwapIntervalEXT +GLAD_API_CALL PFNWGLGETSYNCVALUESOMLPROC glad_wglGetSyncValuesOML; +#define wglGetSyncValuesOML glad_wglGetSyncValuesOML +GLAD_API_CALL PFNWGLGETVIDEODEVICENVPROC glad_wglGetVideoDeviceNV; +#define wglGetVideoDeviceNV glad_wglGetVideoDeviceNV +GLAD_API_CALL PFNWGLGETVIDEOINFONVPROC glad_wglGetVideoInfoNV; +#define wglGetVideoInfoNV glad_wglGetVideoInfoNV +GLAD_API_CALL PFNWGLISENABLEDFRAMELOCKI3DPROC glad_wglIsEnabledFrameLockI3D; +#define wglIsEnabledFrameLockI3D glad_wglIsEnabledFrameLockI3D +GLAD_API_CALL PFNWGLISENABLEDGENLOCKI3DPROC glad_wglIsEnabledGenlockI3D; +#define wglIsEnabledGenlockI3D glad_wglIsEnabledGenlockI3D +GLAD_API_CALL PFNWGLJOINSWAPGROUPNVPROC glad_wglJoinSwapGroupNV; +#define wglJoinSwapGroupNV glad_wglJoinSwapGroupNV +GLAD_API_CALL PFNWGLLOADDISPLAYCOLORTABLEEXTPROC glad_wglLoadDisplayColorTableEXT; +#define wglLoadDisplayColorTableEXT glad_wglLoadDisplayColorTableEXT +GLAD_API_CALL PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC glad_wglLockVideoCaptureDeviceNV; +#define wglLockVideoCaptureDeviceNV glad_wglLockVideoCaptureDeviceNV +GLAD_API_CALL PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC glad_wglMakeAssociatedContextCurrentAMD; +#define wglMakeAssociatedContextCurrentAMD glad_wglMakeAssociatedContextCurrentAMD +GLAD_API_CALL PFNWGLMAKECONTEXTCURRENTARBPROC glad_wglMakeContextCurrentARB; +#define wglMakeContextCurrentARB glad_wglMakeContextCurrentARB +GLAD_API_CALL PFNWGLMAKECONTEXTCURRENTEXTPROC glad_wglMakeContextCurrentEXT; +#define wglMakeContextCurrentEXT glad_wglMakeContextCurrentEXT +GLAD_API_CALL PFNWGLQUERYCURRENTCONTEXTNVPROC glad_wglQueryCurrentContextNV; +#define wglQueryCurrentContextNV glad_wglQueryCurrentContextNV +GLAD_API_CALL PFNWGLQUERYFRAMECOUNTNVPROC glad_wglQueryFrameCountNV; +#define wglQueryFrameCountNV glad_wglQueryFrameCountNV +GLAD_API_CALL PFNWGLQUERYFRAMELOCKMASTERI3DPROC glad_wglQueryFrameLockMasterI3D; +#define wglQueryFrameLockMasterI3D glad_wglQueryFrameLockMasterI3D +GLAD_API_CALL PFNWGLQUERYFRAMETRACKINGI3DPROC glad_wglQueryFrameTrackingI3D; +#define wglQueryFrameTrackingI3D glad_wglQueryFrameTrackingI3D +GLAD_API_CALL PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC glad_wglQueryGenlockMaxSourceDelayI3D; +#define wglQueryGenlockMaxSourceDelayI3D glad_wglQueryGenlockMaxSourceDelayI3D +GLAD_API_CALL PFNWGLQUERYMAXSWAPGROUPSNVPROC glad_wglQueryMaxSwapGroupsNV; +#define wglQueryMaxSwapGroupsNV glad_wglQueryMaxSwapGroupsNV +GLAD_API_CALL PFNWGLQUERYPBUFFERARBPROC glad_wglQueryPbufferARB; +#define wglQueryPbufferARB glad_wglQueryPbufferARB +GLAD_API_CALL PFNWGLQUERYPBUFFEREXTPROC glad_wglQueryPbufferEXT; +#define wglQueryPbufferEXT glad_wglQueryPbufferEXT +GLAD_API_CALL PFNWGLQUERYSWAPGROUPNVPROC glad_wglQuerySwapGroupNV; +#define wglQuerySwapGroupNV glad_wglQuerySwapGroupNV +GLAD_API_CALL PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC glad_wglQueryVideoCaptureDeviceNV; +#define wglQueryVideoCaptureDeviceNV glad_wglQueryVideoCaptureDeviceNV +GLAD_API_CALL PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC glad_wglReleaseImageBufferEventsI3D; +#define wglReleaseImageBufferEventsI3D glad_wglReleaseImageBufferEventsI3D +GLAD_API_CALL PFNWGLRELEASEPBUFFERDCARBPROC glad_wglReleasePbufferDCARB; +#define wglReleasePbufferDCARB glad_wglReleasePbufferDCARB +GLAD_API_CALL PFNWGLRELEASEPBUFFERDCEXTPROC glad_wglReleasePbufferDCEXT; +#define wglReleasePbufferDCEXT glad_wglReleasePbufferDCEXT +GLAD_API_CALL PFNWGLRELEASETEXIMAGEARBPROC glad_wglReleaseTexImageARB; +#define wglReleaseTexImageARB glad_wglReleaseTexImageARB +GLAD_API_CALL PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC glad_wglReleaseVideoCaptureDeviceNV; +#define wglReleaseVideoCaptureDeviceNV glad_wglReleaseVideoCaptureDeviceNV +GLAD_API_CALL PFNWGLRELEASEVIDEODEVICENVPROC glad_wglReleaseVideoDeviceNV; +#define wglReleaseVideoDeviceNV glad_wglReleaseVideoDeviceNV +GLAD_API_CALL PFNWGLRELEASEVIDEOIMAGENVPROC glad_wglReleaseVideoImageNV; +#define wglReleaseVideoImageNV glad_wglReleaseVideoImageNV +GLAD_API_CALL PFNWGLRESETFRAMECOUNTNVPROC glad_wglResetFrameCountNV; +#define wglResetFrameCountNV glad_wglResetFrameCountNV +GLAD_API_CALL PFNWGLRESTOREBUFFERREGIONARBPROC glad_wglRestoreBufferRegionARB; +#define wglRestoreBufferRegionARB glad_wglRestoreBufferRegionARB +GLAD_API_CALL PFNWGLSAVEBUFFERREGIONARBPROC glad_wglSaveBufferRegionARB; +#define wglSaveBufferRegionARB glad_wglSaveBufferRegionARB +GLAD_API_CALL PFNWGLSENDPBUFFERTOVIDEONVPROC glad_wglSendPbufferToVideoNV; +#define wglSendPbufferToVideoNV glad_wglSendPbufferToVideoNV +GLAD_API_CALL PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC glad_wglSetDigitalVideoParametersI3D; +#define wglSetDigitalVideoParametersI3D glad_wglSetDigitalVideoParametersI3D +GLAD_API_CALL PFNWGLSETGAMMATABLEI3DPROC glad_wglSetGammaTableI3D; +#define wglSetGammaTableI3D glad_wglSetGammaTableI3D +GLAD_API_CALL PFNWGLSETGAMMATABLEPARAMETERSI3DPROC glad_wglSetGammaTableParametersI3D; +#define wglSetGammaTableParametersI3D glad_wglSetGammaTableParametersI3D +GLAD_API_CALL PFNWGLSETPBUFFERATTRIBARBPROC glad_wglSetPbufferAttribARB; +#define wglSetPbufferAttribARB glad_wglSetPbufferAttribARB +GLAD_API_CALL PFNWGLSETSTEREOEMITTERSTATE3DLPROC glad_wglSetStereoEmitterState3DL; +#define wglSetStereoEmitterState3DL glad_wglSetStereoEmitterState3DL +GLAD_API_CALL PFNWGLSWAPBUFFERSMSCOMLPROC glad_wglSwapBuffersMscOML; +#define wglSwapBuffersMscOML glad_wglSwapBuffersMscOML +GLAD_API_CALL PFNWGLSWAPINTERVALEXTPROC glad_wglSwapIntervalEXT; +#define wglSwapIntervalEXT glad_wglSwapIntervalEXT +GLAD_API_CALL PFNWGLSWAPLAYERBUFFERSMSCOMLPROC glad_wglSwapLayerBuffersMscOML; +#define wglSwapLayerBuffersMscOML glad_wglSwapLayerBuffersMscOML +GLAD_API_CALL PFNWGLWAITFORMSCOMLPROC glad_wglWaitForMscOML; +#define wglWaitForMscOML glad_wglWaitForMscOML +GLAD_API_CALL PFNWGLWAITFORSBCOMLPROC glad_wglWaitForSbcOML; +#define wglWaitForSbcOML glad_wglWaitForSbcOML + +GLAD_API_CALL int gladLoadWGLUserPtr(HDC hdc, GLADuserptrloadfunc load, void *userptr); +GLAD_API_CALL int gladLoadWGL(HDC hdc, GLADloadfunc load); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/StgSharp.Native/sn-src/StgSharpC.c b/StgSharp.Native/sn-src/StgSharpC.c new file mode 100644 index 00000000..3e9a0fe6 --- /dev/null +++ b/StgSharp.Native/sn-src/StgSharpC.c @@ -0,0 +1,75 @@ +#include "StgSharpC.h" +#include "gl.h" +#include "glfw3.h" +#include +#include + +extern GladGLContext *currentContext; +extern char infolog[512]; + +SSCAPI int SSCDECL glCheckShaderStat(GladGLContext *context, uint64_t shaderHandle, int key, + char **logRef) +{ + int stat = 0; + context->GetShaderiv(shaderHandle, key, &stat); + if (!stat) { + context->GetShaderInfoLog(shaderHandle, 512, NULL, infolog); + } + *logRef = infolog; + return stat; +} + +SSCAPI void SSCDECL initGL(int majorVersion, int minorVersion) +{ + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, majorVersion); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, minorVersion); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); +} + +SSCAPI GLFWglproc SSCDECL loadGlfuncDefault(char const *procName) +{ + void *ret = glfwGetProcAddress(procName); + // printf("%llu\n", (uint64_t)ret); + if (ret == NULL) { + strcpy_s(infolog,30, "Failed to load OpenGL api:"); + for (size_t i = 0; i < sizeof(procName); i++) { + infolog[30 + i] = procName[i]; + } + //printf("%s\n", infolog); + } + return (GLFWglproc)ret; +} + +SSCAPI unsigned int linkShaderProgram(GladGLContext *context, GLuint shaderProgram) +{ + context->LinkProgram(shaderProgram); + + int success; + context->GetProgramiv(shaderProgram, GL_LINK_STATUS, &success); + if (!success) { + context->GetProgramInfoLog(shaderProgram, 512, NULL, infolog); + return 0; + } else { + return shaderProgram; + } +} + +SSCAPI void SSCDECL loadImageData(char const *location, Image *out, imageLoader loader) +{ + if (loader == NULL) { + loader = stbi_load; + } + out->pixelPtr = loader(location, &(out->width), &(out->height), &(out->channel), 0); +} + +SSCAPI void SSCDECL unloadImageData(Image *restrict out) +{ + free(out->pixelPtr); +} + +SSCAPI char *SSCDECL readLog() +{ + infolog[511] = '\0'; + return infolog; +} diff --git a/StgSharp.Native/sn-src/dllmain.c b/StgSharp.Native/sn-src/dllmain.c new file mode 100644 index 00000000..677a0b71 --- /dev/null +++ b/StgSharp.Native/sn-src/dllmain.c @@ -0,0 +1,47 @@ +#include "StgSharpNative.h" +#include "sn_matkernel.h" +#include + +#ifdef _WIN32 + +/* Define and initialize a global zero kernel aligned to 64 bytes for universal ISA usage */ +#ifdef __cplusplus +extern "C" { +#endif +__declspec(align(64)) sn_zero_kernel_u64 SN_ZERO_KERNEL; +#ifdef __cplusplus +} +#endif + +static void init_zero_kernel(void) +{ + for (int c = 0; c < 4; ++c) { + for (int r = 0; r < 4; ++r) { + SN_ZERO_KERNEL.m[r][c] = 0; + } + } +} + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) +{ + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH: + init_zero_kernel(); + return 1; + case DLL_THREAD_ATTACH: + return 1; + case DLL_THREAD_DETACH: + return 1; + case DLL_PROCESS_DETACH: + return 1; + break; + } + return TRUE; +} +#else +attribute((constructor)) void DllMain() +{ + init_zero_kernel(); +} + +#endif // _WIN32 diff --git a/StgSharp.Native/sn-src/k_basicop.c b/StgSharp.Native/sn-src/k_basicop.c index 32b29092..8f6d3fa2 100644 --- a/StgSharp.Native/sn-src/k_basicop.c +++ b/StgSharp.Native/sn-src/k_basicop.c @@ -1,5 +1,6 @@ #include "sn_intrinsic.h" +<<<<<<< HEAD DECLARE_PNL_PROC_ANS(float, sse, clear) { register __m128 zero = _mm_setzero_ps(); @@ -27,6 +28,8 @@ DECLARE_PNL_PROC_ANS(float, 512, clear) PANEL_COL_VEC((*ans), 3, 0) = zero; } +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 // Matrix transpose implementations DECLARE_KER_PROC_RIGHT_ANS(float, sse, transpose) { diff --git a/StgSharp.Native/sn-src/k_fma.c b/StgSharp.Native/sn-src/k_fma.c index 11ad5d05..06067080 100644 --- a/StgSharp.Native/sn-src/k_fma.c +++ b/StgSharp.Native/sn-src/k_fma.c @@ -54,6 +54,7 @@ DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, sse, fma) // ans = left * right + ans // right is not transposed +<<<<<<< HEAD DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, avx_fma, fma) { static const __m256i idx0 = { 1, 1, 1, 1, 1, 1, 1, 1 }; @@ -97,6 +98,8 @@ DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, avx_fma, fma) // ans = left * right + ans // right is not transposed +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 DECLARE_PNL_PROC_LEFT_RIGHT_ANS(float, avx, fma) { static const __m256i idx0 = { 1, 1, 1, 1, 1, 1, 1, 1 }; diff --git a/StgSharp.Native/sn-src/k_panel.c b/StgSharp.Native/sn-src/k_panel.c index 95c302bc..767479d5 100644 --- a/StgSharp.Native/sn-src/k_panel.c +++ b/StgSharp.Native/sn-src/k_panel.c @@ -41,6 +41,7 @@ DECLARE_BUILD_PANEL(avx, float) } } +<<<<<<< HEAD DECLARE_BUILD_PANEL(sse, float) { /* Single kernel -> 4 columns, each is one __m128 column vector. */ @@ -86,6 +87,8 @@ DECLARE_BUILD_PANEL(512, float) } } +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 DECLARE_STORE_PANEL(avx, float) { const int Q = 8; /* fixed for AVX float panel */ @@ -141,6 +144,7 @@ DECLARE_STORE_PANEL(avx, float) k_lb->xmm[kc_col] = bot128; } } +<<<<<<< HEAD DECLARE_STORE_PANEL(sse, float) { @@ -187,3 +191,5 @@ DECLARE_STORE_PANEL(512, float) k[blk_col][3]->xmm[kc_col] = r3; } } +======= +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 diff --git a/StgSharp.Native/sn-src/load_intrinsic.c b/StgSharp.Native/sn-src/load_intrinsic.c index 97ff5062..8124f181 100644 --- a/StgSharp.Native/sn-src/load_intrinsic.c +++ b/StgSharp.Native/sn-src/load_intrinsic.c @@ -65,10 +65,15 @@ void load_intrinsic_sse(sn_intrinsic *context) context->city_hash_simplify = city_hash_simplify_sse; context->factorial_simd = factorial_simd_sse; context->index_pair = index_pair_sse; +<<<<<<< HEAD context->f32_clear_panel = PNL_PROC(float, sse, clear); context->f32_build_panel = BUILD_PANEL(sse, float); context->f32_buffer_add = BUF_PROC(float, sse, add); context->f32_panel_fma = PNL_PROC(float, sse, fma); +======= + context->f32_buffer_add = BUF_PROC(float, sse, add); + context->f32_panel_fma = KER_PROC(float, sse, fma); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 context->f32_buffer_fill = BUF_PROC(float, sse, fill); context->variant = BUF_PROC(float, sse, scalar_mul); context->f32_buffer_sub = BUF_PROC(float, sse, sub); @@ -82,10 +87,15 @@ void load_intrinsic_avx(sn_intrinsic *context) context->city_hash_simplify = city_hash_simplify_sse; context->factorial_simd = factorial_simd_sse; context->index_pair = index_pair_sse; +<<<<<<< HEAD context->f32_clear_panel = PNL_PROC(float, avx, clear); context->f32_build_panel = BUILD_PANEL(avx, float); context->f32_buffer_add = BUF_PROC(float, avx, add); context->f32_panel_fma = PNL_PROC(float, avx, fma); +======= + context->f32_buffer_add = BUF_PROC(float, avx, add); + context->f32_panel_fma = KER_PROC(float, sse, fma); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 context->f32_buffer_fill = BUF_PROC(float, avx, fill); context->variant = BUF_PROC(float, avx, scalar_mul); context->f32_buffer_sub = BUF_PROC(float, avx, sub); @@ -99,10 +109,15 @@ void load_intrinsic_512(sn_intrinsic *context) context->city_hash_simplify = city_hash_simplify_sse; context->factorial_simd = factorial_simd_sse; context->index_pair = index_pair_sse; +<<<<<<< HEAD context->f32_clear_panel = PNL_PROC(float, sse, clear); context->f32_build_panel = BUILD_PANEL(512, float); context->f32_buffer_add = BUF_PROC(float, 512, add); context->f32_panel_fma = PNL_PROC(float, 512, fma); +======= + context->f32_buffer_add = BUF_PROC(float, 512, add); + context->f32_panel_fma = KER_PROC(float, sse, fma); +>>>>>>> 7bcb460a3994dda40f24cae0044b5a36f4f16515 context->f32_buffer_fill = BUF_PROC(float, 512, fill); context->variant = BUF_PROC(float, 512, scalar_mul); context->f32_buffer_sub = BUF_PROC(float, 512, sub); diff --git a/StgSharp.Native/sn-src/vector.c b/StgSharp.Native/sn-src/vector.c new file mode 100644 index 00000000..3cacaaca --- /dev/null +++ b/StgSharp.Native/sn-src/vector.c @@ -0,0 +1,32 @@ +#include "sn_intrinsic.h" +#include "sn_internal.h" + +INTERNAL void SN_DECL f32_normalize(VEC(float) *restrict source, VEC(float) *restrict target) +{ + register __m128 s = _mm_load_ps(&source->xmm); + register __m128 a_length_sq = _mm_mul_ps(s, s); + a_length_sq = _mm_add_ps(a_length_sq, + _mm_shuffle_ps(a_length_sq, a_length_sq, _MM_SHUFFLE(2, 3, 0, 1))); + a_length_sq = _mm_add_ss(a_length_sq, + _mm_shuffle_ps(a_length_sq, a_length_sq, _MM_SHUFFLE(0, 0, 3, 2))); + + __m128 a_inv_length = _mm_rsqrt_ps(a_length_sq); + s = _mm_mul_ps(s, a_inv_length); + + __m128 dot_product = _mm_mul_ps(target->xmm[0], s); + dot_product = _mm_add_ps(dot_product, + _mm_shuffle_ps(dot_product, dot_product, _MM_SHUFFLE(2, 3, 0, 1))); + dot_product = _mm_add_ss(dot_product, + _mm_shuffle_ps(dot_product, dot_product, _MM_SHUFFLE(0, 0, 3, 2))); + + __m128 b_orthogonal = _mm_sub_ps(target->xmm[0], _mm_mul_ps(s, dot_product)); + + __m128 b_length_sq = _mm_mul_ps(b_orthogonal, b_orthogonal); + b_length_sq = _mm_add_ps(b_length_sq, + _mm_shuffle_ps(b_length_sq, b_length_sq, _MM_SHUFFLE(2, 3, 0, 1))); + b_length_sq = _mm_add_ss(b_length_sq, + _mm_shuffle_ps(b_length_sq, b_length_sq, _MM_SHUFFLE(0, 0, 3, 2))); + + __m128 b_inv_length = _mm_rsqrt_ps(b_length_sq); + target->xmm[0] = _mm_mul_ps(b_orthogonal, b_inv_length); +} diff --git a/StgSharp.Native/sn-src/vector_dot.c b/StgSharp.Native/sn-src/vector_dot.c new file mode 100644 index 00000000..4d00414d --- /dev/null +++ b/StgSharp.Native/sn-src/vector_dot.c @@ -0,0 +1,67 @@ +#include "sn_intrinsic.h" +#include "sn_internal.h" + +static const int avxdot_indices[] = { 0, 4, 1, 5, 2, 3, 6, 7 }; + +INTERNAL void FORCEINLINE SN_DECL dot_41_sse(MAT_KERNEL(float) const *transpose, + __m128 const *vector, __m128 *ans) +{ + *ans = _mm_dp_ps(transpose->xmm[0], *vector, 0B11110001); + *ans = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[1], *vector, 0B11110001), + SSE_INSERT_SIMPLE(1, 1)); + *ans = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[2], *vector, 0B11110001), + SSE_INSERT_SIMPLE(1, 3)); + *ans = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[3], *vector, 0B11110001), + SSE_INSERT_SIMPLE(1, 4)); +} + +INTERNAL void SN_DECL dot_41_avx(MAT_KERNEL(float) const *transpose, __m128 const *vector, __m128 *ans) +{ + __m256 _double = _mm256_set_m128(vector[0], vector[0]); + __m256 tmp = _mm256_dp_ps(transpose->ymm[0], _double, 0B11110001); + tmp = _mm256_blend_ps(tmp, _mm256_dp_ps(transpose->ymm[0], _double, 0B11110010), + 0B00100010); + *ans = _mm256_castps256_ps128( + _mm256_permutevar8x32_ps(tmp, _mm256_loadu_epi32(avxdot_indices))); +} + +INTERNAL void SN_DECL dot_42_sse(MAT_KERNEL(float) const *transpose, __m128 const *vector, __m128 *ans) +{ + ans[0] = _mm_dp_ps(transpose->xmm[0], vector[0], 0B11110001); + ans[0] = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[1], vector[0], 0B11110001), + SSE_INSERT_SIMPLE(1, 2)); + ans[0] = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[2], vector[0], 0B11110001), + SSE_INSERT_SIMPLE(1, 3)); + ans[0] = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[3], vector[0], 0B11110001), + SSE_INSERT_SIMPLE(1, 4)); + + ans[1] = _mm_dp_ps(transpose->xmm[0], vector[1], 0B11110001); + ans[1] = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[1], vector[1], 0B11110001), + SSE_INSERT_SIMPLE(1, 2)); + ans[1] = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[2], vector[1], 0B11110001), + SSE_INSERT_SIMPLE(1, 3)); + ans[1] = _mm_insert_ps(*ans, _mm_dp_ps(transpose->xmm[3], vector[1], 0B11110001), + SSE_INSERT_SIMPLE(1, 4)); +} + +INTERNAL void SN_DECL dot_42_avx(MAT_KERNEL(float) const *transpose, __m128 const *vector, __m128 *ans) +{ + __m256 temp = transpose->ymm[0]; + __m256 vector_stream = _mm256_set_m128(vector[1], vector[0]); + + __m256 result = _mm256_dp_ps(temp, vector_stream, 0B11110001); + temp = _mm256_permute2f128_ps(temp, temp, 0B00000001); + result = _mm256_blend_ps( + result, _mm256_dp_ps(temp, vector_stream, 0B11110010), 0B00100010); + + temp = transpose->ymm[1]; + result = _mm256_blend_ps( + result, _mm256_dp_ps(temp, vector_stream, 0B11110100), 0B01000100); + temp = _mm256_permute2f128_ps(temp, temp, 0B00000001); + result = _mm256_blend_ps( + result, _mm256_dp_ps(temp, vector_stream, 0B11111000), 0B10001000); + + ans[0] = _mm256_castps256_ps128(result); + ans[1] = _mm256_extractf128_ps(result, 1); + ans[1] = _mm_shuffle_ps(ans[1], ans[1], _MM_SHUFFLE(2, 3, 0, 1)); +} \ No newline at end of file diff --git a/StgSharp.Script/Common/AbstractSyntaxTree.cs b/StgSharp.Script/Common/AbstractSyntaxTree.cs new file mode 100644 index 00000000..fa58578f --- /dev/null +++ b/StgSharp.Script/Common/AbstractSyntaxTree.cs @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="AbstractSyntaxTree" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Collections; + +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Schema; + +namespace StgSharp.Script +{ + public sealed class AbstractSyntaxTree where TNode: ISyntaxNode + where TType: ITypeSource + { + + private List _allToken = new(); + private TNode _root; + + public int Count + { + get { return _allToken.Count; } + } + + public TNode Root => _root; + + public bool Contains(TNode node) + { + return _allToken.Contains(node); + } + + } +} diff --git a/StgSharp.Script/Common/CodeLineHelper.cs b/StgSharp.Script/Common/CodeLineHelper.cs new file mode 100644 index 00000000..f8d711f1 --- /dev/null +++ b/StgSharp.Script/Common/CodeLineHelper.cs @@ -0,0 +1,100 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CodeLineHelper" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script +{ + public static class CodeLineHelper + { + + public static string SliceAndTrim(this string line, int startIndex) + { + if (line == null) { + throw new ArgumentNullException(nameof(line)); + } + + if (startIndex < 0 || startIndex >= line.Length) { + throw new ArgumentOutOfRangeException(nameof(startIndex)); + } + + ReadOnlySpan sourceSpan = line.AsSpan(); + ReadOnlySpan subSpan = sourceSpan.Slice(startIndex); + + int start = 0; + while (start < subSpan.Length && char.IsWhiteSpace(subSpan[start])) { + start++; + } + int end = subSpan.Length - 1; + while (end >= start && char.IsWhiteSpace(subSpan[end])) { + end--; + } + if (start > end) { + return string.Empty; + } + int finalLength = end - start + 1; + + return new string(subSpan.Slice(start, finalLength)); + } + + public static string SliceAndTrim(this string line, int startIndex, int length) + { + if (line == null) { + throw new ArgumentNullException(nameof(line)); + } + + if (startIndex < 0 || startIndex >= line.Length) { + throw new ArgumentOutOfRangeException(nameof(startIndex)); + } + + if (length < 0 || startIndex + length > line.Length) { + throw new ArgumentOutOfRangeException(nameof(length)); + } + + ReadOnlySpan sourceSpan = line.AsSpan(); + ReadOnlySpan subSpan = sourceSpan.Slice(startIndex, length); + + int start = 0; + while (start < subSpan.Length && char.IsWhiteSpace(subSpan[start])) { + start++; + } + int end = subSpan.Length - 1; + while (end >= start && char.IsWhiteSpace(subSpan[end])) { + end--; + } + if (start > end) { + return string.Empty; + } + int finalLength = end - start + 1; + + return new string(subSpan.Slice(start, finalLength)); + } + + } +} diff --git a/StgSharp.Script/Common/CompileDepthState.cs b/StgSharp.Script/Common/CompileDepthState.cs new file mode 100644 index 00000000..8f071b0a --- /dev/null +++ b/StgSharp.Script/Common/CompileDepthState.cs @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CompileDepthState" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script +{ + public interface ICompileDepthState + { + + string CurrentState { get; set; } + + } + + public class CompileDepthMark + { + + internal CompileDepthMark(int operatorBegin, int operandBegin, int usage) + { + OperatorBegin = operatorBegin; + OperandBegin = operandBegin; + Usage = usage; + } + + internal CompileDepthMark(int operatorBegin, int operandBegin, int usage, ICompileDepthState stateCache) + { + OperatorBegin = operatorBegin; + OperandBegin = operandBegin; + Usage = usage; + StateCache = stateCache; + } + + public bool IsBeginOfBlock { get; internal set; } + + public ICompileDepthState StateCache { get; internal set; } + + public int OperandBegin { get; internal set; } + + public int OperatorBegin { get; internal set; } + + public int Usage { get; internal set; } + + } +} diff --git a/StgSharp.Script/Common/CompileStack.cs b/StgSharp.Script/Common/CompileStack.cs new file mode 100644 index 00000000..052d0680 --- /dev/null +++ b/StgSharp.Script/Common/CompileStack.cs @@ -0,0 +1,329 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="CompileStack" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Collections; + +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script +{ + public partial class CompileStack where TNode: ISyntaxNode + where TType: ITypeSource + { + + private Token? _lastToken; + + private TNode[] _nodeArray = new TNode[4]; + private Token[] _operatorArray = new Token[4]; + private Token[] _tokenArray = new Token[4]; + + private int _nodeCount,_tokenCount, _operatorCount; + private RandomAccessibleStack _depthStack = new RandomAccessibleStack( + ); + + private RandomAccessibleStack _isNode = new RandomAccessibleStack( + 8); + private Stack> _statementCache = new Stack>(); + private TNode _lastNode; + + public CompileStack() + { + _depthStack.Push(new CompileDepthMark(0, 0, 0, null!)); + _statementCache.Push(new Stack()); + } + + public bool IsLastAddedOperator { get; private set; } + + public CompileDepthMark CurrentDepthMark + { + get => _depthStack.Peek(); + } + + public int Depth => _depthStack.Count; + + public int OperandCount => _isNode.Count; + + public int OperatorCount => _operatorCount; + + public int OperatorAheadOfDepth + { + get => OperatorCount - _depthStack.Peek().OperatorBegin; + } + + public int OperandAheadOfDepth + { + get => OperandCount - _depthStack.Peek().OperandBegin; + } + + public Stack StatementsInDepth + { + get => _statementCache.Peek(); + } + + public void DecreaseDepth() + { + CompileDepthMark mark = _depthStack.Pop(); + Stack statementsInDepth = _statementCache.Pop(); + } + + public bool GetOperandAt(Index i, out TNode operandNode, out Token operandToken) + { + OperandIndex index = _isNode[i]; + if (index.IsNode) + { + operandNode = _nodeArray[index.Index]; + operandToken = Token.Empty; + return true; + } else + { + operandToken = _tokenArray[index.Index]; + operandNode = default!; + return false; + } + } + + public bool GetOperandAt(CompileDepthMark depth, Index i, out Token operandToken, out TNode operandNode) + { + OperandIndex index = _isNode[i]; + + _depthStack.Contains(depth); + if (index.IsNode) + { + operandNode = _nodeArray[index.Index]; + operandToken = Token.Empty; + return true; + } else + { + operandToken = _tokenArray[index.Index]; + operandNode = default!; + return false; + } + } + + public CompileDepthMark IncreaseDepth(int usage) + { + CompileDepthMark mark = + new CompileDepthMark(OperatorCount, OperandCount, usage); + + _depthStack.Push(mark); + _statementCache.Push(new Stack()); + return mark; + } + + public TNode PackAllStatements() + { + if (StatementsInDepth.Count == 0) { + return TNode.Empty; + } + TNode end = StatementsInDepth.Peek(); + TNode first = end; + while (StatementsInDepth.Count > 0) + { + first = StatementsInDepth.Pop(); + end.PrependNode(first); + end = first; + } + return first; + } + + public bool PeekOperand(out Token t, out TNode n) + { + if (OperandAheadOfDepth <= 0) + { + t = Token.Empty; + n = TNode.Empty; + return false; + } + if (_isNode.Pop().IsNode) + { + t = Token.Empty; + n = _nodeArray[_nodeCount - 1]; + return true; + } else + { + t = _tokenArray[_tokenCount - 1]; + n = TNode.Empty; + return false; + } + } + + public Token PeekOperator() + { + if (OperatorAheadOfDepth > 0) { + return _operatorArray[_operatorCount - 1]; + } + return Token.Empty; + } + + public bool PopOperand(out Token t, out TNode n) + { + if (OperandAheadOfDepth <= 0) + { + t = Token.Empty; + n = TNode.Empty; + return false; + } + if (_isNode.Pop().IsNode) + { + t = Token.Empty; + n = _nodeArray[--_nodeCount]; + return true; + } else + { + t = _tokenArray[--_tokenCount]; + n = TNode.Empty; + return false; + } + } + + public Token PopOperator() + { + if (OperatorAheadOfDepth > 0) + { + _operatorCount--; + return _operatorArray[_operatorCount]; + } + return Token.Empty; + } + + public void PushOperand(TNode node) + { + if (_nodeArray.Length == _nodeCount) { + Array.Resize(ref _nodeArray, _nodeArray.Length * 2); + } + _nodeArray[_nodeCount] = node; + _isNode.Push(new(true, _nodeCount)); + _nodeCount++; + IsLastAddedOperator = false; + } + + public void PushOperand(Token token) + { + if (_tokenArray.Length == _tokenCount) { + Array.Resize(ref _tokenArray, _tokenArray.Length * 2); + } + _tokenArray[_tokenCount] = token; + _isNode.Push(new(false, _tokenCount)); + _tokenCount++; + IsLastAddedOperator = false; + } + + public void PushOperator(Token token) + { + if (_operatorArray.Length == _operatorCount) { + Array.Resize(ref _operatorArray, _operatorArray.Length * 2); + } + _operatorArray[_operatorCount] = token; + _operatorCount++; + IsLastAddedOperator = true; + } + + public T StateOfCurrentDepth() where T: class, ICompileDepthState + { + return (CurrentDepthMark.StateCache as T)!; + } + + public bool TryPeekOperand(out bool isNode, out Token t, out TNode n) + { + if (OperandAheadOfDepth <= 0) + { + t = Token.Empty; + n = TNode.Empty; + isNode = false; + return false; + } + if (_isNode.Pop().IsNode) + { + t = Token.Empty; + n = _nodeArray[_nodeCount - 1]; + isNode = true; + return true; + } else + { + t = _tokenArray[_tokenCount - 1]; + n = TNode.Empty; + isNode = false; + return false; + } + } + + public bool TryPeekOperator(out Token op) + { + if (OperatorAheadOfDepth > 0) + { + op = _operatorArray[_operatorCount - 1]; + return true; + } + op = Token.Empty; + return false; + } + + public bool TryPopOperand(out bool isNode, out Token t, out TNode n) + { + if (OperandAheadOfDepth <= 0) + { + t = Token.Empty; + n = TNode.Empty; + isNode = false; + return false; + } + if (_isNode.Pop().IsNode) + { + t = Token.Empty; + n = _nodeArray[--_nodeCount]; + isNode = true; + return true; + } else + { + t = _tokenArray[--_tokenCount]; + n = TNode.Empty; + isNode = false; + return true; + } + } + + public bool TryPopOperator(out Token op) + { + if (OperatorAheadOfDepth > 0) + { + op = _operatorArray[--_operatorCount]; + return true; + } + op = Token.Empty; + return false; + } + + private record struct OperandIndex(bool IsNode, int Index); + + } +} diff --git a/StgSharp.Script/Common/IScriptSourceProvider.cs b/StgSharp.Script/Common/IScriptSourceProvider.cs new file mode 100644 index 00000000..fe1c4ba1 --- /dev/null +++ b/StgSharp.Script/Common/IScriptSourceProvider.cs @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IScriptSourceProvider" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script +{ + public interface IScriptSourceProvider + { + + bool IsEmpty { get; } + + int Location { get; } + + void EndWriting(); + + string ReadLine(); + + string ReadLine(out int position); + + /// + /// Return part of current provider. + /// + /// + /// Count of lines to be sliced + /// + /// + /// + /// + public IScriptSourceProvider Slice(int location, int count); + + } +} diff --git a/StgSharp.Script/Common/IScriptTokenReader.cs b/StgSharp.Script/Common/IScriptTokenReader.cs new file mode 100644 index 00000000..18fc83d7 --- /dev/null +++ b/StgSharp.Script/Common/IScriptTokenReader.cs @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IScriptTokenReader" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +namespace StgSharp.Script +{ + public interface IScriptTokenReader + { + + bool IsEmpty { get; } + + Token ReadToken(); + + bool TryReadToken(out Token t); + + } +} \ No newline at end of file diff --git a/StgSharp.Script/Common/ISyntaxAnalyzer.cs b/StgSharp.Script/Common/ISyntaxAnalyzer.cs new file mode 100644 index 00000000..2f28c33d --- /dev/null +++ b/StgSharp.Script/Common/ISyntaxAnalyzer.cs @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ISyntaxAnalyzer" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +namespace StgSharp.Script +{ + public interface ISyntaxAnalyzer + { + + void AppendToken(Token t); + + } +} \ No newline at end of file diff --git a/StgSharp.Script/Common/ISyntaxNode.cs b/StgSharp.Script/Common/ISyntaxNode.cs new file mode 100644 index 00000000..bebf0fb6 --- /dev/null +++ b/StgSharp.Script/Common/ISyntaxNode.cs @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ISyntaxNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Collections; +using StgSharp.Script.Express; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace StgSharp.Script +{ + public interface ISyntaxNode where TNode: ISyntaxNode where TType: ITypeSource + { + + long NodeFlag { get; } + + string CodeConvertTemplate { get; } + + TNode Previous { get; set; } + + TNode Next { get; set; } + + TNode Left { get; } + + TNode Right { get; } + + static abstract TNode Empty { get; } + + Token Source { get; } + + TType EqualityTypeConvert { get; } + + void AppendNode(TNode nextToken); + + void PrependNode(TNode previusNode); + + } +} diff --git a/StgSharp.Script/Common/ITypeSource.cs b/StgSharp.Script/Common/ITypeSource.cs new file mode 100644 index 00000000..ebae3eec --- /dev/null +++ b/StgSharp.Script/Common/ITypeSource.cs @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ITypeSource" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script +{ + public interface ITypeSource where TConvert: ITypeSource + { + + bool IsConvertable(TConvert targetType); + + } +} diff --git a/StgSharp.Script/Common/ScriptSourceTransmitter.cs b/StgSharp.Script/Common/ScriptSourceTransmitter.cs new file mode 100644 index 00000000..3778ea37 --- /dev/null +++ b/StgSharp.Script/Common/ScriptSourceTransmitter.cs @@ -0,0 +1,151 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ScriptSourceTransmitter" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace StgSharp.Script +{ + /// + /// Transmit a continuous part of script code to interpreter or compiler. This transmitter is + /// designed for single-thread-write and single-thread read. Any multi thread operation will + /// cause undefined behaviour. + /// + public class ScriptSourceTransmitter : IScriptSourceProvider + { + + private static ScriptSourceTransmitter _empty = new ScriptSourceTransmitter( + string.Empty, 0, 0) + { + _cache = [], + _buffer = [] + }; + + private string[] _buffer; + private bool _isWriting = true; + private int _begin, _index; + private List _cache; + private readonly string _completeMark; + + internal ScriptSourceTransmitter(string[] buffer, int start) + { + _buffer = buffer; + _begin = start; + _isWriting = false; + } + + public ScriptSourceTransmitter(string endMark, int start) + { + _cache = new List(); + _completeMark = endMark; + _begin = start; + _index = 0; + } + + public ScriptSourceTransmitter(string endMark, int start, int capacity) + { + _cache = new List(capacity); + _completeMark = endMark; + _begin = start; + _index = 0; + } + + public bool IsEmpty => _isWriting ? (_cache.Count == 0) : (_buffer.Length == 0) || (_index >= _buffer.Length); + + public bool IsFrozen => !_isWriting; + + public int Location => _begin + _index; + + public static ScriptSourceTransmitter Empty => _empty; + + public void EndWriting() + { + if (!_isWriting) { + return; + } + _isWriting = false; + _buffer = _cache.ToArray(); + _cache = null!; + } + + public string ReadLine() + { + if (_isWriting) { + throw new InvalidOperationException("Cannot read before all writing operation."); + } + if (_index >= _buffer.Length) { + return string.Empty; + } + string str = _buffer[_index]; + _index++; + return str; + } + + public string ReadLine(out int position) + { + if (_isWriting) { + throw new InvalidOperationException("Cannot read before all writing operation."); + } + if (_index >= _buffer.Length) + { + position = -1; + return string.Empty; + } + position = _begin + _index; + string str = _buffer[_index]; + _index++; + return str; + } + + public IScriptSourceProvider Slice(int location, int count) + { + ArgumentOutOfRangeException.ThrowIfLessThan(location, _begin); + ArgumentOutOfRangeException.ThrowIfGreaterThan( + location + count, _begin + _buffer.Length); + return new ScriptSourceTransmitter( + _buffer.AsSpan().Slice(location, count).ToArray(), location); + } + + public void WriteLine(string line) + { + if (!_isWriting) { + return; + } + if (string.Equals(_completeMark, line)) + { + EndWriting(); + return; + } + _cache.Add(line); + } + + } +} diff --git a/StgSharp.Script/Common/Token.cs b/StgSharp.Script/Common/Token.cs new file mode 100644 index 00000000..9e382fc6 --- /dev/null +++ b/StgSharp.Script/Common/Token.cs @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Token" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script +{ + public readonly struct Token + { + + private static Token EmptyToken = new Token(); + + public readonly int Column; + public readonly int Line; + public readonly string Value; + public readonly TokenFlag Flag; + + public Token(string chars, int lineNumber, int columnNumber, TokenFlag flag) + { + Value = chars; + Line = lineNumber; + Column = columnNumber; + Flag = flag; + } + + public static Token Empty => EmptyToken; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Token ReLocate(int line, int column) + { + return new Token(Value, line, column, Flag); + } + + } + + public enum TokenFlag : int + { + + None = 0, + Symbol_Unary = 1, + Symbol_Binary = 2, + Number = 3, + String = 4, + Member = 5, + Separator_Middle = 6, + Separator_Left = 7, + Separator_Right = 8, + Index_Left = 9, + Index_Right = 10, + Enum = 11 + + } +} diff --git a/StgSharp.Script/Express/Builtin/ExpBuiltinType.cs b/StgSharp.Script/Express/Builtin/ExpBuiltinType.cs new file mode 100644 index 00000000..ffa350c8 --- /dev/null +++ b/StgSharp.Script/Express/Builtin/ExpBuiltinType.cs @@ -0,0 +1,55 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpBuiltinType" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Data; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + internal sealed class ExpBuiltinType : ExpTypeSource + { + + private Type _marshalType; + + internal ExpBuiltinType(string name, Type origin) + : base(name, ScriptSourceTransmitter.Empty) + { + _marshalType = origin; + } + + public override void Analyse() + { + return; + } + + // A method convert value to CLR type + // Used for direct running rather than compiling to C# code. + } +} diff --git a/StgSharp.Script/Express/Builtin/ExpCollection.cs b/StgSharp.Script/Express/Builtin/ExpCollection.cs new file mode 100644 index 00000000..bfb7a7c1 --- /dev/null +++ b/StgSharp.Script/Express/Builtin/ExpCollection.cs @@ -0,0 +1,192 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpCollection" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace StgSharp.Script.Express +{ + public abstract class ExpCollectionBase : ExpInstantiableElement, IEnumerable + { + + protected internal string _accurateType; + + protected ExpCollectionBase(string accurateType) + { + _accurateType = accurateType; + } + + public override ExpElementType ElementType => ExpElementType.Collection; + + public abstract int Count { get; } + + public sealed override IScriptSourceProvider SourceProvider => ScriptSourceTransmitter.Empty; + + public string MemberType + { + get => _accurateType; + } + + public override void Analyse() + { + return; + } + + public abstract IEnumerator GetEnumerator(); + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + memberNode = ExpSyntaxNode.Empty; + return false; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + } + + public class ExpArray : ExpCollectionBase + { + + private ExpElementInstance[] _collection; + + public ExpArray(string accurateType) : base(accurateType) { } + + public ExpElementInstance this[int index] + { + get { return _collection[index]; } + set + { + if (value.TypeName != MemberType) { + throw new ExpInvalidCollectionMemberTypeException(value, this); + } + _collection[index] = value; + } + } + + public override int Count => _collection.Length; + + public override string Name => ExpressCompile.PoolString("ARRAY"); + + public override ExpSyntaxNode CreateInstanceNode(Token t) + { + throw new NotImplementedException(); + } + + public override IEnumerator GetEnumerator() + { + return ((IEnumerable)_collection) + .GetEnumerator(); + } + + } + + public class ExpBag : ExpCollectionBase + { + + private ConcurrentBag _collection = new ConcurrentBag( + ); + + public ExpBag(string accurateType) : base(accurateType) { } + + public override int Count => _collection.Count; + + public override string Name => ExpressCompile.PoolString("BAG"); + + public override ExpSyntaxNode CreateInstanceNode(Token t) + { + throw new NotImplementedException(); + } + + public override IEnumerator GetEnumerator() + { + return _collection.GetEnumerator(); + } + + } + + public sealed class ExpList : ExpCollectionBase + { + + private List _collection = new List(); + + public ExpList(string accurateType) : base(accurateType) { } + + public override int Count => _collection.Count; + + public override string Name => ExpressCompile.PoolString("LIST"); + + public override ExpSyntaxNode CreateInstanceNode(Token t) + { + throw new NotImplementedException(); + } + + public override IEnumerator GetEnumerator() + { + return _collection.GetEnumerator(); + } + + } + + public class ExpSet : ExpCollectionBase + { + + private HashSet _collection = new(); + + public ExpSet(string accurateType) : base(accurateType) { } + + public override int Count => _collection.Count; + + public override string Name => ExpressCompile.PoolString("SET"); + + public void Add(ExpElementInstance token) + { + if (token.TypeName != MemberType) { + throw new ExpInvalidCollectionMemberTypeException(token, this); + } + _collection.Add(token); + } + + public override ExpSyntaxNode CreateInstanceNode(Token t) + { + throw new NotImplementedException(); + } + + public sealed override IEnumerator GetEnumerator() + { + return ((IEnumerable)_collection) + .GetEnumerator(); + } + + } +} diff --git a/StgSharp.Script/Express/Builtin/ExpCollectionInstance.cs b/StgSharp.Script/Express/Builtin/ExpCollectionInstance.cs new file mode 100644 index 00000000..59035ea0 --- /dev/null +++ b/StgSharp.Script/Express/Builtin/ExpCollectionInstance.cs @@ -0,0 +1,129 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpCollectionInstance" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + public abstract class ExpCollectionInstanceBase : ExpSyntaxNode + { + + protected internal (int min, int max) _range; + protected internal ExpElementType _memberType; + + protected ExpCollectionInstanceBase(Token source) : base(source) { } + + public abstract ExpCollectionBase CollectionValue { get; } + + public ExpElementType MemberType + { + get => _memberType; + } + + public override ExpSyntaxNode Left => null!; + + public override ExpSyntaxNode Right => null!; + + public int MinCapacity => _range.min; + + public int MaxCapacity => _range.max; + + } + + public sealed class ExpSetInstance : ExpCollectionInstanceBase + { + + private ExpSet _collection; + + public ExpSetInstance(Token source, ExpSet set) + : base(source) + { + _collection = set; + } + + public override ExpCollectionBase CollectionValue => _collection; + + public override ExpInstantiableElement EqualityTypeConvert => throw new NotImplementedException( + ); + + } + + public sealed class ExpBagInstance : ExpCollectionInstanceBase + { + + private ExpBag _collection; + + public ExpBagInstance(Token source, ExpBag bag) + : base(source) + { + _collection = bag; + } + + public override ExpCollectionBase CollectionValue => _collection; + + public override ExpInstantiableElement EqualityTypeConvert => throw new NotImplementedException( + ); + + } + + public sealed class ExpListInstance : ExpCollectionInstanceBase + { + + private ExpList _collection; + + public ExpListInstance(Token source, ExpList list) + : base(source) + { + _collection = list; + } + + public override ExpCollectionBase CollectionValue => _collection; + + public override ExpInstantiableElement EqualityTypeConvert => throw new NotImplementedException( + ); + + } + + public sealed class ExpArrayInstance : ExpCollectionInstanceBase + { + + private ExpArray _collection; + + public ExpArrayInstance(Token source, ExpArray array) + : base(source) + { + _collection = array; + } + + public override ExpCollectionBase CollectionValue => _collection; + + public override ExpInstantiableElement EqualityTypeConvert => _collection; + + } +} diff --git a/StgSharp.Script/Express/Builtin/ExpLogic.cs b/StgSharp.Script/Express/Builtin/ExpLogic.cs new file mode 100644 index 00000000..a833f2c1 --- /dev/null +++ b/StgSharp.Script/Express/Builtin/ExpLogic.cs @@ -0,0 +1,129 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpLogic" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.Script.Express +{ + public enum ExpLogicValue + { + + True, + False, + Unknown + + } + + public struct ExpLogic + { + + public static readonly ExpLogic False = new ExpLogic(ExpLogicValue.False); + + public static readonly ExpLogic True = new ExpLogic(ExpLogicValue.True); + public static readonly ExpLogic Unknown = new ExpLogic(ExpLogicValue.Unknown); + + private readonly ExpLogicValue _value; + + public ExpLogic(ExpLogicValue value) + { + _value = value; + } + + public bool IsTrue => _value == ExpLogicValue.True; + + public bool IsFalse => _value == ExpLogicValue.False; + + public bool IsUnknown => _value == ExpLogicValue.Unknown; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool ToBoolean() + { + return _value == ExpLogicValue.True; + } + + public override string ToString() => _value.ToString(); + + public static bool TryParse(ReadOnlySpan value, out ExpLogic result) + { + if (Enum.TryParse(value, out ExpLogicValue e)) + { + result = new ExpLogic(e); + return true; + } + result = default; + return false; + } + + // NOT ! + public static ExpLogic operator !(ExpLogic a) + { + return a.IsTrue ? False : a.IsFalse ? True : Unknown; + } + + // AND & + public static ExpLogic operator &(ExpLogic a, ExpLogic b) + { + if (a.IsFalse || b.IsFalse) { + return False; + } + + if (a.IsUnknown || b.IsUnknown) { + return Unknown; + } + + return True; + } + + // XOR ^ + public static ExpLogic operator ^(ExpLogic a, ExpLogic b) + { + if (a.IsUnknown || b.IsUnknown) { + return Unknown; + } + + return (a.IsTrue ^ b.IsTrue) ? True : False; + } + + // OR | + public static ExpLogic operator |(ExpLogic a, ExpLogic b) + { + if (a.IsTrue || b.IsTrue) { + return True; + } + + if (a.IsUnknown || b.IsUnknown) { + return Unknown; + } + + return False; + } + + } +} diff --git a/StgSharp.Script/Express/CompileEnv/BuiltinType.cs b/StgSharp.Script/Express/CompileEnv/BuiltinType.cs new file mode 100644 index 00000000..0731a975 --- /dev/null +++ b/StgSharp.Script/Express/CompileEnv/BuiltinType.cs @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="BuiltinType" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public static partial class ExpressCompile + { + + public static ExpTypeSource ExpInt { get; private set; } + + public static ExpTypeSource ExpReal { get; private set; } + + public static ExpTypeSource ExpBool { get; private set; } + + public static ExpTypeSource ExpString { get; private set; } + + } +} diff --git a/StgSharp.Script/Express/CompileEnv/DefaultSchema.cs b/StgSharp.Script/Express/CompileEnv/DefaultSchema.cs new file mode 100644 index 00000000..de7d860e --- /dev/null +++ b/StgSharp.Script/Express/CompileEnv/DefaultSchema.cs @@ -0,0 +1,124 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="DefaultSchema" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Linq; + +using static StgSharp.Script.Express.ExpressCompile; + +namespace StgSharp.Script.Express +{ + public sealed partial class ExpSchema_Builtin : ExpSchema + { + + private static readonly ExpSchema_Builtin _onlyInstance = new ExpSchema_Builtin(); + + private ExpSchema_Builtin() + : base() + { + Name = "Nitload"; + } + + internal static ExpSchema_Builtin Only + { + get => _onlyInstance; + } + + public override void LoadFromSource(ExpSchemaSource source) + { + return; + } + + public override bool TryGetConst(string name, out ExpElementInstance c) + { + return ConstDict.TryGetValue(name, out c); + } + + public override bool TryGetEntity(string name, out ExpEntitySource e) + { + e = null; + return false; + } + + public override bool TryGetFunction(string name, out ExpFunctionSource f) + { + return FunctionDict.TryGetValue(name, out f!); + } + + public override bool TryGetProcedure(string name, out ExpProcedureSource p) + { + return ProcedureDict.TryGetValue(name, out p!); + } + + public override bool TryGetRule(string name, out ExpRuleSource r) + { + r = null!; + return false; + } + + public override bool TryGetSchemaInclude(string name, out ExpSchema include) + { + include = null!; + return false; + } + + public override bool TryGetType(string name, out ExpTypeSource t) + { + return TypeDict.TryGetValue(name, out t); + } + + internal void Init() + { + IEnumerable> builtinTypeSource = [ new KeyValuePair( + PoolString(Keyword.Integer), + new ExpBuiltinType(Keyword.Integer, typeof(int))), new KeyValuePair( + PoolString(Keyword.Real), new ExpBuiltinType(Keyword.Real, typeof(float))), new KeyValuePair( + PoolString(Keyword.Boolean), + new ExpBuiltinType(Keyword.Boolean, typeof(bool))), new KeyValuePair( + PoolString(Keyword.Logical), + new ExpBuiltinType(Keyword.Logical, typeof(ExpLogic))), new KeyValuePair( + PoolString(Keyword.String), + new ExpBuiltinType(Keyword.String, typeof(string))), new KeyValuePair( + PoolString(Keyword.Binary), + new ExpBuiltinType(Keyword.Binary, typeof(BitArray))), ]; + TypeDict = new Dictionary(builtinTypeSource, + Multiplexer).ToFrozenDictionary(); + + + ConstDict = new Dictionary(Multiplexer) { + { PoolString("PI"), new ExpRealNumberNode( + new Token(PoolString("PI"), -1, -1, TokenFlag.Number), MathF.PI, true) }, + { PoolString("E"), new ExpRealNumberNode( + new Token(PoolString("E"), -1, -1, TokenFlag.Number), MathF.E, true) }, + }.ToFrozenDictionary(); + } + + } +} diff --git a/StgSharp.Script/Express/CompileEnv/ExpCompile.cs b/StgSharp.Script/Express/CompileEnv/ExpCompile.cs new file mode 100644 index 00000000..a4272184 --- /dev/null +++ b/StgSharp.Script/Express/CompileEnv/ExpCompile.cs @@ -0,0 +1,142 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpCompile" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using CommunityToolkit.HighPerformance.Buffers; + +using StgSharp.Collections; + +using System; +using System.Collections; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Text; + +namespace StgSharp.Script.Express +{ + public static partial class ExpressCompile + { + + private static string[] _operatorsWithLetter; + private static ConcurrentStringHashMultiplexer _multiplexer; + private static FrozenDictionary _builtinConst; + private static FrozenDictionary _builtinType; + private static FrozenDictionary _operators; + private static StringPool _compileStringCache,_emptyCache; + + internal static ConcurrentStringHashMultiplexer Multiplexer + { + get + { + if (_multiplexer == null) { + throw new ExpCompileNotInitializedException(); + } + return _multiplexer; + } + } + + public static void ClearStringCache() + { + _compileStringCache.Reset(); + } + + public static void DeinitCompile() + { + _compileStringCache.Reset(); + _compileStringCache = null!; + + _multiplexer.Dispose(); + _multiplexer = null!; + } + + public static void InitCompile() + { + _compileStringCache = new StringPool(); + _multiplexer = new ConcurrentStringHashMultiplexer(); + + ExpSchema_Builtin.Only.Init(); + + PoolKeywords(); + InitPrecedence(); + + _operatorsWithLetter = [ Keyword.Add, Keyword.Sub, Keyword.Mul, Keyword.Div, Keyword.And, Keyword.Or, Keyword.Xor, Keyword.AndOr, Keyword.Not, ]; + + ExpSchema_Builtin.Only + .TryGetType( + PoolString(Keyword.Integer), out ExpTypeSource? _expInt); + ExpInt = _expInt; + + ExpSchema_Builtin.Only.TryGetType(PoolString(Keyword.Real), out ExpTypeSource? _expReal); + ExpReal = _expReal; + ExpSchema_Builtin.Only + .TryGetType( + PoolString(Keyword.Boolean), out ExpTypeSource? _expBool); + ExpBool = _expBool; + + ExpSchema_Builtin.Only + .TryGetType( + PoolString(Keyword.Boolean), out ExpTypeSource? _expString); + ExpString = _expString; + + + _emptyCache = new StringPool(); + /* + foreach( string str in _compileStringCache ) { + _emptyCache.Add( str ); + } + /**/ + } + + public static bool LetterIsKeyword(string str) + { + if (char.IsLetter(str[0])) { + return _keywordSet.Contains(str); + } + return true; + } + + public static bool LetterIsOperator(string str) + { + if (char.IsLetter(str[0])) { + return Array.IndexOf(_operatorsWithLetter, str) != -1; + } + return true; + } + + public static string PoolString(string str) + { + return _compileStringCache.GetOrAdd(str); + } + + public static string PoolString(ReadOnlySpan str) + { + return _compileStringCache.GetOrAdd(str); + } + + } +} diff --git a/StgSharp.Script/Express/CompileEnv/ExpOperatorPrecedence.cs b/StgSharp.Script/Express/CompileEnv/ExpOperatorPrecedence.cs new file mode 100644 index 00000000..1f599c47 --- /dev/null +++ b/StgSharp.Script/Express/CompileEnv/ExpOperatorPrecedence.cs @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpOperatorPrecedence" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public static partial class ExpressCompile + { + + public static bool TryGetOperatorPrecedence(string operatorName, out int precedence) + { + return _operatorPrecedence.TryGetValue(operatorName, out precedence); + } + + public static bool TryGetSuperTypeOperatorPrecedence(string operatorName, out int precedence) + { + return _superTypeOperatorPrecedent.TryGetValue(operatorName, out precedence); + } + + private static void InitPrecedence() + { + KeyValuePair[] source = [ new KeyValuePair(PoolString("["), 1), new KeyValuePair(PoolString("."), 1), new KeyValuePair(PoolString("\\"), 1), new KeyValuePair(PoolString("unary+"), 2), new KeyValuePair(PoolString("unary-"), 2), new KeyValuePair(PoolString("NOT"), 2), new KeyValuePair(PoolString("**"), 3), new KeyValuePair(PoolString("*"), 4), new KeyValuePair(PoolString("/"), 4), new KeyValuePair(PoolString("AND"), 4), new KeyValuePair(PoolString("MOD"), 4), new KeyValuePair(PoolString("DIV"), 4), new KeyValuePair(PoolString("||"), 4), new KeyValuePair(PoolString("+"), 5), new KeyValuePair(PoolString("-"), 5), new KeyValuePair(PoolString("OR"), 5), new KeyValuePair(PoolString("XOR"), 5), new KeyValuePair(PoolString("="), 6), new KeyValuePair(PoolString("<>"), 6), new KeyValuePair(PoolString("<="), 6), new KeyValuePair(PoolString(">="), 6), new KeyValuePair(PoolString(">"), 6), new KeyValuePair(PoolString("<"), 6), new KeyValuePair(PoolString(":=:"), 6), new KeyValuePair(PoolString(":<>:"), 6), new KeyValuePair(PoolString("IN"), 6), new KeyValuePair(PoolString("LIKE"), 6), new KeyValuePair(PoolString(Keyword.Assignment), 7) ]; + _operatorPrecedence = new Dictionary(source, + _multiplexer).ToFrozenDictionary(); + source = [ new KeyValuePair("ONEOF", 1), new KeyValuePair("AND", 2), new KeyValuePair("ANDOR", 3), ]; + _superTypeOperatorPrecedent = new Dictionary(source, + _multiplexer).ToFrozenDictionary( + ); + } + + #pragma warning disable CS8618 + private static FrozenDictionary _superTypeOperatorPrecedent; + private static FrozenDictionary _operatorPrecedence; + #pragma warning restore CS8618 + } +} diff --git a/StgSharp.Script/Express/CompileEnv/KeyWord.cs b/StgSharp.Script/Express/CompileEnv/KeyWord.cs new file mode 100644 index 00000000..711f3d1d --- /dev/null +++ b/StgSharp.Script/Express/CompileEnv/KeyWord.cs @@ -0,0 +1,318 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="KeyWord" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public static partial class ExpressCompile + { + + private static HashSet _keywordSet; + + private static void PoolKeywords() + { + _keywordSet = new(); + + FieldInfo[] fields = typeof(Keyword).GetFields(BindingFlags.Public); + ParallelLoopResult result = Parallel.ForEach( + fields, static(field) => { + if (field.FieldType == typeof(string) && field.GetValue(null) is string str) + { + _compileStringCache.GetOrAdd(str); + _keywordSet.Add(str); + } + }); + while (!result.IsCompleted) { } + } + + public static class Keyword + { + + public static HashSet ScopeBlock = new HashSet { + EndAlias, EndCase, EndConstant, EndEntity, EndFunction, EndIf, EndLocal, EndProcedure, EndRepeat, EndRule, EndSchema, EndSubtypeConstraint, EndType + }; + + public static HashSet Symbols = [ Dot, Comma, Semicolon, Colon, Percent, Apostrophe, Backslash, IndexOf, RightBracket, LeftBrace, RightBrace, Pipe, LeftParen, RightParen, LeftAsterisk, Assignment, DoublePipe, ExpSymbol, CommentSingleLine, CommentStart, CommentEnd, InstanceEqual, InstanceNotEqual ]; + + public static HashSet DataTypes { get; } = [ Array, Bag, Binary, Boolean, Enumeration, Integer, List, Logical, Number, Of, Real, Set, String ]; + + public static HashSet InternalProcess { get; } = [ Insert, Remove ]; + + public static HashSet BuiltinFunctions { get; } = [ Abs, Acos, Asin, Atan, BLength, Cos, Exists, Exp, Format, HiBound, HiIndex, Length, LoBound, Log, Log2, Log10, LoIndex, Nvl, Odd, Rolesof, Sin, Sizeof, Sqrt, Tan, Typeof, Usedin, Value, ValueIn, ValueUnique ]; + + public static HashSet Literals { get; } = [ QuestionMark, Self, Const, E, Pi, False, True, Unknown ]; + + public static HashSet Operators { get; } = [ And, AndOr, Div, In, Like, Mod, Not, Or, Xor, Add, Sub, Mul, Slash, Equal, NotEqual, LessThan, GreaterThan, LessThanOrEqual, GreaterThanOrEqual ]; + + public static HashSet Aliasing { get; } = [ Alias, Renamed ]; + + public static HashSet ModifiersAttributes { get; } = [ Abstract, Aggregate, As, BasedOn, By, Escape, Fixed, From, Use, With ]; + + public static HashSet QueryReference { get; } = [ Query, Reference, Select ]; + + public static HashSet ConstraintsInheritance { get; } = [ Oneof, Optional, Subtype, SubtypeConstraint, Supertype, TotalOver, Unique, Where ]; + + public static HashSet Declarations { get; } = [ Constant, Derive, Entity, Extensible, Fixed, Function, Generic, GenericEntity, Inverse, Local, Procedure, Rule, Schema, Type, Var ]; + + public static HashSet FlowControl { get; } = [ Begin, Case, Else, End, For, If, Otherwise, Repeat, Return, Skip, Then, To, Until, While ]; + + #region Basic Data Type + + public const string Array = "ARRAY"; + public const string Bag = "BAG"; + public const string Binary = "BINARY"; + public const string Boolean = "BOOLEAN"; + public const string Enumeration = "ENUMERATION"; + public const string Integer = "INTEGER"; + public const string List = "LIST"; + public const string Logical = "LOGICAL"; + public const string Number = "NUMBER"; + public const string Of = "OF"; + public const string Real = "REAL"; + public const string Set = "SET"; + public const string String = "STRING"; + + #endregion + + #region Flow Control + + public const string Begin = "BEGIN"; + public const string Case = "CASE"; + public const string Else = "ELSE"; + public const string End = "END"; + public const string For = "FOR"; + public const string If = "IF"; + public const string Otherwise = "OTHERWISE"; + public const string Repeat = "REPEAT"; + public const string Return = "RETURN"; + public const string Skip = "SKIP"; + public const string Then = "THEN"; + public const string To = "TO"; + public const string Until = "UNTIL"; + public const string While = "WHILE"; + + #endregion + + #region Declarations + + public const string Constant = "CONSTANT"; + public const string Derive = "DERIVE"; + public const string Entity = "ENTITY"; + public const string Extensible = "EXTENSIBLE"; + public const string Fixed = "FIXED"; + public const string Function = "FUNCTION"; + public const string Generic = "GENERIC"; + public const string GenericEntity = "GENERIC_ENTITY"; + public const string Inverse = "INVERSE"; + public const string Local = "LOCAL"; + public const string Procedure = "PROCEDURE"; + public const string Rule = "RULE"; + public const string Schema = "SCHEMA"; + public const string Type = "TYPE"; + public const string Var = "VAR"; + + #endregion + + #region Constraints Inheritance + + public const string Oneof = "ONEOF"; + public const string Optional = "OPTIONAL"; + public const string Subtype = "SUBTYPE"; + public const string SubtypeConstraint = "SUBTYPE CONSTRAINT"; + public const string Supertype = "SUPERTYPE"; + public const string TotalOver = "TOTAL OVER"; + public const string Unique = "UNIQUE"; + public const string Where = "WHERE"; + + #endregion + + #region Scope + + public const string EndAlias = "END_ALIAS"; + public const string EndCase = "END_CASE"; + public const string EndConstant = "END_CONSTANT"; + public const string EndEntity = "END_ENTITY"; + public const string EndFunction = "END_FUNCTION"; + public const string EndIf = "END_IF"; + public const string EndLocal = "END_LOCAL"; + public const string EndProcedure = "END_PROCEDURE"; + public const string EndRepeat = "END_REPEAT"; + public const string EndRule = "END_RULE"; + public const string EndSchema = "END_SCHEMA"; + public const string EndSubtypeConstraint = "END_SUBTYPE CONSTRAINT"; + public const string EndType = "END_TYPE"; + + #endregion + + #region Index and Ref + + public const string Query = "QUERY"; + public const string Reference = "REFERENCE"; + public const string Select = "SELECT"; + + #endregion + + #region Modifiers Attributes + + public const string Abstract = "ABSTRACT"; + public const string Aggregate = "AGGREGATE"; + public const string As = "AS"; + public const string BasedOn = "BASED ON"; + public const string By = "BY"; + public const string Escape = "ESCAPE"; + public const string From = "FROM"; + public const string Use = "USE"; + public const string With = "WITH"; + + #endregion + + #region Aliasing + + public const string Alias = "ALIAS"; + public const string Renamed = "RENAMED"; + + #endregion + + #region Operator + + public const string And = "AND"; + public const string AndOr = "ANDOR"; + public const string Div = "DIV"; + public const string In = "IN"; + public const string Like = "LIKE"; + public const string Mod = "MOD"; + public const string Not = "NOT"; + public const string Or = "OR"; + public const string Xor = "XOR"; + + #endregion + + #region Constants + + public const string QuestionMark = "?"; + public const string Self = "SELF"; + public const string Const = "CONST"; + public const string E = "E"; + public const string Pi = "PI"; + public const string False = "FALSE"; + public const string True = "TRUE"; + public const string Unknown = "UNKNOWN"; + + #endregion + + #region Functions + + public const string Abs = "ABS"; + public const string Acos = "ACOS"; + public const string Asin = "ASIN"; + public const string Atan = "ATAN"; + public const string BLength = "BLENGTH"; + public const string Cos = "COS"; + public const string Exists = "EXISTS"; + public const string Exp = "EXP"; + public const string Format = "FORMAT"; + public const string HiBound = "HIBOUND"; + public const string HiIndex = "HIINDEX"; + public const string Length = "LENGTH"; + public const string LoBound = "LObound"; + public const string Log = "LOG"; + public const string Log2 = "LOG2"; + public const string Log10 = "LOG10"; + public const string LoIndex = "LOINDEX"; + public const string Nvl = "NVL"; + public const string Odd = "ODD"; + public const string Rolesof = "ROLESOF"; + public const string Sin = "SIN"; + public const string Sizeof = "SIZEOF"; + public const string Sqrt = "SQRT"; + public const string Tan = "TAN"; + public const string Typeof = "TYPEOF"; + public const string Usedin = "USEDIN"; + public const string Value = "VALUE"; + public const string ValueIn = "VALUE IN"; + public const string ValueUnique = "VALUE UNIQUE"; + + #endregion + + #region Procedure + + public const string Insert = "INSERT"; + public const string Remove = "REMOVE"; + + #endregion + + #region Symbols + + public const string Dot = "."; + public const string Comma = ","; + public const string Semicolon = ";"; + public const string Colon = ":"; + public const string Mul = "*"; + public const string Add = "+"; + public const string UnaryPlus = "+"; + public const string Sub = "-"; + public const string UnaryMinus = "-"; + public const string Equal = "="; + public const string Percent = "%"; + public const string Apostrophe = "'"; + public const string Backslash = "\\"; + public const string Slash = "/"; + public const string LessThan = "<"; + public const string GreaterThan = ">"; + public const string IndexOf = "["; + public const string LeftBracket = "["; + public const string RightBracket = "]"; + public const string LeftBrace = "{"; + public const string RightBrace = "}"; + public const string Pipe = "|"; + public const string EConstant = "E"; + public const string LeftParen = "("; + public const string RightParen = ")"; + public const string LessThanOrEqual = "<="; + public const string NotEqual = "<>"; + public const string GreaterThanOrEqual = ">="; + public const string LeftAsterisk = "<*"; + public const string Assignment = ":="; + public const string DoublePipe = "||"; + public const string ExpSymbol = "**"; + public const string CommentSingleLine = "--"; + public const string CommentStart = "(*"; + public const string CommentEnd = "*)"; + public const string InstanceEqual = ":=:"; + public const string InstanceNotEqual = ":<>:"; + + #endregion + } + + } +} diff --git a/StgSharp.Script/Express/Element/ExpConst.cs b/StgSharp.Script/Express/Element/ExpConst.cs new file mode 100644 index 00000000..308ddc23 --- /dev/null +++ b/StgSharp.Script/Express/Element/ExpConst.cs @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpConst" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq.Expressions; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.Script.Express +{ + public sealed class ExpConstantCollectionSource : ExpImmutableElement + { + + private Dictionary _constants; + private IScriptSourceProvider _sourceProvider; + + public ExpConstantCollectionSource(IScriptSourceProvider sourceProvider) + { + _sourceProvider = sourceProvider; + _constants = new Dictionary(ExpressCompile.Multiplexer); + } + + public override ExpElementType ElementType => ExpElementType.Const; + + public override IScriptSourceProvider SourceProvider => _sourceProvider; + + public override string Name + { + get => ExpressCompile.Keyword.Constant; + } + + public override void Analyse() + { + throw new NotImplementedException(); + } + + public override ExpSyntaxNode MakeReference(params object[] options) + { + if (options.Length == 0 || options[0] is not string str) { + return null!; + } + if (_constants.Count == 0) { + return null!; + } + if (_constants.TryGetValue(str, out ExpElementInstance? token)) { + return token; + } + return null!; + } + + public bool TryGetConstant(string name, out ExpElementInstance instance) + { + return _constants.TryGetValue(name, out instance); + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + if (_constants.TryGetValue(name, out ExpElementInstance? node)) + { + memberNode = node; + return true; + } + memberNode = ExpSyntaxNode.Empty; + return false; + } + + internal void AddConstant(string name, ExpElementInstance value) + { + _constants.Add(name, value); + } + + } +} diff --git a/StgSharp.Script/Express/Element/ExpEntity.cs b/StgSharp.Script/Express/Element/ExpEntity.cs new file mode 100644 index 00000000..d0b5188a --- /dev/null +++ b/StgSharp.Script/Express/Element/ExpEntity.cs @@ -0,0 +1,69 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpEntity" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + public class ExpEntitySource : ExpInstantiableElement + { + + private AbstractSyntaxTree _expressionTree; + private ScriptSourceTransmitter _source; + private string _name; + + public ExpEntitySource(string name, ScriptSourceTransmitter provider) + { + _name = name; + _source = provider; + } + + public override ExpElementType ElementType => ExpElementType.Entity; + + public override IScriptSourceProvider SourceProvider => _source; + + public override string Name => _name; + + public override void Analyse() + { + throw new NotImplementedException(); + } + + public override ExpSyntaxNode CreateInstanceNode(Token t) + { + throw new NotImplementedException(); + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Script/Express/Element/ExpFunction.cs b/StgSharp.Script/Express/Element/ExpFunction.cs new file mode 100644 index 00000000..9bfa67a0 --- /dev/null +++ b/StgSharp.Script/Express/Element/ExpFunction.cs @@ -0,0 +1,94 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpFunction" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + public class ExpFunctionSource : ExpImmutableElement + { + + private ScriptSourceTransmitter _transmitter; + private string _name; + + public ExpFunctionSource(string name, ScriptSourceTransmitter transmitter) + { + _name = name; + _transmitter = transmitter; + } + + public Dictionary FuncParams { get; init; } = new Dictionary( + ); + + public Dictionary LocalVariables { get; init; } = new Dictionary( + ); + + public override ExpElementType ElementType => ExpElementType.Function; + + public ExpInstantiableElement ReturningType { get; protected set; } + + public override IScriptSourceProvider SourceProvider => _transmitter; + + public override string Name => _name; + + public string CallingFormat { get; private set; } + + public override void Analyse() + { + throw new NotImplementedException(); + /* + * generate parameter list, + * generate C# code + * generate calling syntax + */ + } + + public override ExpSyntaxNode MakeReference(params object[] options) + { + throw new NotImplementedException(); + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + if (FuncParams.TryGetValue(name, out ExpElementInstance? param)) + { + memberNode = param; + return true; + } + if (LocalVariables.TryGetValue(name, out ExpElementInstance? variable)) + { + memberNode = variable; + return true; + } + memberNode = ExpSyntaxNode.Empty; + return false; + } + + } +} diff --git a/StgSharp.Script/Express/Element/ExpProcedureSource.cs b/StgSharp.Script/Express/Element/ExpProcedureSource.cs new file mode 100644 index 00000000..2ea0bf6f --- /dev/null +++ b/StgSharp.Script/Express/Element/ExpProcedureSource.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpProcedureSource" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpProcedureSource : ExpImmutableElement + { + + public override ExpElementType ElementType => ExpElementType.Procedure; + + public override IScriptSourceProvider SourceProvider => throw new NotImplementedException(); + + public override string Name => throw new NotImplementedException(); + + public override void Analyse() + { + throw new NotImplementedException(); + } + + public override ExpSyntaxNode MakeReference(params object[] options) + { + throw new NotImplementedException(); + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Script/Express/Element/ExpRule.cs b/StgSharp.Script/Express/Element/ExpRule.cs new file mode 100644 index 00000000..49a7cc78 --- /dev/null +++ b/StgSharp.Script/Express/Element/ExpRule.cs @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpRule" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Data; +using System.Reflection.Metadata.Ecma335; +using System.Text; + +namespace StgSharp.Script.Express +{ + public class ExpRule : ExpElementInstance + { + + private ExpRuleSource _source; + + public ExpRule(Token source) : base(source) { } + + public object? value => throw new NotImplementedException(); + + public override ExpInstantiableElement EqualityTypeConvert => throw new NotImplementedException( + ); + + public override ExpSyntaxNode Left => throw new NotImplementedException(); + + public override ExpSyntaxNode Right => throw new NotImplementedException(); + + public override string TypeName => _source.Name; + + } + + public class ExpRuleSource : ExpImmutableElement + { + + private ScriptSourceTransmitter _transmitter; + private string _name; + + public ExpRuleSource(string name, ScriptSourceTransmitter transmitter) + { + _name = name; + _transmitter = transmitter; + } + + public override ExpElementType ElementType => ExpElementType.Rule; + + public override IScriptSourceProvider SourceProvider => _transmitter; + + public override string Name => _name; + + public override void Analyse() + { + throw new NotImplementedException(); + } + + public override ExpSyntaxNode MakeReference(params object[] options) + { + throw new NotImplementedException(); + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + memberNode = ExpSyntaxNode.Empty; + return false; + } + + } +} diff --git a/StgSharp.Script/Express/Element/ExpType.cs b/StgSharp.Script/Express/Element/ExpType.cs new file mode 100644 index 00000000..55f22c16 --- /dev/null +++ b/StgSharp.Script/Express/Element/ExpType.cs @@ -0,0 +1,113 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpType" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Script; + +using System; +using System.Collections.Generic; + +namespace StgSharp.Script.Express +{ + public class ExpTypeSource : ExpInstantiableElement + { + + private ScriptSourceTransmitter _transmitter; + private string _name; + protected bool _isBuiltinType; + + protected ExpTypeSource(string name) + { + _name = name; + _transmitter = ScriptSourceTransmitter.Empty; + _isBuiltinType = true; + } + + public ExpTypeSource(string name, ScriptSourceTransmitter transmitter) + { + _name = name; + _transmitter = transmitter; + _isBuiltinType = false; + } + + public bool IsLanguageBuiltinType + { + get => _isBuiltinType; + } + + public override ExpElementType ElementType => ExpElementType.Type; + + public static ExpTypeSource Void + { + get => ExpVoidType.Only; + } + + public override IScriptSourceProvider SourceProvider => _transmitter; + + public override string Name => _name; + + public override void Analyse() + { + throw new NotImplementedException(); + } + + public override ExpElementInstance CreateInstanceNode(Token t) + { + throw new NotImplementedException(); + } + + public static bool IsNullOrVoid(IExpElementSource type) + { + return type == null || type == ExpVoidType.Only; + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + memberNode = ExpSyntaxNode.Empty; + return false; + } + + private class ExpVoidType : ExpTypeSource + { + + private static readonly ExpVoidType _onlyInstance = new ExpVoidType(); + + private ExpVoidType() : base(string.Empty) { } + + public static ExpVoidType Only + { + get => _onlyInstance; + } + + public override void Analyse() + { + return; + } + + } + + } +} \ No newline at end of file diff --git a/StgSharp.Script/Express/ExpAstNode/ExpBinaryOperatorNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpBinaryOperatorNode.cs new file mode 100644 index 00000000..97bcf6cb --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpBinaryOperatorNode.cs @@ -0,0 +1,258 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpBinaryOperatorNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp; + +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpBinaryOperatorNode : ExpSyntaxNode + { + + private ExpInstantiableElement _returnType; + + private ExpSyntaxNode _left; + private ExpSyntaxNode _right; + + private ExpBinaryOperatorNode(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + : base(source) + { + _left = left; + _right = right; + } + + public override ExpInstantiableElement EqualityTypeConvert => _returnType; + + public override ExpSyntaxNode Left => _left; + + public override ExpSyntaxNode Right => _right; + + public string Operator { get; private set; } + + public static ExpBinaryOperatorNode Add(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + bool isFloat = + (left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 || + (right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0; + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt, + _nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number, + CodeConvertTemplate = "{0} + {1}", + }; + } + + public static ExpBinaryOperatorNode Assign(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (left.EqualityTypeConvert != right.EqualityTypeConvert) { + throw new ExpInvalidTypeException( + source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpInstantiableElement.Void, + _nodeFlag = ExpNodeFlag.Operator_Binary | left._nodeFlag, + Operator = "=", + CodeConvertTemplate = "{0} = {1}", + }; + } + + public static ExpBinaryOperatorNode CompareInstanceEqual(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "!ReferenceEquals({0}, {1})", + }; + } + + public static ExpBinaryOperatorNode CompareInstanceNotEqual( + Token source, + ExpSyntaxNode left, + ExpSyntaxNode right) + { + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "ReferenceEquals({0}, {1})", + }; + } + + public static ExpBinaryOperatorNode ConvertElement(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (right is not ExpMetaRefNode metaRef) { + throw new ExpInvalidTypeException( + source, "", right.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = metaRef.SourceRef, + _nodeFlag = ExpNodeFlag.Operator_Binary, + /* + * 0. instance to convert + * 1. target type + */ + CodeConvertTemplate = @"({0} as {1})" + }; + } + + public static ExpBinaryOperatorNode Div(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + bool isFloat = + (left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 || + (right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0; + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt, + _nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number, + CodeConvertTemplate = "{0} / {1}", + }; + } + + public static ExpBinaryOperatorNode EqualTo(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (left.EqualityTypeConvert != right.EqualityTypeConvert) { + throw new ExpInvalidTypeException( + source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "{0} == {1}", + }; + } + + public static ExpBinaryOperatorNode GreaterThan(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "{0} > {1}", + }; + } + + public static ExpBinaryOperatorNode LessThan(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "{0} < {1}", + }; + } + + public static ExpBinaryOperatorNode Mul(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + bool isFloat = + (left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 || + (right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0; + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt, + _nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number, + CodeConvertTemplate = "{0} * {1}", + }; + } + + public static ExpBinaryOperatorNode NotEqualTo(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (left.EqualityTypeConvert != right.EqualityTypeConvert) { + throw new ExpInvalidTypeException( + source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "{0} != {1}", + }; + } + + public static ExpBinaryOperatorNode SmallerThan(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = ExpressCompile.ExpBool, + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary, + CodeConvertTemplate = "{0} < {1}", + }; + } + + public static ExpBinaryOperatorNode Sub(Token source, ExpSyntaxNode left, ExpSyntaxNode right) + { + if (!left.IsNumber && !right.IsNumber) { + throw new ExpInvalidTypeException(source, "Number", + left.EqualityTypeConvert.Name); + } + bool isFloat = + (left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 || + (right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0; + return new ExpBinaryOperatorNode(source, left, right) + { + _returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt, + _nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number, + CodeConvertTemplate = "{0} - {1}", + }; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpCollectionIndexNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpCollectionIndexNode.cs new file mode 100644 index 00000000..d4543867 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpCollectionIndexNode.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpCollectionIndexNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpCollectionIndexNode : ExpSyntaxNode + { + + private ExpCollectionInstanceBase _collection; + + private ExpSyntaxNode _indexExpression; + + private ExpCollectionIndexNode(Token source, ExpCollectionInstanceBase instance, ExpSyntaxNode indexExpression) + : base(source) + { + _collection = instance; + _indexExpression = indexExpression; + CodeConvertTemplate = @"{0}[{1}]"; + } + + public override ExpSyntaxNode Left => _collection; + + public override ExpSyntaxNode Right => _indexExpression; + + public override IExpElementSource EqualityTypeConvert => _collection.EqualityTypeConvert; + + public static ExpCollectionIndexNode Create( + Token source, + ExpCollectionInstanceBase instance, + ExpSyntaxNode indexExpression) + { + if (!indexExpression.IsNumber) { + throw new ExpInvalidTypeException( + source, "Number", indexExpression.EqualityTypeConvert.Name); + } + return new ExpCollectionIndexNode(source, instance, indexExpression); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpElementInitializingNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpElementInitializingNode.cs new file mode 100644 index 00000000..4d0a5ff3 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpElementInitializingNode.cs @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpElementInitializingNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpElementInitializingNode : ExpSyntaxNode + { + + private ExpMetaRefNode _type; + private ExpSyntaxNode _init; + + private ExpElementInitializingNode(Token source, ExpMetaRefNode type, ExpSyntaxNode initParameter) + : base(source) + { + _type = type; + _init = initParameter; + } + + public override ExpSyntaxNode Left => _type; + + public override ExpSyntaxNode Right => _init; + + public override IExpElementSource EqualityTypeConvert => _type.SourceRef; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ExpElementInitializingNode InitializeElement(Token source, ExpMetaRefNode type, ExpSyntaxNode init) + { + if (init is ExpTupleNode tupleNode) { + init = tupleNode.Right; + } + ExpElementInitializingNode node = new ExpElementInitializingNode(source, type, init); + return node; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpElementMemberNameNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpElementMemberNameNode.cs new file mode 100644 index 00000000..4afddc5a --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpElementMemberNameNode.cs @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpElementMemberNameNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpElementMemberNameNode : ExpSyntaxNode + { + + internal ExpElementMemberNameNode(Token source) + : base(source) + { + _nodeFlag = ExpNodeFlag.Name_Operator; + CodeConvertTemplate = source.Value; + } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => Empty; + + public override IExpElementSource EqualityTypeConvert + { + get + { + ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.String, out ExpTypeSource? strType); + return strType; + } + } + + public static ExpElementMemberNameNode Create(Token t) + { + return new ExpElementMemberNameNode(t); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpEnumLiteralNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpEnumLiteralNode.cs new file mode 100644 index 00000000..ce6c9875 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpEnumLiteralNode.cs @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpEnumLiteralNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Script; + +using System; + +namespace StgSharp.Script.Express +{ + public class ExpEnumLiteralNode : ExpSyntaxNode + { + + private ExpEnumLiteralNode(Token t) : base(t) { } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => Empty; + + public override IExpElementSource EqualityTypeConvert => ExpInstantiableElement.Void; + + public string Literal { get; private set; } + + public static ExpEnumLiteralNode Create(Token t, Func parser) + { + string l; + if (parser is null) + { + l = t.Value; + } else + { + l = parser(t.Value); + } + return new ExpEnumLiteralNode(t) + { + Literal = l, + CodeConvertTemplate = l + }; + } + + } +} \ No newline at end of file diff --git a/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs new file mode 100644 index 00000000..96ac07d6 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs @@ -0,0 +1,75 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpFunctionCallingNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpFunctionCallingNode : ExpSyntaxNode + { + + private ExpFunctionSource _function; + + private ExpSyntaxNode _parameter; + + private ExpFunctionCallingNode(Token source, ExpFunctionSource function, ExpSyntaxNode parameterEnumeration) + : base(source) + { + if (parameterEnumeration is ExpTupleNode tuple) { + parameterEnumeration = tuple.Right; + } + _function = function; + _parameter = parameterEnumeration; + } + + public ExpFunctionSource FunctionCaller => _function; + + public override ExpInstantiableElement EqualityTypeConvert => _function.ReturningType; + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => _parameter; + + public void AppendParameter(ExpSyntaxNode parameter) + { + _parameter.AppendNode(parameter); + } + + public static ExpFunctionCallingNode CallFunction(Token source, ExpFunctionSource function, ExpSyntaxNode param) + { + if (param is ExpTupleNode) { + param = param.Right; + } + return new ExpFunctionCallingNode(source, function, param); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpIfNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpIfNode.cs new file mode 100644 index 00000000..f04f5972 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpIfNode.cs @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpIfNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Script.Express; + +using System; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + public sealed class ExpIfNode : ExpSyntaxNode + { + + private ExpSyntaxNode _falseOpBegin; + private ExpSyntaxNode _rule; + private ExpSyntaxNode _trueOpBegin ; + + public ExpIfNode(Token source, ExpSyntaxNode rule, ExpSyntaxNode trueOpBegin) + : base(source) + { + _rule = rule; + _trueOpBegin = trueOpBegin; + CodeConvertTemplate = ExpressCompile.PoolString( + """ + if ( {0} ) + { + {1} + } + """); + } + + public ExpIfNode( + Token source, + ExpSyntaxNode rule, + ExpSyntaxNode rootOperationIfTrue, + ExpSyntaxNode rootOperationIfFalse) + : base(source) + { + _rule = rule; + _trueOpBegin = rootOperationIfFalse; + _falseOpBegin = rootOperationIfFalse; + CodeConvertTemplate = ExpressCompile.PoolString( + """ + if( {0} ) + { + {1} + } else { + {2} + } + """); + } + + public override ExpSyntaxNode Left => _trueOpBegin; + + public override ExpSyntaxNode Right => _falseOpBegin; + + public override IExpElementSource EqualityTypeConvert => null!; + + public void AppendFalseOperation(ExpSyntaxNode expressionRoot) + { + _falseOpBegin.AppendNode(expressionRoot); + } + + public void AppendTrueOperation(ExpSyntaxNode expressionRoot) + { + _trueOpBegin.AppendNode(expressionRoot); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpInstanceMemberNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpInstanceMemberNode.cs new file mode 100644 index 00000000..b5ad12d0 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpInstanceMemberNode.cs @@ -0,0 +1,60 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpInstanceMemberNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using CommunityToolkit.HighPerformance.Helpers; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpInstanceMemberNode : ExpSyntaxNode + { + + private ExpElementInstance _instance; + private ExpElementMemberNameNode _memberName; + private ExpSyntaxNode _member; + + public ExpInstanceMemberNode(Token source, ExpElementInstance instance, ExpElementMemberNameNode memberName) + : base(source) + { + _instance = instance; + _memberName = memberName; + _instance.TryGetMember(memberName.CodeConvertTemplate, out _member); + } + + public override ExpSyntaxNode Left => _instance; + + public override ExpSyntaxNode Right => _memberName; + + public override IExpElementSource EqualityTypeConvert => _member.EqualityTypeConvert; + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs new file mode 100644 index 00000000..917e35e7 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpInstanceReferenceNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpInstanceReferenceNode : ExpSyntaxNode + { + + internal ExpInstanceReferenceNode(Token source, ExpElementInstance instance) + : base(source) + { + OriginObject = instance; + _nodeFlag = (OriginObject._nodeFlag | (ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any)); + CodeConvertTemplate = source.Value; + } + + internal ExpInstanceReferenceNode(Token source, ExpInstanceReferenceNode reference) + : base(source) + { + OriginObject = reference.OriginObject; + _nodeFlag = (OriginObject._nodeFlag | (ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any)); + CodeConvertTemplate = source.Value; + } + + public ExpElementInstance OriginObject { get ; private set; } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => Empty; + + public override IExpElementSource EqualityTypeConvert => OriginObject.EqualityTypeConvert; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ExpInstanceReferenceNode MakeReferenceFrom(Token source, ExpElementInstance instance) + { + /**/ + if (instance.IsLiteral) + { + throw new ExpCompileException(source, "Cannot make reference to a literal."); + } + if (instance.CodeConvertTemplate != source.Value) { + throw new ExpCompileException(source, "Token point at a wrong instance"); + } + /**/ + return new ExpInstanceReferenceNode(source, instance); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpLiteralNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpLiteralNode.cs new file mode 100644 index 00000000..f7c3be85 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpLiteralNode.cs @@ -0,0 +1,187 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpLiteralNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Data; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace StgSharp.Script.Express +{ + public class ExpIntNode : ExpElementInstance + { + + private int _value; + + public ExpIntNode(Token source, int value, bool isLiteral) + : base(source) + { + this.IsLiteral = isLiteral; + _value = value; + _nodeFlag = ExpNodeFlag.BuiltinType_Int | ExpNodeFlag.Element_Type; + CodeConvertTemplate = IsLiteral ? value.ToString() : source.Value; + } + + public override IExpElementSource EqualityTypeConvert + { + get => ExpressCompile.ExpInt; + } + + public int Value => _value; + + public override string TypeName => ExpressCompile.Keyword.Integer; + + } + + public class ExpStringNode : ExpElementInstance + { + + private readonly string _value; + + public ExpStringNode(Token source, string value, bool isLiteral) + : base(source) + { + this.IsLiteral = IsLiteral; + _value = value; + _nodeFlag = ExpNodeFlag.BuiltinType_String | ExpNodeFlag.Element_Type; + CodeConvertTemplate = IsLiteral ? $"\"{value}\"" : source.Value; + } + + public override IExpElementSource EqualityTypeConvert + { + get => ExpressCompile.ExpString; + } + + public override string TypeName => EqualityTypeConvert.Name; + + public string Value => _value; + + } + + public interface IExpBooleanSyntax + { + + bool Value { get; } + + } + + public class ExpBoolNode : ExpElementInstance, IExpBooleanSyntax + { + + private readonly bool _value; + + public ExpBoolNode(Token source, bool value, bool isLiteral) + : base(source) + { + this.IsLiteral = isLiteral; + _value = value; + _nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Element_Type; + CodeConvertTemplate = IsLiteral ? value.ToString() : source.Value; + } + + public bool Value => _value; + + public override IExpElementSource EqualityTypeConvert + { + get => ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.Boolean, out ExpTypeSource? type) ? + type : + throw new ExpCompileNotInitializedException(); + } + + public override string TypeName => EqualityTypeConvert.Name; + + public static ExpBoolNode False(Token? t) + { + return new(t ?? new Token("FALSE", 0, -1, TokenFlag.Member), false, + isLiteral:true); + } + + public static ExpBoolNode True(Token? t) + { + return new(t ?? new Token("TRUE", 0, -1, TokenFlag.Member), true, isLiteral:true); + } + + } + + public class ExpRealNumberNode : ExpElementInstance + { + + private readonly float _value; + + public ExpRealNumberNode(Token source, float value, bool isLiteral) + : base(source) + { + _value = value; + _nodeFlag = ExpNodeFlag.BuiltinType_Real | ExpNodeFlag.Element_Type; + CodeConvertTemplate = isLiteral ? $"{value:F8}f" : source.Value; + } + + public float Value => _value; + + public override IExpElementSource EqualityTypeConvert + { + get => ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.String, out ExpTypeSource? type) ? + type : + throw new ExpCompileNotInitializedException(); + } + + public override string TypeName => EqualityTypeConvert.Name; + + } + + public class ExpLogicValueNode : ExpElementInstance, IExpBooleanSyntax + { + + private readonly ExpLogic _value; + + public ExpLogicValueNode(Token source, ExpLogic value, bool isLiteral) + : base(source) + { + this.IsLiteral = isLiteral; + _value = value; + _nodeFlag = ExpNodeFlag.BuiltinType_Logic | ExpNodeFlag.Element_Type; + CodeConvertTemplate = isLiteral ? value.ToString() : source.Value; + } + + public ExpLogic LogicValue => _value; + + public override IExpElementSource EqualityTypeConvert + { + get => ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.Logical, out ExpTypeSource? type) ? + type : + throw new ExpCompileNotInitializedException(); + } + + public override string TypeName => EqualityTypeConvert.Name; + + bool IExpBooleanSyntax.Value => _value.ToBoolean(); + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpMetaRefNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpMetaRefNode.cs new file mode 100644 index 00000000..aad65c74 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpMetaRefNode.cs @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpMetaRefNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpMetaRefNode : ExpSyntaxNode + { + + internal ExpMetaRefNode(Token source, ExpInstantiableElement element) + : base(source) + { + SourceRef = element; + } + + public ExpInstantiableElement SourceRef { get; init; } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => Empty; + + public override IExpElementSource EqualityTypeConvert => ExpInstantiableElement.Void; + + public static ExpMetaRefNode RefEntity(Token position, ExpEntitySource entity) + { + if (position.Value != entity.Name) { + throw new ExpCompileException( + position, + $"Meta data does not match, name of source to match is {entity.Name}, but token is {position.Value}"); + } + ExpMetaRefNode node = new ExpMetaRefNode(position, entity) + { + CodeConvertTemplate = entity.Name, + }; + return node; + } + + public static ExpMetaRefNode RefType(Token position, ExpTypeSource type) + { + if (position.Value != type.Name) { + throw new ExpCompileException( + position, + $"Meta data does not match, name of source to match is {type.Name}, but token is {position.Value}"); + } + ExpMetaRefNode node = new ExpMetaRefNode(position, type) + { + CodeConvertTemplate = type.Name, + }; + ; + return node; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpProcedureCallingNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpProcedureCallingNode.cs new file mode 100644 index 00000000..896f5cb2 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpProcedureCallingNode.cs @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpProcedureCallingNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpProcedureCallingNode : ExpSyntaxNode + { + + private ExpSyntaxNode _params; + + public ExpProcedureCallingNode(Token source, ExpProcedureSource caller, ExpSyntaxNode param) + : base(source) + { + _params = param; + CalledProcedure = caller; + } + + public ExpProcedureSource CalledProcedure { get; init; } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => _params; + + public override IExpElementSource EqualityTypeConvert => ExpInstantiableElement.Void; + + public static ExpProcedureCallingNode CallProcedure( + Token postion, + ExpProcedureSource caller, + ExpSyntaxNode input) + { + ExpProcedureCallingNode node = new ExpProcedureCallingNode(postion, caller, input) + { + /* + * 0. parameters + */ + CodeConvertTemplate = + $$""" + {{caller.Name}}( {0} ) + """ + }; + return node; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpProcedureControlNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpProcedureControlNode.cs new file mode 100644 index 00000000..76148610 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpProcedureControlNode.cs @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpProcedureControlNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp.Syntax; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public class ExpProcedureControlNode : ExpSyntaxNode + { + + private ExpSyntaxNode _additional; + + internal ExpProcedureControlNode(Token source) : base(source) { } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => _additional; + + public override IExpElementSource EqualityTypeConvert => ExpTypeSource.Void; + + public static ExpProcedureControlNode Return(Token t, ExpSyntaxNode valueToReturn) + { + if (t.Value != ExpKeyword.Return) { + throw new InvalidCastException(); + } + ExpProcedureControlNode ret = new ExpProcedureControlNode(t) + { + _additional = valueToReturn ?? Empty, + CodeConvertTemplate = IsNullOrEmpty(valueToReturn!) ? ExpKeyword.Return : "return {0}", + }; + return ret; + } + + public static ExpProcedureControlNode Skip(Token t) + { + ExpProcedureControlNode ret = new ExpProcedureControlNode(t) + { + _additional = Empty, + CodeConvertTemplate = "break" + }; + return ret; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpRangeAndIndexNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpRangeAndIndexNode.cs new file mode 100644 index 00000000..9cec7dba --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpRangeAndIndexNode.cs @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpRangeAndIndexNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpIndexNode : ExpSyntaxNode + { + + private const string _codeTemplate = @"[{0}]"; + + private ExpSyntaxNode _index; + + internal ExpIndexNode(Token t, ExpSyntaxNode node) + : base(t) + { + _index = node; + CodeConvertTemplate = _codeTemplate; + } + + public override ExpSyntaxNode Left => _index; + + public override ExpSyntaxNode Right => Empty; + + public override IExpElementSource EqualityTypeConvert => throw new NotImplementedException(); + + public static ExpIndexNode IndexAt(Token position, ExpSyntaxNode expression) + { + ArgumentNullException.ThrowIfNull(expression); + if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(expression.NodeFlag)) { + throw new ExpInvalidTypeException( + position, "Integer", expression.EqualityTypeConvert.Name); + } + return new ExpIndexNode(position, expression); + } + + } + + public class ExpRangeNode : ExpSyntaxNode + { + + private const string _codeTemplate = "[{0}..{1}]"; + + private ExpSyntaxNode _begin, _end; + + internal ExpRangeNode(Token t, ExpSyntaxNode begin, ExpSyntaxNode end) + : base(t) + { + _begin = begin; + _end = end; + CodeConvertTemplate = _codeTemplate; + } + + public override ExpSyntaxNode Left => _begin; + + public override ExpSyntaxNode Right => _end; + + public override IExpElementSource EqualityTypeConvert => ExpInstantiableElement.Void; + + public static ExpRangeNode RangeNode(Token position, ExpSyntaxNode beginNode, ExpSyntaxNode endNode) + { + ArgumentNullException.ThrowIfNull(beginNode); + ArgumentNullException.ThrowIfNull(endNode); + if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(beginNode.NodeFlag)) { + throw new ExpInvalidTypeException( + position, "Integer", beginNode.EqualityTypeConvert.Name); + } + if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(endNode.NodeFlag)) { + throw new ExpInvalidTypeException( + position, "Integer", endNode.EqualityTypeConvert.Name); + } + return new ExpRangeNode(position, beginNode, endNode); + } + + } + + public class ExpCollectionExpressionNode : ExpSyntaxNode + { + + internal ExpCollectionExpressionNode(Token t, ExpTupleNode tupleNode) : base(t) { } + + public override ExpSyntaxNode Left => throw new NotImplementedException(); + + public override ExpSyntaxNode Right => throw new NotImplementedException(); + + public override IExpElementSource EqualityTypeConvert => throw new NotImplementedException(); + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs new file mode 100644 index 00000000..d47162f6 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs @@ -0,0 +1,198 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpRepeatNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Channels; + +namespace StgSharp.Script.Express +{ + public class ExpRepeatNode : ExpSyntaxNode + { + + private ExpElementInstance _variable; + private ExpSyntaxNode _begin, _end, _increment, _operationBegin,_untilRule,_whileRule; + + internal ExpRepeatNode( + Token source, + ExpElementInstance variable, + ExpSyntaxNode begin, + ExpSyntaxNode end, + ExpSyntaxNode increment, + ExpSyntaxNode operationBegin, + ExpSyntaxNode untilRule, + ExpSyntaxNode whileRule) + : base(source) + { + if (variable.NodeFlag != begin.NodeFlag || + begin.NodeFlag != end.NodeFlag || + (increment != null && end.NodeFlag != increment.NodeFlag)) { + throw new InvalidCastException(); + } + if (IsNullOrEmpty(increment)) + { + switch ((ExpNodeFlag)variable.NodeFlag | ExpNodeFlag.BuiltinType_Any) + { + case ExpNodeFlag.BuiltinType_Real: + increment = new ExpRealNumberNode( + new Token( + ExpressCompile.PoolString("1.0f"), source.Line, -1, + TokenFlag.Number), + 1.0f, isLiteral:true); + break; + case ExpNodeFlag.BuiltinType_Int: + increment = new ExpIntNode( + new Token( + ExpressCompile.PoolString("1"), source.Line, -1, TokenFlag.Number), + 1, isLiteral:true); + break; + default: + throw new ExpInvalidTypeException(variable, "Int or Real", "otherwise"); + } + } + _variable = variable; + _begin = begin; + _end = end; + _increment = increment!; + _operationBegin = operationBegin; + _untilRule = untilRule; + _whileRule = whileRule; + } + + public override ExpSyntaxNode Left => throw new NotImplementedException(); + + public override ExpSyntaxNode Right => _operationBegin; + + public override IExpElementSource EqualityTypeConvert => null!; + + public void AppendRepeatedOperation(ExpSyntaxNode node) + { + _operationBegin.AppendNode(node); + } + + /// + /// Create an AST node for repeat expression in EXPRESS language. The loop does not has + /// WHILE and UNTIL regulation. + /// + /// + /// AllocatorHandle of the loop. + /// + /// + /// The variable recording increment by step. + /// + /// + /// Beginning value of the loop. + /// + /// + /// When reach the value, the loop ends. + /// + /// + /// Expressions to operate multiple times. + /// + /// + /// A representing the repeat expression. + /// + public static ExpRepeatNode Create( + Token t, + ExpInstanceReferenceNode repeatVariable, + ExpSyntaxNode begin, + ExpSyntaxNode end, + ExpSyntaxNode increment, + ExpSyntaxNode whileRule, + ExpSyntaxNode untilRule, + ExpSyntaxNode body) + { + untilRule = ExpBoolNode.False(null); + whileRule = ExpBoolNode.True(null); + ExpRepeatNode ret = new ExpRepeatNode( + t, repeatVariable.OriginObject, begin, end, increment, body, whileRule, untilRule) + { + /* + * 0: variable name + * 1: beginning value + * 2: ending value + * 3: increment + * 4: body + * 5: while + * 6: until + */ + + CodeConvertTemplate = + $$""" + for( {0} = {1}; {0} <= {2}; {0} += {3}) + { + if(!( {5} )) break; + {4} + if( {6} ) break; + } + """ + }; + return ret; + } + + public static ExpRepeatNode Create( + Token t, + ExpElementInstance repeatVariable, + ExpSyntaxNode begin, + ExpSyntaxNode end, + ExpSyntaxNode increment, + ExpSyntaxNode whileRule, + ExpSyntaxNode untilRule, + ExpSyntaxNode body) + { + whileRule = IsNullOrEmpty(whileRule) ? ExpBoolNode.True(t) : whileRule; + untilRule = IsNullOrEmpty(untilRule) ? ExpBoolNode.False(t) : untilRule; + ExpRepeatNode ret = new ExpRepeatNode(t, repeatVariable, begin, end, increment, body, whileRule, untilRule) + { + /* + * 0: variable name + * 1: beginning value + * 2: ending value + * 3: increment + * 4: body + * 5: while + * 6: until + */ + + CodeConvertTemplate = + $$""" + for({{repeatVariable.TypeName}} {0} = {1}; {0} <= {2}; {0} += {3}) + { + if(!( {5} )) break; + {4} + if( {6} ) break; + } + """ + }; + return ret; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpSwitchNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpSwitchNode.cs new file mode 100644 index 00000000..5c912964 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpSwitchNode.cs @@ -0,0 +1,133 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSwitchNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + public class ExpSwitchNode : ExpSyntaxNode + { + + private ExpSyntaxNode _default; + private ExpSyntaxNode _target; + + private FrozenDictionary _cases; + + public ExpSwitchNode( + Token source, + ExpSyntaxNode target, + ExpSyntaxNode defaultCase, + params (ExpSyntaxNode label, ExpSyntaxNode op)[] cases) + : base(source) + { + _target = target; + _default = defaultCase; + Dictionary casesDic = new Dictionary( + ); + foreach ((ExpSyntaxNode label, ExpSyntaxNode op ) item in cases) + { + if (item.op == null) + { + casesDic.Add(item.label, null!); + } else + { + casesDic.Add(item.label, item.op); + } + } + _cases = casesDic.ToFrozenDictionary(); + + + string str = @"switch( {0} ){"; + StringBuilder codeFormatBuilder = new StringBuilder(); + codeFormatBuilder.AppendLine(str); + for (int i = 0; i < casesDic.Count; i++) + { + int index = i * 2 + 1; + codeFormatBuilder.AppendLine( + $$""" + case {{{index}}}: + {{{index + 1}}} + break; + """); + } + CodeConvertTemplate = codeFormatBuilder.ToString(); + } + + public ExpSwitchNode( + Token source, + ExpSyntaxNode target, + ExpSyntaxNode defaultCase, + IDictionary cases) + : base(source) + { + _target = target; + _default = defaultCase; + _cases = cases.ToFrozenDictionary(); + + string str = @"switch( {0} ){"; + StringBuilder codeFormatBuilder = new StringBuilder(); + codeFormatBuilder.AppendLine(str); + for (int i = 0; i < cases.Count; i++) + { + int index = i * 2 + 1; + codeFormatBuilder.AppendLine( + $$""" + case {{{index}}}: + {{{index + 1}}} + break; + """); + } + CodeConvertTemplate = codeFormatBuilder.ToString(); + } + + public ExpSyntaxNode this[ExpSyntaxNode index] + { + get + { + if (_cases.TryGetValue(index, out ExpSyntaxNode? ret)) { + return ret; + } + return _default; + } + } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => Empty; + + public override IExpElementSource EqualityTypeConvert => null!; + + public bool ContainsCase(ExpSyntaxNode token) + { + return _cases.ContainsKey(token); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpTupleNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpTupleNode.cs new file mode 100644 index 00000000..a4bb97f9 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpTupleNode.cs @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpTupleNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpTupleNode : ExpSyntaxNode + { + + private ExpSyntaxNode node; + + private ExpTupleNode(ExpSyntaxNode node) + : base(node._source) + { + this.node = node; + } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => node; + + public override IExpElementSource EqualityTypeConvert => throw new NotImplementedException(); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ExpTupleNode Pack(ExpSyntaxNode node) + { + return new ExpTupleNode(node); + } + + public ExpNodePresidentEnumerator TupleAsEnumerator() + { + return node.ToPresidentEnumerator(); + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/ExpUnaryOperatorNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpUnaryOperatorNode.cs new file mode 100644 index 00000000..80777523 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/ExpUnaryOperatorNode.cs @@ -0,0 +1,99 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpUnaryOperatorNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpUnaryOperatorNode : ExpSyntaxNode + { + + private ExpSyntaxNode _operand; + + private ExpUnaryOperatorNode(Token source) : base(source) { } + + public ExpUnaryOperatorNode(Token source, ExpSyntaxNode operand, ExpSchema context) + : base(source) + { + _operand = operand; + } + + public override ExpSyntaxNode Left => null!; + + public override ExpSyntaxNode Right => _operand; + + public override IExpElementSource EqualityTypeConvert => _operand.EqualityTypeConvert; + + public static ExpUnaryOperatorNode UnaryMinus(Token source, ExpSyntaxNode operand) + { + if (!operand.IsNumber) { + throw new ExpInvalidTypeException( + source, "Number", operand.EqualityTypeConvert.Name); + } + bool isFloat = + (operand._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0; + return new ExpUnaryOperatorNode(source) + { + _nodeFlag = ExpNodeFlag.Operator_Unary | ExpNodeFlag.BuiltinType_Number, + CodeConvertTemplate = "- {0}", + }; + } + + public static ExpUnaryOperatorNode UnaryNot(Token source, ExpSyntaxNode operand) + { + if ((operand._nodeFlag | (ExpNodeFlag.BuiltinType_Logic | ExpNodeFlag.BuiltinType_Logic)) == 0) { + throw new ExpInvalidTypeException( + source, "Bool or Logic", operand.EqualityTypeConvert.Name); + } + return new ExpUnaryOperatorNode(source) + { + _nodeFlag = ExpNodeFlag.Operator_Unary | ExpNodeFlag.BuiltinType_Logic, + CodeConvertTemplate = "! {0}", + }; + } + + public static ExpUnaryOperatorNode UnaryPlus(Token source, ExpSyntaxNode operand) + { + if (!operand.IsNumber) { + throw new ExpInvalidTypeException( + source, "Number", operand.EqualityTypeConvert.Name); + } + bool isFloat = + (operand._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0; + return new ExpUnaryOperatorNode(source) + { + _nodeFlag = ExpNodeFlag.Operator_Unary | ExpNodeFlag.BuiltinType_Number, + CodeConvertTemplate = "+ {0}", + }; + } + + } +} diff --git a/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs b/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs new file mode 100644 index 00000000..65828290 --- /dev/null +++ b/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs @@ -0,0 +1,149 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="_ExpNode" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using CommunityToolkit.HighPerformance.Buffers; + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.Script.Express +{ + public abstract class ExpSyntaxNode : ISyntaxNode + { + + protected internal ExpNodeFlag _nodeFlag; + protected internal Token _source; + + protected ExpSyntaxNode(Token source) + { + _source = source; + Next = this; + Previous = this; + } + + public bool IsNumber + { + get { return (_nodeFlag | ExpNodeFlag.BuiltinType_Number) != 0; } + } + + public abstract ExpSyntaxNode Left { get; } + + public static ExpSyntaxNode Empty + { + get => ExpEmptyNode._only; + } + + public ExpSyntaxNode Next { get; set; } + + public abstract ExpSyntaxNode Right { get; } + + public ExpSyntaxNode Previous { get; set; } + + public abstract IExpElementSource EqualityTypeConvert { get; } + + public int Line => _source.Line; + + public int Column => _source.Column; + + public long NodeFlag => (long)_nodeFlag; + + public string CodeConvertTemplate { get; init; } + + public Token Source + { + get => _source; + } + + public void AppendNode(ExpSyntaxNode nextNode) + { + Next.Previous = nextNode; + nextNode.Next = Next; + Next = nextNode; + Next.Previous = this; + } + + public static bool IsNullOrEmpty([AllowNull]ExpSyntaxNode node) + { + return node == ExpEmptyNode._only || node == null; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ExpSyntaxNode NonOperation(Token source) + { + return new ExpEmptyNode(source.Line, source.Column); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ExpSyntaxNode NonOperation(int line, int column) + { + return new ExpEmptyNode(line, column); + } + + public void PrependNode(ExpSyntaxNode previousNode) + { + Previous.Next = previousNode; + previousNode.Previous = Previous; + Previous = previousNode; + previousNode.Next = this; + } + + public static bool VerifyTypeConvertable(ExpSyntaxNode left, ExpSyntaxNode right) + { + IExpElementSource tLeft = left.EqualityTypeConvert, + tRight = right.EqualityTypeConvert; + if (tLeft is not ExpInstantiableElement tLeftIns || tRight is not ExpInstantiableElement tRightIns) { + return false; + } + if (ExpInstantiableElement.IsNullOrVoid(tLeftIns) || ExpInstantiableElement.IsNullOrVoid(tLeftIns)) { + return false; + } + return tLeft.IsConvertable(tRight); + } + + private class ExpEmptyNode : ExpSyntaxNode + { + + internal static readonly ExpEmptyNode _only = new(); + + public ExpEmptyNode() : base(Token.Empty) { } + + public ExpEmptyNode(int line, int column) : base(new Token(string.Empty, line, column, TokenFlag.None)) { } + + public override ExpInstantiableElement EqualityTypeConvert => ExpInstantiableElement.Void; + + public override ExpSyntaxNode Left => _only; + + public override ExpSyntaxNode Right => _only; + + } + + } +} diff --git a/StgSharp.Script/Express/ExpElementInstance.cs b/StgSharp.Script/Express/ExpElementInstance.cs new file mode 100644 index 00000000..b0492952 --- /dev/null +++ b/StgSharp.Script/Express/ExpElementInstance.cs @@ -0,0 +1,130 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpElementInstance" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; + +namespace StgSharp.Script.Express +{ + [Flags] + public enum ExpElementType : int + { + + Void = 0, + Const = 1, + Entity = 2, + Type = 4, + Function = 8, + Section = 16, + Expression = 32, + Rule = 64, + Procedure = 128, + Collection = 256, + + } + + public abstract class ExpElementInstance : ExpSyntaxNode + { + + protected ExpElementInstance(Token source) + : base(source) + { + CodeConvertTemplate = source.Value; + } + + public bool IsLiteral { get; init; } + + public ExpElementType ElementType { get; } + + public override ExpSyntaxNode Left => Empty; + + public override ExpSyntaxNode Right => Empty; + + public abstract string TypeName { get; } + + public static ExpElementInstance CreateLiteral(Token t) + { + if (int.TryParse(t.Value, out int _int)) + { + return new ExpIntNode(t, _int, true); + } else if (float.TryParse(t.Value, out float _float)) + { + return new ExpRealNumberNode(t, _float, true); + } else if (bool.TryParse(t.Value, out bool _bool)) + { + return new ExpBoolNode(t, _bool, true); + } else if (ExpLogic.TryParse(t.Value, out ExpLogic _logic)) + { + return new ExpLogicValueNode(t, _logic, true); + } else + { + return new ExpStringNode(t, t.Value, true); + } + } + + public ExpInstanceReferenceNode MakeReference(Token t) + { + return new ExpInstanceReferenceNode(t, this); + } + + public static bool TryCreateLiteral(Token t, out ExpElementInstance instance) + { + if (int.TryParse(t.Value, out int _int)) + { + instance = new ExpIntNode(t, _int, true); + return true; + } else if (float.TryParse(t.Value, out float _float)) + { + instance = new ExpRealNumberNode(t, _float, true); + return true; + } else if (bool.TryParse(t.Value, out bool _bool)) + { + instance = new ExpBoolNode(t, _bool, true); + return true; + } else if (ExpLogic.TryParse(t.Value, out ExpLogic _logic)) + { + instance = new ExpLogicValueNode(t, _logic, true); + return true; + } else if (t.Flag == TokenFlag.String) + { + instance = new ExpStringNode(t, t.Value, true); + return true; + } + instance = null!; + return false; + } + + public bool TryGetMember(string name, out ExpSyntaxNode node) + { + return EqualityTypeConvert.TryGetMember(name, out node); + } + + } +} diff --git a/StgSharp.Script/Express/ExpElmentSource.cs b/StgSharp.Script/Express/ExpElmentSource.cs new file mode 100644 index 00000000..94913d8c --- /dev/null +++ b/StgSharp.Script/Express/ExpElmentSource.cs @@ -0,0 +1,153 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpElmentSource" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public interface IExpElementSource : ITypeSource + { + + public ExpElementType ElementType { get; } + + IScriptSourceProvider SourceProvider { get; } + + string Name { get; } + + public void AddMember(string name, ExpSyntaxNode memberNode); + + public void Analyse(); + + public bool TryGetMember(string name, out ExpSyntaxNode memberNode); + + } + + public abstract class ExpInstantiableElement : IExpElementSource + { + + private List _baseList = new List(), + _derivationList = new List(); + + public abstract ExpElementType ElementType { get; } + + public static ExpInstantiableElement Void + { + get => ExpVoidElement.Only; + } + + public abstract IScriptSourceProvider SourceProvider { get; } + + public abstract string Name { get; } + + public void AddMember(string name, ExpSyntaxNode memberNode) + { + throw new NotImplementedException(); + } + + public abstract void Analyse(); + + public abstract ExpSyntaxNode CreateInstanceNode(Token t); + + public bool IsConvertable(IExpElementSource targetType) + { + if (targetType == null) { + return false; + } + throw new NotImplementedException(); + } + + public static bool IsNullOrVoid(ExpInstantiableElement element) + { + return element == null || element == ExpVoidElement.Only; + } + + public abstract bool TryGetMember(string name, out ExpSyntaxNode memberNode); + + private sealed class ExpVoidElement : ExpInstantiableElement + { + + private static readonly ExpVoidElement _only = new ExpVoidElement(); + + public override ExpElementType ElementType => ExpElementType.Void; + + public static ExpVoidElement Only => _only; + + public override IScriptSourceProvider SourceProvider => ScriptSourceTransmitter.Empty; + + public override string Name => "void"; + + public override void Analyse() + { + return; + } + + public override ExpSyntaxNode CreateInstanceNode(Token t) + { + return ExpSyntaxNode.Empty; + } + + public override bool TryGetMember(string name, out ExpSyntaxNode memberNode) + { + memberNode = ExpSyntaxNode.Empty; + return false; + } + + } + + } + + public abstract class ExpImmutableElement : IExpElementSource + { + + public abstract ExpElementType ElementType { get; } + + public abstract IScriptSourceProvider SourceProvider { get; } + + public abstract string Name { get; } + + public void AddMember(string name, ExpSyntaxNode memberNode) + { + throw new NotImplementedException(); + } + + public abstract void Analyse(); + + public bool IsConvertable(IExpElementSource targetType) + { + return false; + } + + public abstract ExpSyntaxNode MakeReference(params object[] options); + + public abstract bool TryGetMember(string name, out ExpSyntaxNode memberNode); + + } +} diff --git a/StgSharp.Script/Express/ExpExceptions.cs b/StgSharp.Script/Express/ExpExceptions.cs new file mode 100644 index 00000000..ff08f6a7 --- /dev/null +++ b/StgSharp.Script/Express/ExpExceptions.cs @@ -0,0 +1,180 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpExceptions" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace StgSharp.Script.Express +{ + public class ExpException : Exception + { + + private Token _pos; + + public ExpException(string message) : base(message) { } + + public ExpException(Token position, string message) + : base($"Express compile error at {position.Line}-{position.Column}:\n{message}") + { + _pos = position; + } + + public ExpException(ExpSyntaxNode node, string message) + : base( + $"Express compile error at {node.Source.Line}-{node.Source.Column}:\n{message}") + { + _pos = node._source; + } + + } + + public class ExpInvalidCharException : ExpException + { + + public ExpInvalidCharException(char c) : base($"An unknown char {c} occurred.") { } + + public ExpInvalidCharException(int index) : base($"Cannot read a token from line at {index}") { } + + } + + public class ExpStringNotCloseException : ExpException + { + + public ExpStringNotCloseException(int linenum) : base($"A string does not closed at end of line {linenum}.") { } + + } + + public class ExpInvalidSyntaxException : ExpException + { + + public ExpInvalidSyntaxException(string message) : base(message) { } + + public static void ThrowNonCollectionIndex(Token t) + { + throw new ExpInvalidSyntaxException( + $"Use a collection indexer to a non-collection variable at line {t.Line} column {t.Column}"); + } + + public static void ThrowNoOperator(Token t) + { + throw new ExpInvalidSyntaxException( + $"No operator but more than one operand before line {t.Line} column {t.Column}"); + } + + } + + public class ExpInvalidElementDeclareEndingExceptions : ExpException + { + + public ExpInvalidElementDeclareEndingExceptions(string declaredName, string endedName) + : base( + $"The datatype is declared with name {declaredName} but ended with {endedName}") { } + + } + + public class ExpInvalidElementNameException : ExpException + { + + public ExpInvalidElementNameException(string elementName, ExpSchema schema) + : base($"Cannot find any element named {elementName} in {schema.Name}") { } + + } + + public class ExpInvalidTypeException : ExpException + { + + public ExpInvalidTypeException(ExpSyntaxNode node, string required, string provided) + : base( + node, + $"Type {required} is required at position, but a {provided} instance is provided.") { } + + public ExpInvalidTypeException(Token t, string required, string provided) + : base( + t, + $"Type {required} is required at position, but a {provided} instance is provided.") { } + + } + + public class ExpCaseNotFoundException : ArgumentOutOfRangeException + { + + public ExpCaseNotFoundException(ExpSwitchNode token, ExpSyntaxNode label) + : base( + $"Attempt to read or write the label at ({token.Line},{token.Column}), that does not exist in SWITCH expression at ({token.Line},{token.Column})") { } + + } + + public class ExpInvalidCollectionMemberTypeException : InvalidCastException + { + + public ExpInvalidCollectionMemberTypeException(ExpElementInstance elementInstance, ExpCollectionBase collection) + : base( + $"Attempt to add or remove an element of type: {elementInstance.ElementType} from a collection collects {collection.MemberType}") { } + + } + + public class ExpInvalidSchemaIncludeException : InvalidOperationException + { + + public ExpInvalidSchemaIncludeException(ExpSchema context, ExpSchema source) + : base( + $"Attempted to refer to an EXPRESS language expression in the current schema context '{context.Name}', but this expression comes from another schema '{source.Name}' that has not been included.") { } + + } + + public class ExpElementLoadException : TypeLoadException + { + + public ExpElementLoadException(string typeName, ExpSchema context) + : base( + $"Cannot find the element {typeName} in schema {context.Name} and its included schemas") { } + + } + + public class ExpCompileNotInitializedException : InvalidOperationException + { + + public ExpCompileNotInitializedException() + : base("Attempt to compile an EXPRESS script before the init of compiler.") { } + + } + + public class ExpCompileException : ExpException + { + + public ExpCompileException(Token pos, string message) + : base( + $"Compiler exception occur when processing token at line {pos.Line}, column {pos.Column}. Detailed message:{Environment.NewLine}{message} ") { } + + } +} diff --git a/StgSharp.Script/Express/ExpNodeFlag.cs b/StgSharp.Script/Express/ExpNodeFlag.cs new file mode 100644 index 00000000..9d85bab4 --- /dev/null +++ b/StgSharp.Script/Express/ExpNodeFlag.cs @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpNodeFlag" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + [EditorBrowsable(EditorBrowsableState.Never)] + public static class ExpNodeFlagHelper + { + + public static bool IsInFlag(this ExpNodeFlag flag, long target) + { + return ((long)flag & target) != 0; + } + + public static bool IsInFlag(this ExpNodeFlag flag, ExpNodeFlag target) + { + return (long)(flag & target) != 0; + } + + public static bool IsNotInFlag(this ExpNodeFlag flag, long target) + { + return ((long)flag & target) == 0; + } + + public static bool IsNotInFlag(this ExpNodeFlag flag, ExpNodeFlag target) + { + return (long)(flag & target) == 0; + } + + } + + [Flags] + public enum ExpNodeFlag : long + { + + // string as name of non-builtin variables + None = 0, + Name_Element = 1, + Name_Param = 2, + Name_Block = 4, + Name_Keyword = 8, + Name_Operator = 16, + Name_Any = Name_Block | Name_Element | Name_Keyword | Name_Param | Name_Operator, + + // any type of collections, also has NAME flag + Collection_Set = 32, + Collection_Bag = 64, + Collection_Array = 128, + Collection_List = 256, + Collection_Any = Collection_Set | Collection_Bag | Collection_Array | Collection_List, + + // the variable is type of element, both builtin and non-builtin has this flag + Element_Const = 512, + Element_Entity = 1024, + Element_Type = 2048, + Element_Rule = 4096, + Element_Function = 8192, + Element_Any = Element_Entity | Element_Const | Element_Function | Element_Rule | Element_Type, + + // variable is one of these builtin type + BuiltinType_Int = 16384, + BuiltinType_Real = 32768, + BuiltinType_String = 65536, + BuiltinType_Boolean = 0x2000, + BuiltinType_Binary = 0x4000, + BuiltinType_Logic = 0x8000, + BuiltinType_Number = BuiltinType_Real | BuiltinType_Int, + BuiltinType_Any = BuiltinType_Int | BuiltinType_Real | BuiltinType_String | BuiltinType_Boolean | BuiltinType_Binary | BuiltinType_Logic, + + // the token is root of a branch + Branch_If = 0x1_000, + Branch_Switch = 0x2_0000, + Branch_Repeat = 0x4_0000, + Branch_Any = Branch_If | Branch_Repeat | Branch_Switch, + + // the token is one of separators + Separator_Inline = 0x8_0000, //, or sth else + Separator_Line = 0x10_0000, //; or eth else + Separator_Block = 0x20_0000, //{}or sth else + Separator_Range = 0x40_0000, //()or sth else + Separator_Any = Separator_Inline | Separator_Line | Separator_Block | Separator_Range, + + // the token is a kind of operator + Operator_Unary = 0x40_0000, + Operator_Binary = 0x80_0000, + Operator_SuperType = 0x100_0000, + Operator_Any = Operator_Unary | Operator_Binary | Operator_SuperType, + + } +} diff --git a/StgSharp.Script/Express/ExpNodeTempEnumerator.cs b/StgSharp.Script/Express/ExpNodeTempEnumerator.cs new file mode 100644 index 00000000..10ffe319 --- /dev/null +++ b/StgSharp.Script/Express/ExpNodeTempEnumerator.cs @@ -0,0 +1,194 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpNodeTempEnumerator" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp.Syntax; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public static class ExpNodeNextEnumeratorExtensions + { + + public static ExpNodeTempEnumerator AsCollectionEnumerator(this ExpSyntaxNode token, bool unpack) + { + ExpNodeTempEnumerator enumerator = new ExpNodeTempEnumerator(token, unpack); + IExpElementSource type = token.EqualityTypeConvert; + while (enumerator.MoveNext()) + { + if (enumerator. Current != type) { + throw new InvalidCastException(); + } + } + return enumerator; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ExpNodePresidentEnumerator ToPresidentEnumerator(this ExpSyntaxNode node) + { + return new ExpNodePresidentEnumerator(node); + } + + public static ExpNodePresidentEnumerator TupleToPresidentEnumerator(this ExpSyntaxNode tuple) + { + return new ExpNodePresidentEnumerator(tuple.Right); + } + + } + + public class ExpNodePresidentEnumerator : IEnumerator + { + + private int _index = -1; + private List _begin = new List(); + + public ExpNodePresidentEnumerator(ExpSyntaxNode token) + { + _begin.Add(token); + ExpSyntaxNode t = token; + while (!ReferenceEquals(t.Next, token) && t.Next != null) + { + t = t.Next; + _begin.Add(t); + } + } + + public ExpSyntaxNode this[int index] + { + get + { + ArgumentOutOfRangeException.ThrowIfNegative(index); + ArgumentOutOfRangeException.ThrowIfGreaterThan(index, _begin.Count); + return _begin[index]; + } + } + + public ExpSyntaxNode Current => _begin[_index]; + + public int Count => _begin.Count; + + public void AssertEnumeratorCount(int count) + { + if (_begin.Count != count) { + throw new InvalidOperationException( + $"Enumerator count mismatch. Expected {count}, but got {_begin.Count}."); + } + } + + public void AssertEnumeratorCount(int min, int max) + { + if (_begin.Count < min || _begin.Count > max) { + throw new InvalidOperationException( + $"Enumerator count mismatch. Expected between {min} and {max}, but got {_begin.Count}."); + } + } + + public Span AsSpan() + { + return CollectionsMarshal.AsSpan(_begin); + } + + public void Dispose() + { + return; + } + + public bool MoveNext() + { + if (_index < _begin.Count - 1) + { + _index++; + return true; + } + return false; + } + + public void Reset() + { + _index = -1; + } + + object IEnumerator.Current => this.Current; + + } + + public class ExpNodeTempEnumerator : IEnumerator + { + + private ExpSyntaxNode? _current,_begin; + + public ExpNodeTempEnumerator(ExpSyntaxNode node) + { + _current = null; + _begin = node; + } + + public ExpNodeTempEnumerator(ExpSyntaxNode node, bool unpack) + { + _current = null; + _begin = unpack ? node.Right : node; + } + + public ExpSyntaxNode Current => _current!; + + public bool MoveNext() + { + if (_current == null) + { + _current = _begin; + return true; + } + ExpSyntaxNode next = _current.Next; + if (ReferenceEquals(next, _begin) || next == null) { + return false; + } + _current = next; + return true; + } + + void IDisposable.Dispose() + { + return; + } + + void IEnumerator.Reset() + { + _current = null; + } + + object IEnumerator.Current => _current; + + } +} diff --git a/StgSharp.Script/Express/ExpPostProcessor.cs b/StgSharp.Script/Express/ExpPostProcessor.cs new file mode 100644 index 00000000..ab1af4a5 --- /dev/null +++ b/StgSharp.Script/Express/ExpPostProcessor.cs @@ -0,0 +1,105 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpPostProcessor" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public class ExpPostProcessor + { + + private readonly string _interfaceName /*= typeof( )/**/; + private readonly string _sourcePath; + + public string Process(string filePath) + { + Dictionary factoryMethods = new Dictionary(); + + FileStream file = File.OpenRead(filePath); + SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(File.ReadAllText(filePath)); + + CSharpCompilation compilation = CSharpCompilation.Create("Analysis") + .AddSyntaxTrees(syntaxTree) + .AddReferences( + MetadataReference.CreateFromFile( + typeof(object).Assembly.Location)); + + INamedTypeSymbol? interfaceSymbol = compilation.GetTypeByMetadataName(_interfaceName); + + if (interfaceSymbol == null) { + throw new InvalidOperationException($"Interface '{_interfaceName}' not found."); + } + + SemanticModel semanticModel = compilation.GetSemanticModel(syntaxTree); + SyntaxNode root = syntaxTree.GetRoot(); + + IEnumerable classDeclarations = root.DescendantNodes() + .OfType( + ) + .Where( + cls => cls.BaseList?.Types.Any( + t => SymbolEqualityComparer.Default + .Equals( + semanticModel.GetTypeInfo( + t.Type) + .Type, + interfaceSymbol)) ?? + false); + + foreach (ClassDeclarationSyntax classDeclaration in classDeclarations) + { + string className = classDeclaration.Identifier.Text; + IMethodSymbol? factoryMethod = interfaceSymbol.GetMembers() + .OfType() + .FirstOrDefault( + m => m.IsStatic && m.Name == "CreateInstance"); + + if (factoryMethod != null) { + factoryMethods[className] = $"() => {interfaceSymbol.Name}.CreateInstance()"; + } + } + + string code = "var factoryMethods = new Dictionary>\n{\n"; + code += string.Join( + ",\n", factoryMethods.Select(kvp => $" {{ \"{kvp.Key}\", {kvp.Value} }}")); + code += "\n};"; + + return code; + } + + } +} diff --git a/StgSharp.Script/Express/ExpSchemaBase.cs b/StgSharp.Script/Express/ExpSchemaBase.cs new file mode 100644 index 00000000..ffcb062a --- /dev/null +++ b/StgSharp.Script/Express/ExpSchemaBase.cs @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSchemaBase" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Collections; + +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Linq; + +namespace StgSharp.Script.Express +{ + public abstract class ExpSchema + { + + public static ExpSchema BuiltinSchema + { + get => ExpSchema_Builtin.Only; + } + + public string Name { get; internal set; } + + public abstract void LoadFromSource(ExpSchemaSource source); + + public abstract bool TryGetConst(string name, out ExpElementInstance c); + + public abstract bool TryGetEntity(string name, out ExpEntitySource e); + + public abstract bool TryGetFunction(string name, out ExpFunctionSource f); + + public abstract bool TryGetProcedure(string name, out ExpProcedureSource p); + + public abstract bool TryGetRule(string name, out ExpRuleSource r); + + public abstract bool TryGetSchemaInclude(string name, out ExpSchema include); + + public abstract bool TryGetType(string name, out ExpTypeSource t); + + #pragma warning disable CS8618 + protected FrozenDictionary ConstDict { get; set; } + + public IEnumerable IncludedSchema => IncludedSchema; + + protected FrozenDictionary EntityDict { get; set; } + + protected FrozenDictionary FunctionDict { get; set; } + + protected ConcurrentStringHashMultiplexer StringMultiplexer => ExpressCompile.Multiplexer; + + protected ConcurrentDictionary ProcedureDict { get; set; } + + protected FrozenDictionary RuleDict { get; set; } + + protected FrozenDictionary SchemaInclude { get; set; } + + protected FrozenDictionary TypeDict { get; set; } +#pragma warning restore CS8618 + } +} diff --git a/StgSharp.Script/Express/ExpSchemaSource.Compile.cs b/StgSharp.Script/Express/ExpSchemaSource.Compile.cs new file mode 100644 index 00000000..96195e09 --- /dev/null +++ b/StgSharp.Script/Express/ExpSchemaSource.Compile.cs @@ -0,0 +1,69 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSchemaSource.Compile" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public enum ExpressCompileOption + { + + Default = 0, + Translate = 1, + Compile = 2, + + } + + public partial class ExpSchemaSource + { + + public ExpSchema Compile(ExpressCompileOption option) + { + switch (option) + { + case ExpressCompileOption.Default: + return Compile_Translate(option); + case ExpressCompileOption.Translate: + return Compile_Translate(option); + case ExpressCompileOption.Compile: + throw new NotSupportedException(); + default: + throw new ArgumentException(); + } + } + + internal GeneratedExpSchema Compile_Translate(ExpressCompileOption option) + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Script/Express/ExpSchemaSource.cs b/StgSharp.Script/Express/ExpSchemaSource.cs new file mode 100644 index 00000000..3a9e5b66 --- /dev/null +++ b/StgSharp.Script/Express/ExpSchemaSource.cs @@ -0,0 +1,329 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSchemaSource" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Collections; +using StgSharp.Graphics.OpenGL; + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.Tracing; +using System.Text; +using System.Text.RegularExpressions; + +namespace StgSharp.Script.Express +{ + public partial class ExpSchemaSource + { + + private static Regex + _constDefineBegin = GetConstDefineBegin(), + _constDefineEnd = GetConstDefineEnd(), + _schemaBegin = GetSchemaBegin(), + _schemaEnd = GetSchemaEnd(), + _entityDefineBegin = GetEntityDefineBegin(), + _entityDefineEnd = GetEntityDefineEnd(), + _typeDefineBegin = GetTypeDefineBegin(), + _typeDefineEnd = GetTypeDefineEnd(), + _functionDefineBegin = GetFunctionDefineBegin(), + _functionDefineEnd = GetFunctionDefineEnd(), + _ruleDefineBegin = GetRuleDefineBegin(), + _ruleDefineEnd = GetRuleDefineEnd(); + + private readonly GeneratedExpSchema _compileResult = new GeneratedExpSchema(); + + private List _sourceCache = []; + + private string name; + + public ExpSchemaSource() { } + + public List Cache + { + get => _sourceCache; + } + + public string Name + { + get => _compileResult.Name; + internal set => _compileResult.Name = value; + } + + public ExpSchema Organize() + { + _compileResult.LoadFromSource(this); + return _compileResult; + } + + public void ReadSchema(ExpFileSource reader) + { + string line = reader.ReadLine(); + while (!_schemaBegin.IsMatch(line)) { + line = reader.ReadLine(); + } + name = _schemaBegin.Match(line).Groups["namespace"].Value; + + while (!_schemaEnd.IsMatch(line)) + { + if (TryReadConst(line, reader, out IExpElementSource source)) + { + _sourceCache.Add(source); + } else if (TryReadType(line, reader, out source)) + { + _sourceCache.Add(source); + } else if (TryReadEntity(line, reader, out source)) + { + _sourceCache.Add(source); + } else if (TryReadRule(line, reader, out source)) + { + _sourceCache.Add(source); + } else if (TryReadFunction(line, reader, out source)) { + _sourceCache.Add(source); + } + line = reader.ReadLine(); + } + } + + public static bool TryReadSchema(string firstLine, ExpFileSource reader, out ExpSchemaSource source) + { + if (!_schemaBegin.IsMatch(firstLine)) + { + source = null!; + return false; + } + ExpSchemaSource _source = new ExpSchemaSource(); + _source.name = _schemaBegin.Match(firstLine).Groups["namespace"].Value; + + while (!_schemaEnd.IsMatch(firstLine)) + { + if (_source.TryReadConst(firstLine, reader, + out IExpElementSource _elementSource)) + { + _source._sourceCache.Add(_elementSource); + } else if (_source.TryReadType(firstLine, reader, out _elementSource)) + { + _source._sourceCache.Add(_elementSource); + } else if (_source.TryReadEntity(firstLine, reader, out _elementSource)) + { + _source._sourceCache.Add(_elementSource); + } else if (_source.TryReadRule(firstLine, reader, out _elementSource)) + { + _source._sourceCache.Add(_elementSource); + } else if (_source.TryReadFunction(firstLine, reader, out _elementSource)) { + _source._sourceCache.Add(_elementSource); + } + firstLine = reader.ReadLine(); + } + source = _source; + return true; + } + + [GeneratedRegex(@"\s*CONSTANT")] + private static partial Regex GetConstDefineBegin(); + + [GeneratedRegex(@"\s*END_CONSTANT;")] + private static partial Regex GetConstDefineEnd(); + + [GeneratedRegex(@"\s*ENTITY\s*(?[A-Za-z0-9_]+)\s*", RegexOptions.Compiled)] + private static partial Regex GetEntityDefineBegin(); + + [GeneratedRegex(@"\s*END_ENTITY;\s*--\s*(?[A-Za-z0-9_]+)\s*", RegexOptions.Compiled)] + private static partial Regex GetEntityDefineEnd(); + + [GeneratedRegex(@"\s*FUNCTION\s*\s*(?[a-zA-Z0-9_]+)\s*(?.*)", RegexOptions.Compiled)] + private static partial Regex GetFunctionDefineBegin(); + + [GeneratedRegex(@"\s*END_FUNCTION\s*;\s*--\s*(?[a-zA-Z0-9_]+)", RegexOptions.Compiled)] + private static partial Regex GetFunctionDefineEnd(); + + [GeneratedRegex( + @"\s*RULE\s*(?[a-zA-Z0-9_]+)\s*FOR\s*\((?[a-zA-Z0-9_]*(?:\s*\)\s*;)?)", + RegexOptions.Compiled)] + private static partial Regex GetRuleDefineBegin(); + + [GeneratedRegex(@"\s*END_RULE\s*;\s*--\s*(?[A-Za-z0-9_]+)", RegexOptions.Compiled)] + private static partial Regex GetRuleDefineEnd(); + + [GeneratedRegex(@"\s*SCHEMA\s*(?[A-Za-z0-9_]+)\s?;")] + private static partial Regex GetSchemaBegin(); + + [GeneratedRegex(@"END_SCHEMA;\s*--\s*(?[A-Za-z0-9_]+)", RegexOptions.Compiled)] + private static partial Regex GetSchemaEnd(); + + [GeneratedRegex(@"\s*TYPE\s+(?[A-Za-z0-9_]+)\s*=\s*(?[A-Z]+)", RegexOptions.Compiled)] + private static partial Regex GetTypeDefineBegin(); + + [GeneratedRegex(@"\s*END_TYPE\s*;\s*--\s*(?[a-zA-Z0-9_]+)", RegexOptions.Compiled)] + private static partial Regex GetTypeDefineEnd(); + + private bool TryReadConst(string firstLine, ExpFileSource reader, out IExpElementSource source) + { + Match match = _constDefineBegin.Match(firstLine); + if (match.Success) + { + ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter( + "END_CONSTANT", reader.Location); + ExpConstantCollectionSource _source = new ExpConstantCollectionSource(transmitter); + string line = reader.ReadLine(); + while (!_constDefineEnd.IsMatch(line)) + { + transmitter.WriteLine(line); + line = reader.ReadLine(); + } + transmitter.WriteLine("END_CONSTANT"); + source = _source; + return true; + } + source = null!; + return false; + } + + private bool TryReadEntity(string firstLine, ExpFileSource reader, out IExpElementSource source) + { + Match match = _entityDefineBegin.Match(firstLine); + if (match.Success) + { + ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter( + "END_ENTITY", reader.Location); + ExpEntitySource _source = new ExpEntitySource( + match.Groups["TypeName"].ToString(), transmitter); + string line = reader.ReadLine(); + match = _entityDefineEnd.Match(line); + while (!match.Success) + { + transmitter.WriteLine(line); + line = reader.ReadLine(); + match = _entityDefineEnd.Match(line); + } + string endedName = match.Groups["TypeName"].ToString(); + if (!string.Equals(endedName, _source.Name)) { + throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName); + } + transmitter.WriteLine("END_ENTITY"); + source = _source; + return true; + } + source = null!; + return false; + } + + private bool TryReadFunction(string firstLine, ExpFileSource reader, out IExpElementSource source) + { + Match match = _functionDefineBegin.Match(firstLine); + if (match.Success) + { + ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter( + "END_FUNCTION", reader.Location); + ExpFunctionSource _source = new ExpFunctionSource( + match.Groups["FunctionName"].ToString(), transmitter); + transmitter.WriteLine(match.Groups["Remaining"].ToString()); + string line = reader.ReadLine(); + match = _functionDefineEnd.Match(line); + while (!match.Success) + { + transmitter.WriteLine(line); + line = reader.ReadLine(); + match = _functionDefineEnd.Match(line); + } + string endedName = match.Groups["FunctionName"].ToString(); + if (!string.Equals(endedName, _source.Name)) { + throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName); + } + transmitter.WriteLine("END_FUNCTION"); + source = _source; + return true; + } + source = null!; + return false; + } + + private bool TryReadRule(string firstLine, ExpFileSource reader, out IExpElementSource source) + { + Match match = _ruleDefineBegin.Match(firstLine); + if (match.Success) + { + ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter( + "END_RULE", reader.Location); + ExpRuleSource _source = new ExpRuleSource( + match.Groups["RuleName"].ToString(), transmitter); + string target = match.Groups["Target"].ToString(); + if (!string.IsNullOrEmpty(target)) { + transmitter.WriteLine(target); + } + string line = reader.ReadLine(); + match = _ruleDefineEnd.Match(line); + while (!match.Success) + { + transmitter.WriteLine(line); + line = reader.ReadLine(); + match = _ruleDefineEnd.Match(line); + } + string endedName = match.Groups["RuleName"].ToString(); + if (!string.Equals(endedName, _source.Name)) { + throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName); + } + transmitter.WriteLine("END_RULE"); + source = _source; + return true; + } + source = null!; + return false; + } + + private bool TryReadType(string firstLine, ExpFileSource reader, out IExpElementSource source) + { + Match match = _typeDefineBegin.Match(firstLine); + if (match.Success) + { + ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter( + "END_ENTITY", reader.Location); + ExpTypeSource _source = new ExpTypeSource( + match.Groups["TypeName"].ToString(), transmitter); + transmitter.WriteLine(match.Groups["Remaining"].ToString()); + string line = reader.ReadLine(); + match = _typeDefineEnd.Match(line); + while (!match.Success) + { + transmitter.WriteLine(line); + line = reader.ReadLine(); + match = _typeDefineEnd.Match(line); + } + string endedName = match.Groups["TypeName"].ToString(); + if (!string.Equals(endedName, _source.Name)) { + throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName); + } + transmitter.WriteLine("END_ENTITY"); + source = _source; + return true; + } + source = null!; + return false; + } + + } +} diff --git a/StgSharp.Script/Express/ExpSource.cs b/StgSharp.Script/Express/ExpSource.cs new file mode 100644 index 00000000..313a8296 --- /dev/null +++ b/StgSharp.Script/Express/ExpSource.cs @@ -0,0 +1,122 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSource" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Text; +using System.Threading; + +namespace StgSharp.Script.Express +{ + public class ExpFileSource : IDisposable, IScriptSourceProvider + { + + private bool disposedValue; + private FileStream _expFileStream; + private int _location; + private MemoryMappedFile _expMemoryMappedFile; + private MemoryMappedViewStream _expMemoryMappedStream; + + private SemaphoreSlim readLineSemaphore = new SemaphoreSlim(1, 1); + private StreamReader _memoryReader; + + public ExpFileSource(string path) + { + if (!File.Exists(path)) { + throw new FileNotFoundException(); + } + _expFileStream = new FileStream(path, FileMode.Open, FileAccess.Read); + _expMemoryMappedFile = MemoryMappedFile.CreateFromFile( + _expFileStream, null, 0, MemoryMappedFileAccess.Read, HandleInheritability.None, true); + _expMemoryMappedStream = _expMemoryMappedFile.CreateViewStream( + offset:0, size:0, access:MemoryMappedFileAccess.Read); + _memoryReader = new StreamReader(_expMemoryMappedStream); + } + + public bool IsEmpty => _memoryReader.EndOfStream; + + public int Location => _location; + + // ~ExpFileSource() + // { + // Dispose(disposing: false); + // } + + public void Dispose() + { + Dispose(disposing:true); + GC.SuppressFinalize(this); + } + + public void EndWriting() { } + + public string ReadLine() + { + readLineSemaphore.Wait(); + string line = _memoryReader.ReadLine()!; + _location++; + readLineSemaphore.Release(); + return line; + } + + public string ReadLine(out int position) + { + throw new NotImplementedException(); + } + + public void ResetToBegin() + { + readLineSemaphore.Wait(); + _expMemoryMappedStream.Seek(0, SeekOrigin.Begin); + _location = 0; + readLineSemaphore.Release(); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + _expFileStream.Dispose(); + _expMemoryMappedFile.Dispose(); + _expMemoryMappedStream.Dispose(); + _memoryReader.Dispose(); + } + disposedValue = true; + } + } + + IScriptSourceProvider IScriptSourceProvider.Slice(int location, int count) + { + throw new NotSupportedException(); + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.CaseOf.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.CaseOf.cs new file mode 100644 index 00000000..e26d9c78 --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.CaseOf.cs @@ -0,0 +1,128 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.CaseOf" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + private bool AppendToken_CaseOf(Token t) + { + Token op; + ExpSyntaxNode root; + switch (t.Value) + { + case ExpKeyword.Case: + CaseOfStateCache state = new CaseOfStateCache(t); + _cache.CurrentDepthMark.StateCache = state; + state.CurrentState = t.Value; + return true; + case ExpKeyword.Of: + state = _cache.StateOfCurrentDepth(); + while (_cache.TryPopOperator(out op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out root); + state.CaseExpression = root; + state.CurrentState = t.Value; + return true; + case ":": + state = _cache.StateOfCurrentDepth(); + if (state.CurrentState != ExpKeyword.Of && state.CurrentState != ExpKeyword.Otherwise) + { + root = _cache.PackAllStatements(); + state.CloseCurrentCase(root); + } + while (_cache.TryPopOperator(out op)) { + ConvertAndPushOneOperator(op); + } + if (!_cache.PopOperand(out _, out root)) + { + // sth wrong, case expression cannot generate; + } + state.CurrentCase = root; + return true; + case ExpKeyword.Otherwise: + state = _cache.StateOfCurrentDepth(); + root = _cache.PackAllStatements(); + state.CloseCurrentCase(root); + state.CurrentState = t.Value; + return true; + case ExpKeyword.EndCase: + state = _cache.StateOfCurrentDepth(); + root = _cache.PackAllStatements(); + state.CloseCurrentCase(root); + root = new ExpSwitchNode( + state.Begin, state.CaseExpression, state.DefaultCase, state.Cases); + _cache.DecreaseDepth(); + _cache.StatementsInDepth.Push(root); + return true; + default: + AppendToken_Common(t); + return true; + } + } + + private class CaseOfStateCache : ICompileDepthState + { + + public CaseOfStateCache(Token t) + { + Begin = t; + } + + public Dictionary Cases { get; } = new Dictionary( + ); + + public ExpSyntaxNode CaseExpression { get; set; } + + public ExpSyntaxNode DefaultCase { get; set; } + + public ExpSyntaxNode CurrentCase { get; set; } + + public string CurrentState { get; set; } + + public Token Begin { get; init; } + + public void CloseCurrentCase(ExpSyntaxNode root) + { + Cases.Add(CurrentCase, root); + } + + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.Common.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.Common.cs new file mode 100644 index 00000000..34590a56 --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.Common.cs @@ -0,0 +1,290 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.Common" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp.Syntax; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Schema; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + private bool IsSeparatorMatch(Token leftSperator, Token rightSeparator) + { + return leftSperator.Value switch + { + ExpKeyword.LeftBrace => rightSeparator.Value == ExpKeyword.RightBrace, + ExpKeyword.LeftParen => rightSeparator.Value == ExpKeyword.RightParen, + ExpKeyword.Comma => rightSeparator.Value == ExpKeyword.Comma, + ExpKeyword.Semicolon => rightSeparator.Value == ExpKeyword.Semicolon, + _ => false + }; + } + + private bool TryAppendIndexLeft(Token t) + { + if (t.Flag != TokenFlag.Index_Left) { + return false; + } + if (_cache.TryPeekOperand(out bool isNode, out _, out ExpSyntaxNode? node)) + { + if (node.EqualityTypeConvert is not ExpCollectionBase) { + ExpInvalidSyntaxException.ThrowNonCollectionIndex(t); + } + } + _cache.PushOperator(t); + _cache.IncreaseDepth((int)ExpCompileStateCode.CollectionIndex); + return true; + } + + private bool TryAppendIndexRight(Token t) + { + if (t.Flag != TokenFlag.Index_Right) { + return false; + } + + // reverse building + ClosePrefixReverse(t); + + // make index node + _cache.PopOperand(out _, out ExpSyntaxNode? expNode); + if (!_cache.PopOperand(out Token colleToken, out ExpSyntaxNode? colleNode)) { } + _cache.PushOperand( + ExpCollectionIndexNode.Create( + t, (colleNode as ExpCollectionInstanceBase)!, expNode)); + return true; + } + + private bool TryAppendMember(Token t) + { + if (t.Flag != TokenFlag.Member) { + return false; + } + if (TryParseConstant(t)) { + return true; + } + if (TryParseFunction(t)) { + return true; + } + if (TryParseInstance(t)) { + return true; + } + if (TryParseKeyword(t)) { + return true; + } + if (TryParseElementName(t)) { + return true; + } + + // Many thing miss here + _cache.PushOperand(ExpElementMemberNameNode.Create(t)); + + return true; + } + + private bool TryAppendMiddleSeparator(Token t) + { + if (t.Flag != TokenFlag.Separator_Middle) { + return false; + } + while (_cache.OperatorAheadOfDepth > 0) + { + _cache.TryPopOperator(out Token op); + ExpSyntaxNode node = ConvertAndPushOneOperator(op); + } + switch (_cache.OperandAheadOfDepth) + { + case 0: + if (t.Value == ";") { + return true; + } + _cache.StatementsInDepth.Push(ExpSyntaxNode.Empty); + goto case 1; + case 1: + _cache.PopOperand(out _, out ExpSyntaxNode? statement); + _cache.StatementsInDepth.Push(statement); + return true; + default: + ExpInvalidSyntaxException.ThrowNoOperator(t); + break; + } + return true; + } + + private bool TryAppendNumAndStrLiteral(Token t) + { + if ((t.Flag & (TokenFlag.String | TokenFlag.Number)) == 0) { + return false; + } + _cache.PushOperand(ExpElementInstance.CreateLiteral(t)); + return true; + } + + private bool TryAppendPrefixSeparator(Token t) + { + if (t.Flag != TokenFlag.Separator_Left) { + return false; + } + _cache.PushOperator(t); + _cache.IncreaseDepth((int)ExpCompileStateCode.Common); + return true; + } + + private bool TryAppendPrefixSeparatorEnd(Token t) + { + if (t.Flag != TokenFlag.Separator_Right) { + return false; + } + ClosePrefixReverse(t); + return true; + } + + private bool TryAppendSymbol(Token t) + { + if ((t.Flag & (TokenFlag.Symbol_Unary | TokenFlag.Symbol_Binary)) == 0) { + return false; + } + + int cmp = -1; + processPrecedence: + if (_cache.TryPeekOperator(out Token tmp)) + { + cmp = CompareOperatorPrecedence(t, tmp); + if (cmp >= 0) + { + _cache.PopOperator(); + ExpSyntaxNode node = ConvertAndPushOneOperator(tmp); + goto processPrecedence; + } + } + _cache.PushOperator(t); + return true; + } + + private bool TryParseConstant(Token t) + { + switch (t.Value) + { + case ExpKeyword.E: + _cache.PushOperand(new ExpRealNumberNode(t, MathF.E, true)); + return true; + case ExpKeyword.Pi: + _cache.PushOperand(new ExpRealNumberNode(t, MathF.PI, true)); + return true; + default: + if (ExpElementInstance.TryCreateLiteral(t, out ExpElementInstance? node)) + { + _cache.PushOperand(node); + return true; + } + return false; + } + } + + private bool TryParseElementName(Token t) + { + if (_context.TryGetType(t.Value, out ExpTypeSource? type)) + { + _cache.PushOperand(ExpMetaRefNode.RefType(t, type)); + return true; + } + if (_context.TryGetEntity(t.Value, out ExpEntitySource? entity)) + { + _cache.PushOperand(ExpMetaRefNode.RefEntity(t, entity)); + return true; + } + return false; + } + + private bool TryParseFunction(Token t) + { + if (ExpKeyword.BuiltinFunctions.Contains(t.Value)) + { + _cache.PushOperator(t); + return true; + } else if (_context.TryGetFunction(t.Value, out ExpFunctionSource? f)) + { + _cache.PushOperand(t); + return true; + } + return false; + } + + private bool TryParseInstance(Token t) + { + if (_local.TryGetMember(t.Value, + out ExpSyntaxNode? node) && + node is ExpElementInstance instance) + { + _cache.PushOperand(ExpInstanceReferenceNode.MakeReferenceFrom(t, instance)); + return true; + } else if (_tempVariableInLoops.TryGetValue(t.Value, out instance!)) + { + _cache.PushOperand(ExpInstanceReferenceNode.MakeReferenceFrom(t, instance)); + return true; + } else if (_cache.IsLastAddedOperator) + { + if (_cache.PeekOperand(out _, + out ExpSyntaxNode? typenode) && + typenode is ExpMetaRefNode typeRef) + { + _cache.PopOperand(out _, out _); + _local.AddMember(t.Value, typeRef.SourceRef.CreateInstanceNode(t)); + } else + { + return false; + } + } + return false; + } + + private bool TryParseKeyword(Token t) + { + switch (t.Value) + { + case ExpKeyword.Return: + _cache.PushOperator(t); + return true; + case ExpKeyword.Skip: + _cache.PushOperand(ExpProcedureControlNode.Skip(t)); + return true; + default: + return false; + } + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.DepthEnter.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.DepthEnter.cs new file mode 100644 index 00000000..88e06bae --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.DepthEnter.cs @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.DepthEnter" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.Diagnostics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + internal void AttemptEnterNewDepth(Token t) + { + switch (t.Value) + { + case ExpKeyword.If: + _cache.IncreaseDepth((int)ExpCompileStateCode.IfBranch); + return; + case ExpKeyword.Case: + _cache.IncreaseDepth((int)ExpCompileStateCode.CaseBranch); + return; + case ExpKeyword.Repeat: + _cache.IncreaseDepth((int)ExpCompileStateCode.RepeatLoop); + return; + case ExpKeyword.While: + _cache.IncreaseDepth((int)ExpCompileStateCode.UntilLoop); + return; + + default: + break; + } + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.ErrorProcess.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.ErrorProcess.cs new file mode 100644 index 00000000..46872bf3 --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.ErrorProcess.cs @@ -0,0 +1,53 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.ErrorProcess" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + public void ThrowCompileException(int errorCode) + { + switch (errorCode) + { + case 0 or 1: + return; + case TokenTypeNotMatch: + throw new Exception(); + default: + break; + } + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.If.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.If.cs new file mode 100644 index 00000000..3e94db85 --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.If.cs @@ -0,0 +1,128 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.If" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + private bool AppendToken_IfBranch(Token t) + { + switch (t.Value) + { + case ExpKeyword.If: + IfBranchStateCache state = new IfBranchStateCache(); + _cache.CurrentDepthMark.StateCache = state; + state.CurrentState = t.Value; + return true; + case ExpKeyword.Then: + state = _cache.StateOfCurrentDepth(); + if (state.CurrentState == ExpKeyword.If) + { + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out ExpSyntaxNode? node); + state.CurrentState = t.Value; + state.BoolExpression = node; + } else + { + throw new ExpCompileException( + t, $"Keyword {t.Value} should be after keyword {ExpKeyword.Then}"); + } + return true; + case ExpKeyword.Else: + state = _cache.StateOfCurrentDepth(); + if (state.CurrentState == ExpKeyword.Then) + { + ExpSyntaxNode node = _cache.PackAllStatements(); + state.CurrentState = t.Value; + state.ExpressionIfTrue = node; + } else + { + throw new ExpCompileException( + t, $"Keyword {t.Value} should be after keyword {ExpKeyword.Then}"); + } + return true; + + case ExpKeyword.EndIf: + state = _cache.StateOfCurrentDepth(); + if (state.CurrentState == ExpKeyword.Then) + { + ExpSyntaxNode trueNode = _cache.PackAllStatements(); + state.CurrentState = t.Value; + state.ExpressionIfTrue = trueNode; + state.ExpressionIfFalse = ExpSyntaxNode.Empty; + } else if (state.CurrentState == ExpKeyword.Else) + { + ExpSyntaxNode falseNode = _cache.PackAllStatements(); + state.CurrentState = t.Value; + state.ExpressionIfFalse = falseNode; + } else + { + throw new ExpCompileException( + t, + $"Keyword {t.Value} should be after keyword {ExpKeyword.Then} or {ExpKeyword.Else}"); + } + ExpIfNode ifNode = new ExpIfNode( + state.Begin, state.BoolExpression, state.ExpressionIfTrue, + state.ExpressionIfFalse); + _cache.DecreaseDepth(); + _cache.StatementsInDepth.Push(ifNode); + return true; + default: + AppendToken_Common(t); + return true; + } + } + + private class IfBranchStateCache : ICompileDepthState + { + + public ExpSyntaxNode BoolExpression { get; set; } + + public ExpSyntaxNode ExpressionIfTrue { get; set; } + + public ExpSyntaxNode ExpressionIfFalse { get; set; } + + public string CurrentState { get; set; } + + public Token Begin { get; set; } + + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.OperatorParser.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.OperatorParser.cs new file mode 100644 index 00000000..8e31530f --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.OperatorParser.cs @@ -0,0 +1,178 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.OperatorParser" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + public int CompareOperatorPrecedence(Token left, Token right) + { + ExpressCompile.TryGetOperatorPrecedence(left.Value, out int leftPrecedence); + ExpressCompile.TryGetOperatorPrecedence(right.Value, out int rightPrecedence); + return leftPrecedence - rightPrecedence; + } + + public bool TryGenerateUnaryNode(Token t, out ExpSyntaxNode node) + { + ExpSyntaxNode operand = GetNextOperandCache(); + switch (t.Value) + { + case ExpKeyword.UnaryPlus: + node = ExpUnaryOperatorNode.UnaryPlus(t, operand); + return true; + case ExpKeyword.UnaryMinus: + node = ExpUnaryOperatorNode.UnaryMinus(t, operand); + return true; + case ExpKeyword.Not: + node = ExpUnaryOperatorNode.UnaryNot(t, operand); + return true; + default: + node = ExpSyntaxNode.Empty; + return false; + } + } + + /// + /// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING + /// SYMBOLS. + /// + private ExpSyntaxNode ConvertAndPushOneOperator(Token op) + { + switch (op.Flag) + { + case TokenFlag.Symbol_Unary: + TryGenerateUnaryNode(op, out ExpSyntaxNode? node); + _cache.PushOperand(node); + return node; + case TokenFlag.Symbol_Binary: + TryGenerateBinaryNode(op, out node); + _cache.PushOperand(node); + return node; + case TokenFlag.Member: + if (_context.TryGetFunction(op.Value, out ExpFunctionSource? f)) + { + if (!_cache.PopOperand(out Token t, out ExpSyntaxNode? p)) + { + node = ExpFunctionCallingNode.CallFunction(op, f, p); + return node; + } else + { + throw new ExpCompileException( + t, + "An ExpNode for function calling is needed, but a token was popped"); + } + } else if (_context.TryGetProcedure(op.Value, out ExpProcedureSource? p)) + { + if (!_cache.PopOperand(out Token t, out ExpSyntaxNode? param)) + { + node = ExpProcedureCallingNode.CallProcedure(op, p, param); + return node; + } else + { + throw new ExpCompileException( + t, + "An ExpNode for function calling is needed, but a token was popped"); + } + } else if (ExpSchema.BuiltinSchema.TryGetFunction(op.Value, out f)) + { + if (!_cache.PopOperand(out Token t, out ExpSyntaxNode? param)) + { + node = ExpFunctionCallingNode.CallFunction(op, f, param); + return node; + } else + { + throw new ExpCompileException( + t, + "An ExpNode for function calling is needed, but a token was popped"); + } + } else + { + throw new NotImplementedException(); + + // uncertain case here + } + default: + throw new NotImplementedException(); + } + } + + private bool TryGenerateBinaryNode(Token t, out ExpSyntaxNode node) + { + ExpSyntaxNode right = GetNextOperandCache(); + ExpSyntaxNode left = GetNextOperandCache(); + switch (t.Value) + { + case ExpKeyword.Add: + node = ExpBinaryOperatorNode.Add(t, left, right); + return true; + case ExpKeyword.Sub: + node = ExpBinaryOperatorNode.Sub(t, left, right); + return true; + case ExpKeyword.Mul: + node = ExpBinaryOperatorNode.Mul(t, left, right); + return true; + case ExpKeyword.Div: + node = ExpBinaryOperatorNode.Div(t, left, right); + return true; + case ExpKeyword.Equal: + node = ExpBinaryOperatorNode.EqualTo(t, left, right); + return true; + case ExpKeyword.NotEqual: + node = ExpBinaryOperatorNode.NotEqualTo(t, left, right); + return true; + case ExpKeyword.GreaterThan: + node = ExpBinaryOperatorNode.GreaterThan(t, left, right); + return true; + case ExpKeyword.LessThan: + node = ExpBinaryOperatorNode.LessThan(t, left, right); + return true; + case ExpKeyword.Assignment: + node = ExpBinaryOperatorNode.Assign(t, left, right); + return true; + case ExpKeyword.InstanceEqual: + node = ExpBinaryOperatorNode.CompareInstanceEqual(t, left, right); + return true; + case ExpKeyword.InstanceNotEqual: + node = ExpBinaryOperatorNode.CompareInstanceNotEqual(t, left, right); + return true; + default: + node = ExpSyntaxNode.Empty; + return false; + } + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.RangeAndIndex.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.RangeAndIndex.cs new file mode 100644 index 00000000..4342594d --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.RangeAndIndex.cs @@ -0,0 +1,120 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.RangeAndIndex" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.Operations; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + private void AppendToken_RangeAndIndex(Token t) + { + ExpSyntaxNode root; + switch (t.Value) + { + case "[": + RangeAndIndexState state = new RangeAndIndexState(); + state.CurrentState = t.Value; + _cache.CurrentDepthMark.StateCache = state; + break; + case "]": + state = _cache.StateOfCurrentDepth(); + + // Generate range or index object + if (_cache.StatementsInDepth.Count != 0) + { + throw new ExpInvalidSyntaxException( + "Range and index syntax error: expected one statement to define range beginning."); + } + ReverseAnalyzeStatement(); + root = _cache.StatementsInDepth.Pop(); + if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(root.NodeFlag)) { + throw new ExpInvalidTypeException( + root, "integer", root.EqualityTypeConvert?.Name ?? string.Empty); + } + if (state.CurrentState == "[") { } else { } + break; + case ":": + state = _cache.StateOfCurrentDepth(); + if (state.CurrentState != "[") { + throw new ExpInvalidSyntaxException( + "Range and index syntax error: wrong position of :"); + } + if (_cache.StatementsInDepth.Count != 0) { + throw new ExpInvalidSyntaxException( + "Range and index syntax error: expected one statement to define range beginning."); + } + ReverseAnalyzeStatement(); + root = _cache.StatementsInDepth.Pop(); + if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(root.NodeFlag)) { + throw new ExpInvalidTypeException( + root, "integer", root.EqualityTypeConvert?.Name ?? string.Empty); + } + state.RangeStart = root; + break; + default: + state = _cache.StateOfCurrentDepth(); + if (t.Value == "?") + { + switch (state.CurrentState) + { + case ":": + _cache.PushOperand(new ExpIntNode(t, int.MaxValue, true)); + break; + case "[": + _cache.PushOperand(new ExpIntNode(t, int.MaxValue, true)); + break; + default: + throw new ExpInvalidSyntaxException( + "Range and index syntax error: \"?\" can only be used in range or index"); + } + } + AppendToken_Common(t); + break; + } + } + + private class RangeAndIndexState : ICompileDepthState + { + + public ExpSyntaxNode RangeStart { get; set; } + + public string CurrentState { get; set; } = string.Empty; + + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs new file mode 100644 index 00000000..e3b314ab --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs @@ -0,0 +1,283 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.RepeatLoop" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp.Syntax; + +using System; +using System.Collections.Generic; +using System.ComponentModel.Design.Serialization; +using System.Linq; +using System.Resources; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + private Dictionary _tempVariableInLoops { get; } + = new Dictionary(); + + private bool AppendToken_RepeatLoop(Token t) + { + RepeatLoopState state = _cache.StateOfCurrentDepth(); + if (state == null) + { + state = new RepeatLoopState(t); + _cache.CurrentDepthMark.StateCache = state; + state.CurrentState = t.Value; + return true; + } + switch (state.CurrentState) + { + case ExpKeyword.Repeat: + return TryParseRepeatVariable(state, t); + case ExpKeyword.To: + return TryParseRepeatEnding(state, t); + case ExpKeyword.By: + return TryParseRepeatVariable(state, t); + case ExpKeyword.Until: + return TryParseRepeatUntilRegulation(state, t); + case ExpKeyword.Assignment: + return TryParseRepeatBeginning(state, t); + case ExpKeyword.While: + return TryParseRepeatWhileRegulation(state, t); + case ExpKeyword.Semicolon: + if (t.Value != ExpKeyword.EndRepeat) + { + AppendToken_Common(t); + return true; + } + break; + default: + AppendToken_Common(t); + return false; + } + ExpSyntaxNode root = _cache.PackAllStatements(); + state.Body = root; + _cache.DecreaseDepth(); + if (ExpTypeSource.IsNullOrVoid(state.IncrementVariableType)) + { + root = ExpRepeatNode.Create( + state.Position, state.IncrementVariable, state.Begin, state.End, state.IncrementVariable, + state.Body, state.UntilExpression, state.WhileExpression); + } else + { + root = ExpRepeatNode.Create( + state.Position, state.IncrementVariable.OriginObject, state.Begin, state.End, + state.IncrementVariable, state.Body, state.UntilExpression, state.WhileExpression); + } + _cache.StatementsInDepth.Push(root); + _tempVariableInLoops.Remove(state.IncrementVariable.CodeConvertTemplate); + return true; + } + + private bool TryParseRepeatBeginning(RepeatLoopState state, Token t) + { + switch (t.Value) + { + case ExpKeyword.To: + state.CurrentState = ExpKeyword.To; + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out ExpSyntaxNode? root); + state.Begin = root; + return true; + default: + AppendToken_Common(t); + return true; + } + } + + private bool TryParseRepeatEnding(RepeatLoopState state, Token t) + { + switch (t.Value) + { + case ExpKeyword.By: + state.CurrentState = ExpKeyword.By; + break; + case ExpKeyword.Until: + state.CurrentState = ExpKeyword.Until; + break; + case ExpKeyword.While: + state.CurrentState = ExpKeyword.While; + break; + default: + AppendToken_Common(t); + return true; + } + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out ExpSyntaxNode? root); + state.End = root; + return true; + } + + private bool TryParseRepeatIncrement(RepeatLoopState state, Token t) + { + switch (t.Value) + { + case ExpKeyword.Semicolon: + state.CurrentState = ExpKeyword.Semicolon; + break; + case ExpKeyword.Until: + state.CurrentState = ExpKeyword.Until; + break; + case ExpKeyword.While: + state.CurrentState = ExpKeyword.While; + break; + default: + AppendToken_Common(t); + return true; + } + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out ExpSyntaxNode? root); + state.StepIncrement = root; + return true; + } + + private bool TryParseRepeatUntilRegulation(RepeatLoopState state, Token t) + { + switch (t.Value) + { + case ExpKeyword.Semicolon: + state.CurrentState = ExpKeyword.Semicolon; + break; + default: + AppendToken_Common(t); + return true; + } + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out ExpSyntaxNode? root); + state.UntilExpression = root; + return true; + } + + private bool TryParseRepeatVariable(RepeatLoopState state, Token t) + { + switch (t.Value) + { + case ExpKeyword.Integer: + state.IncrementVariableType = ExpressCompile.ExpInt; + return true; + case + ExpKeyword.Real: + state.IncrementVariableType = ExpressCompile.ExpReal; + return true; + case ExpKeyword.Assignment: + state.CurrentState = ExpKeyword.Assignment; + return true; + default: + if (ExpTypeSource.IsNullOrVoid(state.IncrementVariableType)) + { + if ((_local.TryGetMember(t.Value, + out ExpSyntaxNode? node) && + node is ExpElementInstance instance) || + _tempVariableInLoops.TryGetValue(t.Value, out instance)) + { + state.IncrementVariable = ExpInstanceReferenceNode.MakeReferenceFrom( + t, instance); + return true; + } else + { + throw new ExpInvalidSyntaxException( + $"Variable {t.Value} is not declared or initialized."); + } + } else + { + ExpElementInstance variable = state.IncrementVariableType.CreateInstanceNode(t); + _tempVariableInLoops.Add(t.Value, variable); + state.IncrementVariable = ExpInstanceReferenceNode.MakeReferenceFrom( + t, variable); + return true; + } + } + } + + private bool TryParseRepeatWhileRegulation(RepeatLoopState state, Token t) + { + switch (t.Value) + { + case ExpKeyword.Until: + state.CurrentState = ExpKeyword.Until; + break; + default: + AppendToken_Common(t); + return true; + } + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out ExpSyntaxNode? root); + state.WhileExpression = root; + return true; + } + + private class RepeatLoopState : ICompileDepthState + { + + public RepeatLoopState(Token t) + { + Position = t; + UntilExpression = ExpSyntaxNode.Empty; + WhileExpression = ExpSyntaxNode.Empty; + } + + public ExpInstanceReferenceNode IncrementVariable { get; set; } + + public ExpSyntaxNode StepIncrement { get; set; } + + public ExpSyntaxNode Begin { get; set; } + + public ExpSyntaxNode End { get; set; } + + public ExpSyntaxNode UntilExpression { get; set; } + + public ExpSyntaxNode WhileExpression { get; set; } + + public ExpSyntaxNode Body { get; set; } + + public ExpTypeSource IncrementVariableType { get; set; } + + public string CurrentState { get; set; } + + public Token Position { get; set; } + + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.ReverseAnalysing.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.ReverseAnalysing.cs new file mode 100644 index 00000000..5482ab21 --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.ReverseAnalysing.cs @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer.ReverseAnalysing" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer + { + + private void ClosePrefixReverse(Token rightSeparator) + { + ExpSyntaxNode root; + ReverseAnalyzeStatement(); + root = _cache.PackAllStatements(); + if (rightSeparator.Value == ")") { + root = ExpTupleNode.Pack(root); + } + _cache.DecreaseDepth(); + if (IsSeparatorMatch(_cache.PeekOperator(), rightSeparator)) + { + _cache.PopOperator(); + _cache.PushOperand(root); + } else + { + throw new ExpCompileException( + rightSeparator, "Ending of block does not match its begging"); + } + } + + private void ReverseAnalyzeStatement() + { + ExpSyntaxNode root; + if (_cache.OperatorAheadOfDepth == 0) + { + switch (_cache.OperandAheadOfDepth) + { + case 1: + _cache.PopOperand(out _, out ExpSyntaxNode? statement); + _cache.StatementsInDepth.Push(statement); + break; + case 0: + _cache.StatementsInDepth.Push(ExpSyntaxNode.Empty); + break; + default: + throw new ExpInvalidSyntaxException( + "More than one operand but no operator provided."); + } + } else + { + while (_cache.TryPopOperator(out Token op)) { + ConvertAndPushOneOperator(op); + } + _cache.PopOperand(out _, out root); + _cache.StatementsInDepth.Push(root); + } + } + + } +} diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs new file mode 100644 index 00000000..3cee7cfa --- /dev/null +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs @@ -0,0 +1,180 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpSyntaxAnalyzer" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp.Syntax; + +using StgSharp.Threading; + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO.Pipes; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ExpKeyword = StgSharp.Script.Express.ExpressCompile.Keyword; + +namespace StgSharp.Script.Express +{ + public partial class ExpSyntaxAnalyzer : ISyntaxAnalyzer + { + + private const int EndLine = 1; + private const int TokenGenerated = 0; + private const int TokenTypeNotMatch = -1; + + private CompileStack _cache; + private ExpSchema _context; + private ExpSyntaxNode _lastStatement; + private IExpElementSource _local; + + public ExpSyntaxAnalyzer() + { + _cache = new CompileStack(); + } + + public ExpSyntaxAnalyzer(ExpSchema context, IExpElementSource local) + { + _cache = new CompileStack(); + ArgumentNullException.ThrowIfNull(context); + if (context is not ExpSchema_Builtin) + { + _context = context; + } else + { + throw new InvalidCastException("Not a valid Schema type"); + } + _local = local; + } + + /**/ + public void AppendToken(Token expToken) + { + switch ((ExpCompileStateCode)TryEnterBranch(expToken).Usage) + { + case ExpCompileStateCode.IfBranch: + AppendToken_IfBranch(expToken); + break; + case ExpCompileStateCode.CaseBranch: + AppendToken_CaseOf(expToken); + break; + case ExpCompileStateCode.RepeatLoop: + AppendToken_RepeatLoop(expToken); + break; + default: + AppendToken_Common(expToken); + break; + } + } + + public ExpSyntaxNode GetNextOperandCache() + { + if (_cache.PopOperand(out Token t, out ExpSyntaxNode? n)) + { + return n; + } else + { + // process some rare case here + } + + throw new NotImplementedException(); + } + + /// + /// Append a token to top of cache. This method will automatically convert token to node + /// if meets separators or operators. + /// + private void AppendToken_Common(Token expToken) + { + switch (expToken.Flag) + { + case TokenFlag.Symbol_Unary or TokenFlag.Symbol_Binary: + TryAppendSymbol(expToken); + break; + case TokenFlag.Number or TokenFlag.String: + ExpElementInstance node = ExpElementInstance.CreateLiteral(expToken); + _cache.PushOperand(node); + break; + case TokenFlag.Separator_Left: + TryAppendPrefixSeparator(expToken); + break; + case TokenFlag.Separator_Right: + TryAppendPrefixSeparatorEnd(expToken); + break; + case TokenFlag.Separator_Middle: + TryAppendMiddleSeparator(expToken); + break; + case TokenFlag.Index_Left: + TryAppendIndexLeft(expToken); + break; + case TokenFlag.Index_Right: + TryAppendIndexRight(expToken); + break; + case TokenFlag.Member: + TryAppendMember(expToken); + break; + default: + break; + } + } + + private CompileDepthMark TryEnterBranch(Token t) + { + if (t.Flag == TokenFlag.String) { + return _cache.CurrentDepthMark; + } + switch (t.Value) + { + case ExpKeyword.Case: + return _cache.IncreaseDepth((int)ExpCompileStateCode.CaseBranch); + case ExpKeyword.If: + return _cache.IncreaseDepth((int)ExpCompileStateCode.IfBranch); + case ExpKeyword.Repeat: + return _cache.IncreaseDepth((int)ExpCompileStateCode.RepeatLoop); + default: + return _cache.CurrentDepthMark; + } + } + + /**/ + + public enum ExpCompileStateCode + { + + Common, + ForLoop, + RepeatLoop, + UntilLoop, + IfBranch, + CaseBranch, + CollectionIndex, + + } + + } +} diff --git a/StgSharp.Script/Express/ExpTokenReader.cs b/StgSharp.Script/Express/ExpTokenReader.cs new file mode 100644 index 00000000..5d7afd29 --- /dev/null +++ b/StgSharp.Script/Express/ExpTokenReader.cs @@ -0,0 +1,411 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="ExpTokenReader" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using CommunityToolkit.HighPerformance; + +using StgSharp.HighPerformance; + +using System; +using System.Linq; +using System.Text.RegularExpressions; + +namespace StgSharp.Script.Express +{ + public abstract class ExpTokenReaderPreProcessor + { + + public static ExpTokenReaderPreProcessor Default { get; } = new DefaultProcessor(); + + public abstract bool Process(string codeLine, int line, ref int current, out Token t); + + private class DefaultProcessor : ExpTokenReaderPreProcessor + { + + public override bool Process(string codeLine, int line, ref int current, out Token t) + { + t = Token.Empty; + return false; + } + + } + + } + + public partial class ExpTokenReader : IScriptTokenReader + { + + private const int + MultiLineEnd = 0x0029002A; // *) + + private const string TokenMark = "token", EndMark = "end", RestMark = "rest"; + + private bool _isReadingMultiLineComment; + private int _current, _lineNum; + private IScriptSourceProvider _provider; + + private Regex + _nextWordTokenPattern = GetNextWordTokenPattern(), + _nextStringLiteralPattern = GetStringLiteralPattern(), + _nextNumberLiteralPattern = GetNumberLiteralPattern(), + _nextStringLiteralPatternWithSingle = GetStringLiteralPatternWithSingle(), + _skipBlankPattern = GetSkipBlankPattern(), + _nextSymbolPattern = GetSymbolPattern(); + private string _lineCache; + private Token _last; + + public ExpTokenReader(IScriptSourceProvider provider) + { + _provider = provider; + _current = 0; + _lineCache = string.Empty; + _isReadingMultiLineComment = false; + } + + public bool IsEmpty + { + get => ((string.IsNullOrEmpty(_lineCache) || _current >= _lineCache.Length)) && _provider.IsEmpty; + } + + public ExpTokenReaderPreProcessor TokenReaderPreProcessor { get; set; } = ExpTokenReaderPreProcessor.Default; + + public int LineNumber + { + get => _provider.Location; + } + + public unsafe ReadOnlySpan ReadLine() + { + bool lineOver = string.IsNullOrEmpty(_lineCache) || _current >= _lineCache.Length; + while (lineOver || _isReadingMultiLineComment) + { + if (IsEmpty) { + return ReadOnlySpan.Empty; + } + if (lineOver) + { + do + { + _lineCache = _provider.ReadLine(out _lineNum); + } while (string.IsNullOrEmpty(_lineCache) && !_provider.IsEmpty); + _current = 0; + } + if (_isReadingMultiLineComment) + { + int index; + fixed (char* cPtr = _lineCache.AsSpan(_current)) { + index = UnsafeCompute.IndexOfCharPair( + cPtr, MultiLineEnd, _lineCache.Length); + } + if (index == -1) + { + _lineCache = string.Empty; + } else + { + _isReadingMultiLineComment = false; + _current += index + 2; + } + } + lineOver = string.IsNullOrEmpty(_lineCache) || _current >= _lineCache.Length; + } + return _lineCache.AsSpan().Slice(_current); + } + + public unsafe Token ReadToken() + { + int begin, end, rest; + readLine: + ReadOnlySpan source; + if (!TryReadLine(out source)) { + return Token.Empty; + } + if (TokenReaderPreProcessor.Process(_lineCache, LineNumber, ref _current, + out Token t)) { + return t; + } + char c = source[0]; + if (char.IsLetter(c)) + { + Match match = _nextWordTokenPattern.Match(_lineCache, _current); + if (match.Success) + { + begin = match.Groups[TokenMark].Index; + end = match.Groups[EndMark].Index; + rest = match.Groups[RestMark].Index; + _current = rest; + _last = new( + ExpressCompile.PoolString(source[..(end - begin)]), _lineNum, begin, + TokenFlag.Member); + return _last; + } else + { + throw new ExpInvalidCharException(_current); + } + } else if (char.IsPunctuation(c) || char.IsSymbol(c)) + { + Match match; + switch (c) + { + case '\'': + char cNext = source[1]; + if (cNext == '\'') //empty string + { + begin = _current; + _current += 2; + return new(string.Empty, _lineNum, begin, TokenFlag.String); + } + match = _nextStringLiteralPatternWithSingle.Match(_lineCache, _current); + if (match.Success) + { + begin = match.Groups["token"].Index; + end = match.Groups["end"].Index; + rest = match.Groups["rest"].Index; + _current = rest; + _last = new( + ExpressCompile.PoolString(source[1..(end - begin)]), _lineNum, + begin, TokenFlag.String); + return _last; + } else + { + throw new ExpInvalidCharException('\"'); + } + case '"': + cNext = source[1]; + if (cNext == '\"') //empty string + { + begin = _current; + _current += 2; + return new(string.Empty, _lineNum, begin, TokenFlag.String); + } + match = _nextStringLiteralPattern.Match(_lineCache, _current); + if (match.Success) + { + begin = match.Groups["token"].Index; + end = match.Groups["end"].Index; + rest = match.Groups["rest"].Index; + _current = rest; + _last = new( + ExpressCompile.PoolString(source[1..(end - begin)]), _lineNum, + begin, TokenFlag.String); + return _last; + } else + { + throw new ExpInvalidCharException('\"'); + } + case '(': + begin = _current; + _current++; + _last = new( + ExpressCompile.PoolString(source[..1]), _lineNum, begin, + TokenFlag.Separator_Left); + return _last; + case ')' or '}': + begin = _current; + _current++; + _last = new Token( + ExpressCompile.PoolString(source[..1]), _lineNum, begin, + TokenFlag.Separator_Right); + return _last; + case '-': + + // 1. - number + // 2. -- comment + // 3. - number type param(UNARY) + // 4. param - param(BINARY) + cNext = source[1]; + if (char.IsNumber(cNext)) + { + match = _nextNumberLiteralPattern.Match(_lineCache, _current); + if (match.Success) + { + begin = match.Groups[TokenMark].Index; + end = match.Groups[EndMark].Index; + rest = match.Groups[RestMark].Index; + _current = rest; + return new( + ExpressCompile.PoolString(source[..(end - begin)]), + _lineNum, begin, TokenFlag.Number); + } else + { + throw new ExpInvalidCharException(_current); + } + } else if (cNext == '-') + { + _lineCache = string.Empty; + _current = 0; + goto readLine; + } else + { + begin = _current; + _current++; + if (_last.Flag == TokenFlag.Member || + _last.Flag == TokenFlag.Index_Right || + _last.Flag == TokenFlag.Separator_Right) + { + _last = new( + ExpressCompile.PoolString(source[..1]), _lineNum, begin, + TokenFlag.Symbol_Binary); + } else + { + _last = new( + ExpressCompile.PoolString(source[..1]), _lineNum, begin, + TokenFlag.Symbol_Unary); + } + return _last; + } + case '{': + begin = _current; + _current++; + _last = new Token( + ExpressCompile.PoolString("{"), _lineNum, begin, + TokenFlag.Separator_Left); + return _last; + case '[': + begin = _current; + _current++; + _last = new Token( + ExpressCompile.PoolString("["), _lineNum, begin, + TokenFlag.Index_Left); + return _last; + case ']': + begin = _current; + _current++; + _last = new Token( + ExpressCompile.PoolString("]"), _lineNum, begin, + TokenFlag.Index_Right); + return _last; + case ';' or ',': + begin = _current; + _current++; + _last = new Token( + ExpressCompile.PoolString(source[..1]), _lineNum, begin, + TokenFlag.Separator_Middle); + return _last; + case ':': + match = _nextSymbolPattern.Match(_lineCache, _current); + begin = match.Groups[TokenMark].Index; + end = match.Groups[EndMark].Index; + rest = match.Groups[RestMark].Index; + _current = rest; + if (end - begin == 1) + { + _last = new Token( + ExpressCompile.Keyword.Colon, _lineNum, begin, + TokenFlag.Separator_Middle); + } else + { + _last = new Token( + ExpressCompile.PoolString(source[..(end - begin)]), _lineNum, + begin, TokenFlag.Symbol_Binary); + } + return _last; + case '+' or '/' or '\\' or '*' or '.': + match = _nextSymbolPattern.Match(_lineCache, _current); + begin = match.Groups[TokenMark].Index; + end = match.Groups[EndMark].Index; + rest = match.Groups[RestMark].Index; + _current = rest; + _last = new Token( + ExpressCompile.PoolString(source[..(end - begin)]), _lineNum, + begin, TokenFlag.Symbol_Binary); + return _last; + case '=': + begin = _current; + _current++; + _last = new Token( + ExpressCompile.Keyword.Equal, _lineNum, begin, + TokenFlag.Symbol_Binary); + return _last; + default: + throw new ExpInvalidCharException(c); + } + } else if (char.IsNumber(c)) + { + Match match = _nextNumberLiteralPattern.Match(_lineCache, _current); + if (match.Success) + { + begin = match.Groups[TokenMark].Index; + end = match.Groups[EndMark].Index; + rest = match.Groups[RestMark].Index; + _current = rest; + string str = ExpressCompile.PoolString(source[..(end - begin)]); + return new(str, _lineNum, begin, TokenFlag.Number); + } else + { + throw new ExpInvalidCharException(_current); + } + } else if (char.IsWhiteSpace(c)) + { + Match match = _skipBlankPattern.Match(_lineCache, _current); + if (match.Success) + { + rest = match.Groups[RestMark].Index; + _current = rest; + goto readLine; + } else + { + throw new ExpInvalidCharException(_current); + } + } else + { + throw new ExpInvalidCharException(c); + } + } + + public bool TryReadLine(out ReadOnlySpan line) + { + line = ReadLine(); + return line != ReadOnlySpan.Empty; + } + + public bool TryReadToken(out Token t) + { + t = ReadToken(); + return !IsEmpty; + } + + [GeneratedRegex(@"(?[a-zA-Z][a-zA-Z0-9_]*)(?\s*?)(?\S|$)", RegexOptions.Singleline)] + private static partial Regex GetNextWordTokenPattern(); + + [GeneratedRegex( + @"(?-?\s*?[0-9]+(?:\.[0-9]*)?E?(?:[+-]?[0-9]+)?)(?\s*?)(?\S|$)", + RegexOptions.Singleline)] + private static partial Regex GetNumberLiteralPattern(); + + [GeneratedRegex(@"(?:\s+?)(?\S|$)", RegexOptions.Singleline)] + private static partial Regex GetSkipBlankPattern(); + + [GeneratedRegex(@"(?"")(?>\\\\|\\""|(?!')[^""])*(?""|$)\s*?(?\S|$)", RegexOptions.Singleline)] + private static partial Regex GetStringLiteralPattern(); + + [GeneratedRegex(@"(?')(?>\\\\|\\'|''|(?!')[^'])*(?')\s*?(?\S|$)", RegexOptions.Singleline)] + private static partial Regex GetStringLiteralPatternWithSingle(); + + [GeneratedRegex(@"(?[:<>=+\-*\/\.]+)(?\s?)\s*?(?\S|$)", RegexOptions.Singleline)] + private static partial Regex GetSymbolPattern(); + + } +} diff --git a/StgSharp.Script/Express/GeneratedExpSchema.cs b/StgSharp.Script/Express/GeneratedExpSchema.cs new file mode 100644 index 00000000..e700616d --- /dev/null +++ b/StgSharp.Script/Express/GeneratedExpSchema.cs @@ -0,0 +1,112 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="GeneratedExpSchema" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using CommunityToolkit.HighPerformance.Helpers; + +using StgSharp.Collections; + +using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Text; + +namespace StgSharp.Script.Express +{ + internal class GeneratedExpSchema : ExpSchema + { + + public GeneratedExpSchema() { } + + public static ExpSchema DefaultSchema + { + get => ExpSchema_Builtin.Only; + } + + public ExpTypeSource GetExpType(string typeName) + { + if (BuiltinSchema.TryGetType(typeName, out ExpTypeSource? ret)) { + return ret; + } + if (TypeDict.TryGetValue(typeName, out ret)) { + return ret; + } + foreach (GeneratedExpSchema item in SchemaInclude.Values) + { + if (item.TypeDict.TryGetValue(typeName, out ret)) { + return ret; + } + } + throw new ExpElementLoadException(typeName, this); + } + + public bool HasSchemaInclude(GeneratedExpSchema schema) + { + return SchemaInclude.ContainsKey(schema.Name); + } + + public override void LoadFromSource(ExpSchemaSource source) + { + throw new NotImplementedException(); + } + + public override bool TryGetConst(string name, out ExpElementInstance c) + { + return ConstDict.TryGetValue(name, out c!); + } + + public override bool TryGetEntity(string name, out ExpEntitySource e) + { + return EntityDict.TryGetValue(name, out e!); + } + + public override bool TryGetFunction(string name, out ExpFunctionSource f) + { + return FunctionDict.TryGetValue(name, out f!); + } + + public override bool TryGetProcedure(string name, out ExpProcedureSource p) + { + throw new NotImplementedException(); + } + + public override bool TryGetRule(string name, out ExpRuleSource r) + { + throw new NotImplementedException(); + } + + public override bool TryGetSchemaInclude(string name, out ExpSchema include) + { + throw new NotImplementedException(); + } + + public override bool TryGetType(string name, out ExpTypeSource element) + { + throw new NotImplementedException(); + } + + } +} diff --git a/StgSharp.Script/Express/IExpConvertableFrom.cs b/StgSharp.Script/Express/IExpConvertableFrom.cs new file mode 100644 index 00000000..decb755b --- /dev/null +++ b/StgSharp.Script/Express/IExpConvertableFrom.cs @@ -0,0 +1,298 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="IExpConvertableFrom" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp.Script.Express +{ + // Base interface with one generic parameter renamed to T0 + public interface IExpConvertableFrom where T0: IExpConvertableFrom + { + + void FromInstance(T0 entity); + + bool IsConvertableTo(string entityTypeName); + + } + + // 2 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + { + + void FromInstance(T1 entity); + + } + + // 3 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + { + + void FromInstance(T2 entity); + + } + + // 4 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + { + + void FromInstance(T3 entity); + + } + + // 5 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + { + + void FromInstance(T4 entity); + + } + + // 6 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + { + + void FromInstance(T5 entity); + + } + + // 7 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + { + + void FromInstance(T6 entity); + + } + + // 8 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + { + + void FromInstance(T7 entity); + + } + + // 9 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + { + + void FromInstance(T8 entity); + + } + + // 10 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + { + + void FromInstance(T9 entity); + + } + + // 11 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + where T10: IExpConvertableFrom + { + + void FromInstance(T10 entity); + + } + + // 12 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + where T10: IExpConvertableFrom + where T11: IExpConvertableFrom + { + + void FromInstance(T11 entity); + + } + + // 13 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + where T10: IExpConvertableFrom + where T11: IExpConvertableFrom + where T12: IExpConvertableFrom + { + + void FromInstance(T12 entity); + + } + + // 14 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + where T10: IExpConvertableFrom + where T11: IExpConvertableFrom + where T12: IExpConvertableFrom + where T13: IExpConvertableFrom + { + + void FromInstance(T13 entity); + + } + + // 15 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + where T10: IExpConvertableFrom + where T11: IExpConvertableFrom + where T12: IExpConvertableFrom + where T13: IExpConvertableFrom + where T14: IExpConvertableFrom + { + + void FromInstance(T14 entity); + + } + + // 16 generic parameters + public interface IExpConvertableFrom : IExpConvertableFrom + where T0: IExpConvertableFrom + where T1: IExpConvertableFrom + where T2: IExpConvertableFrom + where T3: IExpConvertableFrom + where T4: IExpConvertableFrom + where T5: IExpConvertableFrom + where T6: IExpConvertableFrom + where T7: IExpConvertableFrom + where T8: IExpConvertableFrom + where T9: IExpConvertableFrom + where T10: IExpConvertableFrom + where T11: IExpConvertableFrom + where T12: IExpConvertableFrom + where T13: IExpConvertableFrom + where T14: IExpConvertableFrom + where T15: IExpConvertableFrom + { + + void FromInstance(T15 entity); + + } +} diff --git a/StgSharp.Script/StgSharp.Script.csproj b/StgSharp.Script/StgSharp.Script.csproj new file mode 100644 index 00000000..317df04b --- /dev/null +++ b/StgSharp.Script/StgSharp.Script.csproj @@ -0,0 +1,21 @@ + + + + net8.0 + enable + preview + True + x64 + Debug;Release;PerformanceDebug + + + + + + + + + + + + diff --git a/StgSharp.TerminalDialogue/DialogueView.cs b/StgSharp.TerminalDialogue/DialogueView.cs new file mode 100644 index 00000000..5843aa3c --- /dev/null +++ b/StgSharp.TerminalDialogue/DialogueView.cs @@ -0,0 +1,105 @@ + + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Terminal.Gui; + +namespace StgSharpTerminalDialogue +{ + internal class DialogueView:Window + { + TextView tittle = new TextView() + { + Text = """" + + ███████╗████████╗ ██████╗ ███████╗██╗ ██╗ █████╗ ██████╗ ██████╗ + ██╔════╝╚══██╔══╝██╔════╝ ██╔════╝██║ ██║██╔══██╗██╔══██╗██╔══██╗ + ███████╗ ██║ ██║ ███╗███████╗███████║███████║██████╔╝██████╔╝ + ╚════██║ ██║ ██║ ██║╚════██║██╔══██║██╔══██║██╔══██╗██╔═══╝ + ███████║ ██║ ╚██████╔╝███████║██║ ██║██║ ██║██║ ██║██║ + ╚══════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ + + """", + //generate from site: https://www.asciiart.eu/text-to-ascii-art + //font: ANSI shadow + TextAlignment = Alignment.Start, + Width = 8 * 9, + Height = 1 * 8, + X = 0, + Y = 0, + ColorScheme = common + }; + + static readonly Terminal.Gui.Attribute + commonColor = Application.Driver!.MakeColor( + new Color(92, 180, 225), Color.Cyan), + errorColor = Application.Driver!.MakeColor( + Color.White, Color.BrightRed); + + static ColorScheme common = new ColorScheme(){ + Focus = commonColor, + Normal = commonColor + }, + error = new ColorScheme() + { + Focus = errorColor, + Normal = errorColor + }; + + public static DialogueView Single + { + get => new DialogueView(); + } + + private DialogueView() + { + Init(); + } + + private void Init() + { + ColorScheme = common; + + this.Width = Dim.Fill(0); + this.Height = Dim.Fill(0); + this.X = 0; + this.Y = 0; + this.Title = "StgSharp Framework Dialogue"; + this.Add(this.tittle); + } + + public void ShowError(string message) + { + this.Remove(this.tittle); + this.ColorScheme = error; + this.Text = + """ + + ██╗ ███████╗██████╗ ██████╗ ██████╗ ██████╗ + ██╗ ██╔╝ ██╔════╝██╔══██╗██╔══██╗██╔═══██╗██╔══██╗ + ╚═╝ ██║ █████╗ ██████╔╝██████╔╝██║ ██║██████╔╝ + ██╗ ██║ ██╔══╝ ██╔══██╗██╔══██╗██║ ██║██╔══██╗ + ╚═╝ ╚██╗ ███████╗██║ ██║██║ ██║╚██████╔╝██║ ██║ + ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ + + """ + "\n"+ + message; + + Button button = new Button() + { + Text = "Click to quit." + }; + button.Accept += (sender,e) => { + Application.RequestStop(); + }; + + this.Add(button); + this.SetNeedsDisplay(); + } + + } +} diff --git a/StgSharp.TerminalDialogue/PostOpration.cs b/StgSharp.TerminalDialogue/PostOpration.cs new file mode 100644 index 00000000..07b16038 --- /dev/null +++ b/StgSharp.TerminalDialogue/PostOpration.cs @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="PostOpration.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Terminal.Gui; + +namespace StgSharpTerminalDialogue +{ + internal static partial class Program + { + + private static DialogueView _dv; + + internal static void PostOperation( string instruction, string operand ) + { + switch( instruction ) { + case "posterror": + _dv.ShowError( operand ); + using( StreamWriter sw = new StreamWriter( + _callerServerPipe ) ) { + sw.WriteLine( "ERRORGET" ); + } + break; + default: + break; + } + } + + } +} diff --git a/StgSharp.TerminalDialogue/Program.cs b/StgSharp.TerminalDialogue/Program.cs new file mode 100644 index 00000000..0bb51683 --- /dev/null +++ b/StgSharp.TerminalDialogue/Program.cs @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Program.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using System; +using System.Globalization; +using System.IO.Pipes; + +using Terminal.Gui; + +namespace StgSharpTerminalDialogue +{ + internal static partial class Program + { + + private static AnonymousPipeClientStream _callerClientPipe, _callerServerPipe; + + private static void Main( string[] args ) + { + Application.Init(); + + Console.CancelKeyPress += ( sender, e ) => { + e.Cancel = true; + Application.RequestStop(); + }; + + Task renderTask = Task.Factory + .StartNew( + () => { + _dv = DialogueView.Single; + Application.Run( view: _dv ); + } ); + + /**/ + if( args.Length != 2 ) { + Console.ReadLine(); + Application.RequestStop(); + } + /**/ + + _callerClientPipe = new AnonymousPipeClientStream( + PipeDirection.In, args[ 0 ] ); + _callerServerPipe = new AnonymousPipeClientStream( + PipeDirection.Out, args[ 1 ] ); + + + using( StreamReader clientReader = new StreamReader( + _callerClientPipe ) ) { + using( StreamWriter clientSender = new StreamWriter( + _callerServerPipe ) ) { + clientSender.AutoFlush = true; + string temp = string.Empty; + while( !temp!.Contains( "exit " ) && !renderTask.IsCompleted ) { + temp = clientReader.ReadLine()!; + temp = temp ?? string.Empty; + if( string.IsNullOrEmpty( temp ) ) { + continue; + } + + int index = temp.IndexOf( ' ' ); + if( index == -1 ) { + continue; + } + + string command = temp.Substring( 0, index ); + string operand = temp.Substring( index + 1 ); + + PostOperation( command, operand ); + } + } + } + } + + } +} diff --git a/StgSharp.TerminalDialogue/StgSharp.TerminalDialogue.csproj b/StgSharp.TerminalDialogue/StgSharp.TerminalDialogue.csproj new file mode 100644 index 00000000..a1ecd2f3 --- /dev/null +++ b/StgSharp.TerminalDialogue/StgSharp.TerminalDialogue.csproj @@ -0,0 +1,58 @@ + + + + Exe + net8.0 + enable + enable + build\StgSharpTerminalDialogue + $(BaseOutputPath) + false + false + True + True + x64 + none + x64 + Debug;Release;PerformanceDebug + + + + False + + + + False + + + + True + + + + False + + + + False + + + + True + + + + + + + + + + + + + + + + + diff --git a/StgSharpDebug/ExpLinearExpressionTest.cs b/StgSharpDebug/ExpLinearExpressionTest.cs new file mode 100644 index 00000000..a7bd02c5 --- /dev/null +++ b/StgSharpDebug/ExpLinearExpressionTest.cs @@ -0,0 +1,175 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ExpLinearExpressionTest.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Script; +using StgSharp.Script.Express; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Schema; + +namespace StgSharp +{ + internal class ExpTestFuncSource : ExpFunctionSource + { + + public ExpTestFuncSource( string name, ScriptSourceTransmitter source ) + : base( name, source ) + { + LocalVariables.Add( + "a", new ExpIntNode( new Token( "a", 0, 0, TokenFlag.Number ), 1, false ) ); + LocalVariables.Add( + "b", new ExpIntNode( new Token( "b", 0, 0, TokenFlag.Number ), 1, false ) ); + LocalVariables.Add( + "c", new ExpIntNode( new Token( "c", 0, 0, TokenFlag.Number ), 1, false ) ); + LocalVariables.Add( + "d", new ExpIntNode( new Token( "d", 0, 0, TokenFlag.Number ), 1, false ) ); + LocalVariables.Add( + "e", new ExpIntNode( new Token( "e", 0, 0, TokenFlag.Number ), 1, false ) ); + } + + } + + internal class TestSchema : ExpSchema + { + + internal ExpTestFuncSource source; + + public TestSchema( ExpTestFuncSource testType ) + { + source = testType; + } + + public override void LoadFromSource( ExpSchemaSource source ) + { + return; + } + + public override bool TryGetConst( string name, out ExpElementInstance c ) + { + c = null; + return false; + } + + public override bool TryGetEntity( string name, out ExpEntitySource e ) + { + e = null; + return false; + } + + public override bool TryGetFunction( string name, out ExpFunctionSource f ) + { + if( name == "TestFunc" ) + { + f = source; + return true; + } + f = null; + return false; + } + + public override bool TryGetProcedure( string name, out ExpProcedureSource p ) + { + p = null; + return false; + } + + public override bool TryGetRule( string name, out ExpRuleSource r ) + { + r = null; + return false; + } + + public override bool TryGetSchemaInclude( string name, out ExpSchema include ) + { + include = null; + return false; + } + + public override bool TryGetType( string name, out ExpTypeSource t ) + { + t = null; + return false; + } + + } + + internal static partial class Program + { + + private const string code = """ + a := ( b * E + d * 2 ) * d; + (**) + a := b + (c + d) - a; + IF a = b THEN + a := a * a; + ELSE + a := c * a; + END_IF + (**) + CASE a OF + 1 : a := 1 + e ; + OTHERWISE : a:=a; + END_CASE + REPEAT a := 1 TO 10; + b := 10; + END_REPEAT + """; + + public static void ExpLinearExpressionTest() + { + ExpressCompile.InitCompile(); + ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter( "END", 0 ); + + foreach( string line in code.Split( + Environment.NewLine, StringSplitOptions.RemoveEmptyEntries ) ) { + transmitter.WriteLine( line ); + } + transmitter.EndWriting(); + ExpTokenReader reader = new ExpTokenReader( transmitter ); + /**/ + ExpTestFuncSource func = new ExpTestFuncSource( "test", transmitter ); + TestSchema testSchema = new TestSchema( func ); + ExpSyntaxAnalyzer generator = new ExpSyntaxAnalyzer( testSchema, func ); + /**/ + + while( reader.TryReadToken( out Token t ) ) + { + Console.WriteLine( t.Value ); + generator.AppendToken( t ); + } + Console.WriteLine( "OK" ); + } + + } +} diff --git a/StgSharpDebug/Program.cs b/StgSharpDebug/Program.cs new file mode 100644 index 00000000..66b23bbb --- /dev/null +++ b/StgSharpDebug/Program.cs @@ -0,0 +1,141 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Program" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Common.Timing; +using StgSharp.HighPerformance; +using StgSharp.HighPerformance.Memory; +using StgSharp.Internal; +using StgSharp.Mathematics.Numeric; +using StgSharp.Timing; + +namespace StgSharp +{ + internal static partial class Program + { + + private static string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp"; + + internal static unsafe void Main(string[] args) + { + try + { + World.Initialize() + .UseModule() + .UseModule() + .InitializeModule(); + + // TestRender(); + // TestHlsf(); + + + // HlsfStressTest.Run(); + /* + HybridLayerSegregatedFitAllocator hlsf; + unchecked { + hlsf = new((nuint)(64 * (ulong)10000 * 10000)); + } + Matrix m = Matrix.FromHlsf(1000, 1000, hlsf); + MatrixCompute.Fill(m, 1.0f); + + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine(); + Matrix n = Matrix.FromHlsf(1000, 1000, hlsf); + MatrixCompute.Fill(n, 0.0f); + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 2; j++) + { + MatrixCompute.Add(n, m, n); + + // Console.WriteLine($"{i} {j}"); + } + GC.Collect(); + } + + MatrixCompute.Mul(n, 12, n); + for (int i = 0; i < 20; i++) + { + for (int j = 0; j < 20; j++) { + Console.Write($"{n[i, j]:0.0E+00} \t"); + } + Console.WriteLine(); + } + /**/ + + // --- Logarithmic time sequence test: print seconds at each emitted span --- + + // Configure a simple sequence: + // initial slice = 0.5s, total = 5s, growth multiplier = 2, min slice = 0.75s + TimeSequence seq = + /**/ + TimeSequence.CreateLogarithmic(initialSliceSeconds:0.5, totalSeconds:5.0, + growthMultiplier:2.0, minSliceSeconds:0.75); + /* + TimeSequence.CreateLinear(5, 1); + /**/ + + // Bind to default time source provider. + TimeSpanProvider provider = new TimeSpanProvider(seq, TimeSpanProvider.DefaultProvider); + + // Print the second mark when a span is emitted. + provider.TimeSpanRefreshed += (s, e) => { + // CurrentSecond is PreviousFrameTick / Frequency + Console.WriteLine($"span @ {provider.CurrentSecond:0.000}s"); + }; + + // Start the time source and wait until sequence ends. + TimeSpanProvider.DefaultProvider.StartProvidingTime(); + + while (!provider.IsEnded) { + provider.WaitNextSpan(); + } + + TimeSpanProvider.DefaultProvider.StopProvidingTime(); + + // end of log-time sequence test + } + catch (Exception ex) + { + Console.WriteLine(ex); + Console.ReadLine(); + /* + World.WriteLog($"{ex}", LogType.Error); + Dialogue.PostError(ex); + /**/ + World.Terminate(-1); + /**/ + } + finally + { + World.Terminate(0); + } + /**/ + } + + } +} diff --git a/StgSharpDebug/Properties/launchSettings.json b/StgSharpDebug/Properties/launchSettings.json new file mode 100644 index 00000000..e5f4064d --- /dev/null +++ b/StgSharpDebug/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "StgSharpDebug": { + "commandName": "Project", + "nativeDebugging": true, + "hotReloadEnabled": false + } + } +} \ No newline at end of file diff --git a/StgSharpDebug/RenderStream/Partical.cs b/StgSharpDebug/RenderStream/Partical.cs new file mode 100644 index 00000000..50d82edc --- /dev/null +++ b/StgSharpDebug/RenderStream/Partical.cs @@ -0,0 +1,395 @@ +//----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +// file="Partical" +// Project: StgSharp +// AuthorGroup: Nitload +// Copyright (c) Nitload. All rights reserved. +// +// 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. +// +// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- +using StgSharp.Controls; +using StgSharp.Geometries; +using StgSharp.Graphics; +using StgSharp.Graphics.OpenGL; +using StgSharp.Mathematics; +using StgSharp.Mathematics.Graphic; +using StgSharp.Timing; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public class ParticleRenderStream : glRender + { + + private AutoTextureGL autoT; + + private ElementBuffer ebo; + private ElementBuffer f_ebo; + private FrameBuffer fbo; + private Image i; + + private int temp = 0; + private PlainInstancingBuffer buffer; + private RenderBuffer rbo; + private ShaderProgram frameMainShader; + private ShaderProgram s; + private TextureGL f_t; + private TextureGL t; + private Uniform texUniform; + private Uniform time; + private VertexArray f_vao; + private VertexArray vao; + + private VertexBuffer f_vbo; + private VertexBuffer vbo; + + public ParticleRenderStream() { } + + public override bool IsContextSharable => true; + + public Rectangle ButtonBounding { get; private set; } + + public TextureProvider ButtonTextureProvider { get; private set; } + + // render a controlling item + public void ButtonMain(IEnumerable items) + { + // Console.WriteLine("Render Button Itself"); + + GL.BindFrameBuffer(FrameBufferTarget.All, GlHandle.Zero); /*GL.Assert(true);/**/ + GL.ClearColor(0.4f, TimePassed % 1.0f, 0f, 1.0f); /*GL.Assert(true);/**/ + GL.Clear(MaskBufferBit.COLOR /**/ | MaskBufferBit.DEPTH/**/); /*GL.Assert(true);/**/ + + f_vao.Bind(0); //GL.Assert(true); + + foreach (PlainGeometryMesh mesh in items) + { + // autoT.SelectTextureAndBind(mesh.TextureImage); + f_t.LoadTexture(0, mesh.TextureImage); + + // GL.Assert(true); + + frameMainShader.Use(); //GL.Assert(true); + + GL.DrawElements(GeometryType.TRIANGLES, 6, TypeCode.UInt32, IntPtr.Zero); + } + + // GL.ClearError(); + // GL.Assert(true); + } + + public void Main() + { + temp++; + + // GL.ClearError(); + GL.Viewport(0, 0, (uint)Width, (uint)Height); + + // Console.Clear(); + buffer.UpdateAllParticles(); + + // Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + + fbo.Bind(0); //GL.Assert(true); + vao.Bind(0); //GL.Assert(true); + t.Bind2D(0); //GL.Assert(false); + + GL.Viewport(0, 0, (uint)Width, (uint)Height); + + /**/ + + GL.TextureImage2d(Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, (uint)Width, + (uint)Height, ImageChannel.WithAlphaChannel, PixelChannelLayout.Byte, null); + /**/ + + // GL.Assert(false); + // Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + + GL.ClearColor((0.6f + TimePassed) % 1.0f, 0.1f, 0.3f, 1); + + // GL.Assert( false ); + + // Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + GL.Clear(MaskBufferBit.COLOR /**/ | MaskBufferBit.DEPTH/**/); + + + // GL.Assert(false); + + vbo.Bind(1); + vbo.WriteVectorData(1, buffer.CoordAndRotationSpan, BufferUsage.StreamDraw); + + + s.Use(); + NativeCamera.SetAllUniforms(); + GL.SetUniformValue(time, TimePassed); + + GL.DrawElementsInstanced(GeometryType.TRIANGLES, 6, TypeCode.UInt32, IntPtr.Zero, 100); + + // Console.WriteLine(TimePassed); + // GL.Assert(true); + + GL.WaitAccomplishment(); + GL.BindVertexArray(GlHandle.Zero); + /**/ + + // GL.Assert(true); + + ImageHelper.Resize(i, Width, Height, ImageMovement.Discard); + + // GL.ClearError(); + // Console.Write($"Size set to {Height},{Width}"); + // Console.WriteLine($"Image resized to {i.Height} {i.Width}"); + GL.GetTextureImage(Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, PixelChannelLayout.Byte, + i.PixelBuffer); + /* + for (int num = 0; num < i.PixelBuffer.Length; num+=10000) + { + Console.Write($"{i.PixelBuffer[num]}\t"); + } + /**/ + + // GL.Assert(true); + // Array.Fill(i.PixelBuffer, 24); + + GL.BindFrameBuffer(FrameBufferTarget.All, GlHandle.Zero); + + // GL.Assert(true); + /**/ + } + + public void NothingMain() + { + GL.ClearError(); + + // GL.BindFrameBuffer(FrameBufferTarget.All, GlHandle.Zero); + GL.ClearColor(0.5f, 0.2f, 0.3f, 1.0f); + GL.Assert(false); + } + + public void RenderButton(ButtonStatus status, float statusBegin, in TextureProvider provider) + { + provider.UpdateFromImage(i); + } + + internal static Vec3 DefaultRotation(TimeSpanProvider provider, out float rotation) + { + rotation = 1.0f / 60; + float angle = (float)provider.CurrentSecond * 2; + return (new Vec3(Scalar.Cos(angle), Scalar.Sin(angle), + 0)) * rotation; + } + + protected override void CustomizeDeinit() { } + + protected override void CustomizeInit() + { + // GL.ClearError(); + // GL.Assert(true); + + buffer = new PlainInstancingBuffer(); + for (int i = 0; i < 10; i++) + { + float ai = Scalar.Abs(i - 5.0f); + for (int t = 0; t < 10; t++) + { + float at = Scalar.Abs(t - 5.0f); + + ParticleOnPlain p = new ParticleOnPlain(buffer); + ((IInstancing)p).Coord = new Vec3( + (((-5) + i) * 0.2f) + 0.1f, (((-5) + t) * 0.2f) + 0.1f, 0); + ((IInstancing)p).Scale = + Scalar.MinOf(i, t) * 0.15f; + ((IInstancing)p).Motion = new GeometryMotion( + true, TimeProvider, DefaultRotation); + } + } + + // GL.Assert(true); + + // SetSizeLimit(800, 800, 800, 800); + + s = CreateShaderProgram(); + frameMainShader = CreateShaderProgram(); + Shader pvs = CreateShaderSegment(ShaderType.Vertex, 2); + Shader pfs = CreateShaderSegment(ShaderType.Fragment, 2); + + // GL.Assert(true); + pvs.Compile(0, Shader.FromCodeFile("Shader\\particle.vert")); + + // GL.Assert(true); + pvs.AttachTo(0, s); + + // GL.Assert(true); + pfs.Compile(0, Shader.FromCodeFile("Shader\\particle.frag")); + pfs.AttachTo(0, s); + s.Link(); + + // GL.Assert(true); + + pvs.Compile(1, Shader.FromCodeFile("Shader\\fbo.vert")); + pvs.AttachTo(1, frameMainShader); + pfs.Compile(1, Shader.FromCodeFile("Shader\\fbo.frag")); + pfs.AttachTo(1, frameMainShader); + frameMainShader.Link(); + + // GL.Assert(true); + vbo = CreateVertexBuffer(3); + vao = CreateVertexArray(1); + ebo = CreateElementBuffer(1); + vbo.Bind(0); + + Rectangle rec = new Rectangle(0.05f, 0.05f, 0.05f, -0.05f, -0.05f, -0.05f, -0.05f, 0.05f); + + // GL.Assert(true); + vao.Bind(0); + vbo.WriteVectorData(0, rec.VertexStream, BufferUsage.StaticDraw); + ebo.SetValue(0, rec.VertexIndices, BufferUsage.StaticDraw); + vao.SetVertexAttribute(0, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + + vbo.WriteVectorData(1, buffer.CoordAndRotationSpan, BufferUsage.StreamDraw); + vao.SetVertexAttribute(1, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + vao.SetVertexAttribute(2, 1, TypeCode.Single, false, 4 * sizeof(float), 3 * sizeof(float)); + + GL.VertexAttributeDivisor(1, 1); + GL.VertexAttributeDivisor(2, 1); + + vbo.WriteScalerData(2, buffer.ScalingSpan, BufferUsage.StaticDraw); + vao.SetVertexAttribute(3, 1, TypeCode.Single, false, sizeof(float), 0); + + GL.VertexAttributeDivisor(3, 1); + + vbo.Unbind(); + GL.BindVertexArray(GlHandle.Zero); + + NativeCameraViewTarget([ + 0f, + 0f, + -100f + ], [ + 0f, + 0f, + 0f + ], [ + 0f, + 1f, + 0f + ]); + NativeCameraViewRange(new Degree(1.5f), Vec2.Zero, (50, 50)); + NativeCameraUniform(s, "Camera"); + + s.Use(); + + fbo = CreateFrameBuffer(1); + rbo = CreateRenderBuffer(1); + fbo.Bind(0); + rbo.Bind(0); + + // GL.Assert(true); + t = CreateTexture(1); + t.Bind2D(0); + GL.TextureImage2d(Texture2DTarget.Texture2D, 0, ImageChannel.WithAlphaChannel, (uint)Width, + (uint)Height, ImageChannel.WithAlphaChannel, PixelChannelLayout.Byte, null!); + t.Set2dWrapProperty(0, TextureWrap.Repeat, TextureWrap.Repeat); + t.Set2dFilterProperty(0, TextureFilter.Linear, TextureFilter.Linear); + + // GL.Assert(true); + GL.FrameBufferTexture2d(FrameBufferTarget.All, glAttachment.Color(0), Texture2DTarget.Texture2D, t[0], 0); + + GL.SetRenderBufferStorage(RenderBufferInternalFormat.Depth24_Stencil8, this.Size); + GL.CombineFrameBufferRenderBuffer(FrameBufferAttachment.DepthAndStencil, rbo[0]); + + Console.WriteLine(GL.CheckFrameBufferStatus(FrameBufferTarget.All)); + + FrameBuffer.BindNull(); + + // GL.Assert(true); + int streamLength = this.Width * this.Height * 4; + byte[] imageStream = new byte[streamLength]; + i = Image.FromMemory(this.Size, ImageChannel.WithAlphaChannel, imageStream); + + + time = s.GetUniform("time"); + + Vec2[] buttonTextureCoordArray = { + (0f, 1f), + (1f, 1f), + (1f, 0f), + (0f, 0f) + }; + ButtonBounding = new Rectangle(-0.9f, 0.9f, 0.9f, 0.9f, 0.9f, -0.9f, -0.9f, -0.9f); + + // GL.Assert(true); + ButtonTextureProvider = new TextureProvider(i, buttonTextureCoordArray); + + f_vao = CreateVertexArray(1); + f_vbo = CreateVertexBuffer(2); + f_ebo = CreateElementBuffer(1); + + // GL.Assert(true); + f_vao.Bind(0); + + f_ebo.Bind(0); + f_ebo.SetValue(0, ButtonBounding.VertexIndices, BufferUsage.StaticDraw); + + // GL.Assert(true); + f_vbo.Bind(0); + f_vbo.WriteVectorData(0, ButtonBounding.VertexStream, BufferUsage.StaticDraw); + f_vao.SetVertexAttribute(0, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + + // GL.Assert(true); + f_vbo.Bind(1); + f_vbo.WriteVectorData(1, buttonTextureCoordArray, BufferUsage.StaticDraw); + f_vao.SetVertexAttribute(1, 3, TypeCode.Single, false, 4 * sizeof(float), 0); + + // GL.Assert(true); + + autoT = CreateAutoTexture(4); + autoT.DefaultTextureProperty = new TextureProperty(TextureFilter.Nearest, TextureFilter.Nearest, + TextureWrap.Repeat, TextureWrap.Repeat); + + f_t = CreateTexture(1); + f_t.Bind2D(0); + f_t.Set2dWrapProperty(0, TextureWrap.Repeat, TextureWrap.Repeat); + f_t.Set2dFilterProperty(0, TextureFilter.Nearest, TextureFilter.Nearest); + + // GL.Assert(true); + f_t.ActivateAs(TextureUnit.Unit1); + + // GL.Assert(true); + frameMainShader.Use(); + texUniform = frameMainShader.GetUniform("tex"); + + // GL.Assert(true); + GL.SetUniformValue(texUniform, 1); + + // GL.Assert(true); + + GL.ClearError(); + GL.Assert(true); + } + + } +} diff --git a/StgSharpDebug/SSG_errorlog.log b/StgSharpDebug/SSG_errorlog.log new file mode 100644 index 00000000..e69de29b diff --git a/StgSharpDebug/Shader/ControlItemRender.frag b/StgSharpDebug/Shader/ControlItemRender.frag new file mode 100644 index 00000000..74a2e504 --- /dev/null +++ b/StgSharpDebug/Shader/ControlItemRender.frag @@ -0,0 +1,12 @@ +#version 430 core + +in vec3 texCoord; + +out vec4 fragColor; + +uniform sampler2D tex; + +void main() +{ + fragColor = texture(tex, texCoord.xy); +} \ No newline at end of file diff --git a/StgSharpDebug/Shader/ControlItemRender.vert b/StgSharpDebug/Shader/ControlItemRender.vert new file mode 100644 index 00000000..f3dc2319 --- /dev/null +++ b/StgSharpDebug/Shader/ControlItemRender.vert @@ -0,0 +1,12 @@ +#version 430 core + +layout(location = 0)in vec3 coord; +layout(location = 1)in vec3 tCoord; + +out vec3 texCoord; + +void main() +{ + gl_Position = vec4(coord.xyz,1.0f); + texCoord = tCoord; +} \ No newline at end of file diff --git a/StgSharpDebug/Shader/Image1.png b/StgSharpDebug/Shader/Image1.png new file mode 100644 index 00000000..5e95b072 Binary files /dev/null and b/StgSharpDebug/Shader/Image1.png differ diff --git a/StgSharpDebug/Shader/awesomeface.png b/StgSharpDebug/Shader/awesomeface.png new file mode 100644 index 00000000..c7bfec66 Binary files /dev/null and b/StgSharpDebug/Shader/awesomeface.png differ diff --git a/StgSharpDebug/Shader/fbo.frag b/StgSharpDebug/Shader/fbo.frag new file mode 100644 index 00000000..50cefd8b --- /dev/null +++ b/StgSharpDebug/Shader/fbo.frag @@ -0,0 +1,13 @@ +#version 430 core + +in vec3 texCoord; + +out vec4 fragColor; + +uniform sampler2D tex; + +void main() +{ + fragColor = texture(tex, texCoord.xy); + //fragColor = vec4(0.099f,0.226f,0.335f,0.0f); +} \ No newline at end of file diff --git a/StgSharpDebug/Shader/fbo.vert b/StgSharpDebug/Shader/fbo.vert new file mode 100644 index 00000000..bb5c00c5 --- /dev/null +++ b/StgSharpDebug/Shader/fbo.vert @@ -0,0 +1,13 @@ +#version 330 core + +layout(location = 0)in vec3 coord; +layout(location = 1)in vec3 tCoord; + +out vec3 texCoord; + +void main() +{ + gl_Position = vec4(coord.xyz,1.0f); + texCoord = tCoord; +} + diff --git a/StgSharpDebug/Shader/main.frag b/StgSharpDebug/Shader/main.frag new file mode 100644 index 00000000..6f8c1558 --- /dev/null +++ b/StgSharpDebug/Shader/main.frag @@ -0,0 +1,17 @@ +#version 330 core + +in vec2 TexCoord; + +out vec4 FragColor; + +uniform vec4 color; +uniform sampler2D ourTexture; +uniform sampler2D ourTexture2; + +void main() +{ + vec4 tex1 = texture(ourTexture, TexCoord); + vec4 tex2 = texture(ourTexture2,TexCoord); + FragColor = mix(tex1 * vec4( color.xyz, 1.0), tex2, 0.2) /* *vec4( TexColor,1.0) /**/; +} + diff --git a/StgSharpDebug/Shader/main.vert b/StgSharpDebug/Shader/main.vert new file mode 100644 index 00000000..a3a23d5e --- /dev/null +++ b/StgSharpDebug/Shader/main.vert @@ -0,0 +1,22 @@ +#version 330 core + +layout(location = 0) in vec3 aPos; +layout(location = 1) in vec3 aColor; +layout(location = 2) in vec2 aTextCoord; + +out vec2 TexCoord; + +uniform mat4x4 camera; + +void main() +{ + + TexCoord = aTextCoord; + vec4 temp = vec4(aPos.xyz,1.0); + gl_Position = /**/ camera * /**/ temp; +} + +//struct + + + diff --git a/StgSharpDebug/Shader/particle.frag b/StgSharpDebug/Shader/particle.frag new file mode 100644 index 00000000..d2eb95fd --- /dev/null +++ b/StgSharpDebug/Shader/particle.frag @@ -0,0 +1,12 @@ +#version 460 core + +uniform float time; + +out vec3 fragColor; + +void main() +{ + + fragColor = vec3( 0.5f,0.336f,mod( (0.9961f + time),1.0f) ); + +} \ No newline at end of file diff --git a/StgSharpDebug/Shader/particle.vert b/StgSharpDebug/Shader/particle.vert new file mode 100644 index 00000000..83adda21 --- /dev/null +++ b/StgSharpDebug/Shader/particle.vert @@ -0,0 +1,36 @@ +#version 460 core + + +layout(location = 0) in vec3 singleCoord; +layout(location = 1) in vec3 locations; +layout(location = 2) in float rotation; +layout(location = 3) in float scale; + +uniform mat4x4 Camera; + +void main() +{ + /**/ + mat4x4 scalingMat = mat4x4 + ( + scale,0,0,0, + 0,scale,0,0, + 0,0,scale,0, + 0,0,0,1 + ); + /**/ + /**/ + + mat4x4 rotationMat = mat4x4 + ( + cos(rotation),-sin(rotation),0,0, + sin(rotation),cos(rotation),0,0, + 0,0,1,0, + 0,0,0,1 + ); + + /**/ + + gl_Position = Camera * ( rotationMat * scalingMat * vec4( singleCoord.xyz , 1) + vec4( locations.xyz , 0)); + +} diff --git a/StgSharpDebug/StepReadingTest.cs b/StgSharpDebug/StepReadingTest.cs new file mode 100644 index 00000000..74cd9c99 --- /dev/null +++ b/StgSharpDebug/StepReadingTest.cs @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="StepReadingTest.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Model.Step; +using StgSharp.PipeLine; +using StgSharp.Script.Express; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + internal static partial class Program + { + + private static string[] stepFile = [ + @"D:\NitloadIndustry\Ñо¿ÏîĿ\1-Flagship\TH2020\ProjectFile\StepModel\_NPart#8299.stp", + @"D:\NitloadIndustry\Ñо¿ÏîĿ\1-Flagship\TH2020\ProjectFile\StepModel\¼¸ºÎëÅ÷.STEP", + ]; + + private static void TestStepRead() + { + ExpressCompile.InitCompile(); + if( StepReader.FromFile( stepFile[ 1 ], out StepReader reader ) ) + { + StepModel model = reader.ReadToModelSingleThread(); + PipeLineRunner.SetMaxTaskCount( 1 ); + string[] info = model.ShowStructure( int.MaxValue ); + FileStream fs = File.Open( "D:\\struct.txt", FileMode.Create, + FileAccess.ReadWrite ); + StreamWriter sw = new StreamWriter( fs ); + foreach( string line in info ) + { + sw.WriteLine( line ); + Console.WriteLine( line ); + } + sw.Dispose(); + fs.Dispose(); + + //model.InitEntity(); + reader.Dispose(); + } + } + + } +} diff --git a/StgSharpDebug/StgSharpDebug.csproj b/StgSharpDebug/StgSharpDebug.csproj new file mode 100644 index 00000000..9709df1a --- /dev/null +++ b/StgSharpDebug/StgSharpDebug.csproj @@ -0,0 +1,115 @@ + + + + Exe + net8.0 + enable + Preview + warnings + StgSharp.Program + x64 + True + True + none + False + False + MIT + False + x64;ARM64 + Always + Debug;Release;PerformanceDebug + + + + + False + False + + + + + False + False + + + + True + False + + + + True + False + + + + True + False + + + + True + False + + + + true + true + true + True + + + + Windows + + + OSX + + + Linux + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + + + + + diff --git a/StgSharpDebug/TestFileRead.cs b/StgSharpDebug/TestFileRead.cs new file mode 100644 index 00000000..bc9d24a0 --- /dev/null +++ b/StgSharpDebug/TestFileRead.cs @@ -0,0 +1,55 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TestFileRead.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Script.Express; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + internal static partial class Program + { + + private static void TestFileRead() + { + ExpressCompile.InitCompile(); + ExpFileSource reader = new ExpFileSource( testExpPath ); + ExpSchemaSource schemaSource = new ExpSchemaSource(); + schemaSource.ReadSchema( reader ); + + ExpSchema schema = schemaSource.Compile( ExpressCompileOption.Translate ); + } + + } +} diff --git a/StgSharpDebug/TestRender.cs b/StgSharpDebug/TestRender.cs new file mode 100644 index 00000000..9c36f368 --- /dev/null +++ b/StgSharpDebug/TestRender.cs @@ -0,0 +1,64 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TestRender.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Collections; +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + internal static partial class Program + { + + public static void TestRender() + { + World.InitGL( 4, 6 ); + World.GlobalSetting.VSyncActivated = false; + + ViewPort vp = new ViewPort( 800, 600, "Hello StgSharp!", IntPtr.Zero ); + + //throw new NotImplementedException(); + + ViewModelBase mainModel = new ViewModelMain( vp ); + mainModel.CreateAndBindView( "MainView", (1, 1, 1) ); + + mainModel.UseViewModel( "MainView" ); + + World.Terminate( 0 ); + } + + } +} diff --git a/StgSharpDebug/View/Control.cs b/StgSharpDebug/View/Control.cs new file mode 100644 index 00000000..2347ee78 --- /dev/null +++ b/StgSharpDebug/View/Control.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Control.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Controlling.UsrActivity; +using StgSharp.MVVM; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain + { + + protected class Control : ViewResponder + { + + public Control( ViewMain view ) : base( view ) { } + + public override void CustomizedInitialize( + Func keyRegister ) { } + + public override bool ValidateInitializing() + { + return true; + } + + } + + } +} diff --git a/StgSharpDebug/View/Design.cs b/StgSharpDebug/View/Design.cs new file mode 100644 index 00000000..0ae04fbc --- /dev/null +++ b/StgSharpDebug/View/Design.cs @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="Design.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Controlling; +using StgSharp.Controlling.UsrActivity; +using StgSharp.Controls; + +using StgSharp.Geometries; +using StgSharp.Graphics; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain + { + + internal DemoButtonGroup Group { get; set; } + + internal TriggerButton OnlyButton { get; set; } + + internal class Design : ViewDesigner + { + + public Design( ViewMain view ) : base( view ) { } + + public override sealed void CustomizedInitialize() + { + Binding.Group = CreateKeyboardButtonGroup( + new KeyTrigger( KeyboardKey.Left, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Right, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Up, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Down, KeyStatus.PRESS ), + new KeyTrigger( KeyboardKey.Enter, KeyStatus.PRESS ) ); + Binding.OnlyButton = CreateKeyboardButton( + Binding.Stream.ButtonBounding, Binding.Stream.ButtonTextureProvider, true ); + Binding.OnlyButton.RenderButtonTexture += Binding.Stream.RenderButton; + } + + public override bool ValidateInitializing() + { + return true; + } + + } + + } + + public class DemoButtonGroup : KeyboardButtonGroup + { + + public override sealed void Confirm() + { + return; + } + + } +} diff --git a/StgSharpDebug/View/NewRender.cs b/StgSharpDebug/View/NewRender.cs new file mode 100644 index 00000000..8a23ac19 --- /dev/null +++ b/StgSharpDebug/View/NewRender.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="NewRender.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.HighPerformance; + +using StgSharp.Internal; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain + { + + public ParticleRenderStream Stream { get; set; } + + private class NewRender : ViewRender + { + + public NewRender( ViewMain view ) : base( view ) { } + + public override void CustomizedInitialize() + { + Binding.Stream = CreateRenderStream(); + Render[ "only".AsLabel() ] = Binding.Stream; + } + + public override bool ValidateInitializing() + { + return Binding.Stream != null; + } + + } + + } +} diff --git a/StgSharpDebug/View/ViewMain.cs b/StgSharpDebug/View/ViewMain.cs new file mode 100644 index 00000000..151413dd --- /dev/null +++ b/StgSharpDebug/View/ViewMain.cs @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ViewMain.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Graphics; +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public partial class ViewMain : ViewBase + { + + private Dictionary _databindingIndexMap; + + public ViewMain() + { + _databindingIndexMap = new Dictionary(); + } + + public override void CustomizedInitialize( [NotNull]ViewModelBase viewModelBinding ) + { + Designer = new Design( this ); + Responder = new Control( this ); + Render = new NewRender( this ); + + Render.Initialize(); + Designer.Initialize(); + Responder.Initialize( viewModelBinding.MethodLookup ); + } + + public override bool TryGetObjectReference( string name, out DataBindingEntry entry ) + { + if( _databindingIndexMap.TryGetValue( name, out entry ) ) { + return true; + } + try + { + entry = name switch + { + _ => default( DataBindingEntry ), + }; + return !entry.ExactEqual( default( DataBindingEntry ) ); + } + catch( Exception ) + { + entry = default( DataBindingEntry ); + return false; + } + } + + protected override void Show() + { + Stream.RenderStart(); + + //Stream.NothingMain(); + + Stream.Main(); + Stream.ButtonMain( OnlyButton ); + Stream.RenderEnd(); + } + + } +} diff --git a/StgSharpDebug/ViewModelMain.cs b/StgSharpDebug/ViewModelMain.cs new file mode 100644 index 00000000..bf04a5ca --- /dev/null +++ b/StgSharpDebug/ViewModelMain.cs @@ -0,0 +1,75 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="ViewModelMain.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// 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. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Graphics; + +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + public class ViewModelMain : ViewModelBase + { + + private Dictionary dataBindingEntryIndexMap; + + public ViewModelMain( ViewPort vp ) + : base( vp, 60 ) + { + dataBindingEntryIndexMap = new Dictionary(); + } + + public override void CustomizeInitialize() { } + + public override bool TryGetObjectReference( string name, out DataBindingEntry entry ) + { + if( dataBindingEntryIndexMap.TryGetValue( name, out entry ) ) { + return true; + } + entry = name switch + { + _ => DataBindingEntry.NullBinding, + }; + + if( entry.ExactEqual( DataBindingEntry.NullBinding ) ) { + return false; + } + dataBindingEntryIndexMap.Add( name, entry ); + return true; + } + + }//------------------------------------- End of Class ------------------------------------------ +} diff --git a/cache.txt b/cache.txt index e69de29b..c5e7fe66 100644 --- a/cache.txt +++ b/cache.txt @@ -0,0 +1,9 @@ +public const uint GL_ACTIVE_SUBROUTINES = 0x8DE5 +public const uint GL_ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 +public const uint GL_MAX_SUBROUTINES = 0x8DE7 +public const uint GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 +public const uint GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 +public const uint GL_ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 +public const uint GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 +public const uint GL_NUM_COMPATIBLE_SUBROUTINES = 0x8E4A +public const uint GL_COMPATIBLE_SUBROUTINES = 0x8E4B \ No newline at end of file