make some changes to opengl api gen, discussing on rewrite of all opengl binding, making it neat and structral
This commit is contained in:
@@ -41,7 +41,7 @@ namespace GenerateGL.CodeGen
|
||||
return $"byte{new string('*', pointerLevel)}";
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType, allowVoid:false);
|
||||
string mapped = MapType(param.CType);
|
||||
if (pointerLevel > 0)
|
||||
{
|
||||
if (mapped == "void") {
|
||||
@@ -57,7 +57,7 @@ namespace GenerateGL.CodeGen
|
||||
int pointerLevel
|
||||
)
|
||||
{
|
||||
string mapped = MapType(cType, allowVoid:true);
|
||||
string mapped = MapType(cType);
|
||||
if (pointerLevel > 0) {
|
||||
return $"{mapped}{new string('*', pointerLevel)}";
|
||||
}
|
||||
@@ -70,12 +70,6 @@ namespace GenerateGL.CodeGen
|
||||
{
|
||||
if (param.PointerLevel == 0)
|
||||
{
|
||||
if (param.CType.Equals("GLenum", StringComparison.Ordinal) &&
|
||||
LooksLikeShaderType(param.Name) &&
|
||||
!param.IsPointer) {
|
||||
return "ShaderType";
|
||||
}
|
||||
|
||||
if (param.CType.Equals("GLuint", StringComparison.Ordinal) &&
|
||||
LooksLikeHandle(param.Name) &&
|
||||
!param.IsPointer) {
|
||||
@@ -88,7 +82,7 @@ namespace GenerateGL.CodeGen
|
||||
return $"byte{new string('*', pointerLevel)}";
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType, allowVoid:false);
|
||||
string mapped = MapType(param.CType);
|
||||
if (pointerLevel > 0)
|
||||
{
|
||||
if (mapped == "void") {
|
||||
@@ -104,29 +98,42 @@ namespace GenerateGL.CodeGen
|
||||
int pointerLevel
|
||||
)
|
||||
{
|
||||
string mapped = MapType(cType, allowVoid:true);
|
||||
string mapped = MapType(cType);
|
||||
if (pointerLevel > 0) {
|
||||
return $"{mapped}{new string('*', pointerLevel)}";
|
||||
}
|
||||
return mapped;
|
||||
}
|
||||
|
||||
public static bool TryMapConstPointerToSpan(
|
||||
GlParam param,
|
||||
out string spanElementType
|
||||
public static bool IsHandleReturn(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
spanElementType = string.Empty;
|
||||
if (!param.IsConst || param.PointerLevel != 1) {
|
||||
if (command.ReturnPointerLevel != 0 ||
|
||||
!command.ReturnType.Equals("GLuint", StringComparison.Ordinal)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType, allowVoid:false);
|
||||
return command.Name is "glCreateProgram" or "glCreateShader" or
|
||||
"glCreateShaderProgramv";
|
||||
}
|
||||
|
||||
public static bool TryMapPointerElement(
|
||||
GlParam param,
|
||||
out string elementType
|
||||
)
|
||||
{
|
||||
elementType = string.Empty;
|
||||
if (param.PointerLevel != 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType);
|
||||
if (mapped is "void") {
|
||||
return false;
|
||||
}
|
||||
|
||||
spanElementType = mapped;
|
||||
elementType = mapped;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -150,41 +157,34 @@ namespace GenerateGL.CodeGen
|
||||
name.Contains("transformfeedback", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private static bool LooksLikeShaderType(
|
||||
string name
|
||||
)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name)) {
|
||||
return false;
|
||||
}
|
||||
return name.Contains("shadertype", StringComparison.OrdinalIgnoreCase) ||
|
||||
name.Equals("type", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private static string MapType(
|
||||
string cType,
|
||||
bool allowVoid
|
||||
string cType
|
||||
)
|
||||
{
|
||||
return cType switch
|
||||
{
|
||||
"void" when allowVoid => "void",
|
||||
"GLenum" or "GLbitfield" => "uint",
|
||||
"GLboolean" => "byte",
|
||||
"GLuint" or "GLhandleARB" => "uint",
|
||||
"GLint" or "GLsizei" or "GLfixed" => "int",
|
||||
"GLint64" => "long",
|
||||
"GLuint64" => "ulong",
|
||||
"GLshort" => "short",
|
||||
"GLbyte" => "sbyte",
|
||||
"GLubyte" => "byte",
|
||||
"GLushort" => "ushort",
|
||||
"GLfloat" => "float",
|
||||
"GLdouble" => "double",
|
||||
"GLclampf" or "GLclampd" => "float",
|
||||
"GLhalf" => "ushort",
|
||||
"GLclampf" => "float",
|
||||
"GLclampd" => "double",
|
||||
"GLintptr" => "nint",
|
||||
"GLsizeiptr" => "nuint",
|
||||
"GLsizeiptr" => "nint",
|
||||
"GLchar" => "byte",
|
||||
"GLsync" => "GLsync",
|
||||
_ => allowVoid && cType == "void" ? "void" : "IntPtr"
|
||||
"GLsync" => "glSync",
|
||||
"GLDEBUGPROC" => "IntPtr",
|
||||
"void" => "void",
|
||||
_ => throw new NotSupportedException($"Unsupported OpenGL C type: {cType}")
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace GenerateGL.CodeGen
|
||||
{
|
||||
@@ -69,6 +70,7 @@ namespace GenerateGL.CodeGen
|
||||
}
|
||||
Directory.CreateDirectory(_outputRoot);
|
||||
List<GlCommand> all = new List<GlCommand>();
|
||||
List<(string Version, List<GlCommand> Commands)> commandsByVersion = new();
|
||||
HashSet<string> previous = new HashSet<string>(StringComparer.Ordinal);
|
||||
foreach (string v in TargetVersions)
|
||||
{
|
||||
@@ -79,8 +81,15 @@ namespace GenerateGL.CodeGen
|
||||
previous.Add(cmd.Name);
|
||||
}
|
||||
all.AddRange(versionCmds);
|
||||
WriteOpenGLFunctionFile(v, versionCmds);
|
||||
WriteGlContextFile(v, versionCmds);
|
||||
commandsByVersion.Add((v, versionCmds));
|
||||
}
|
||||
|
||||
IReadOnlyDictionary<string, string> managedNames = ManagedNameResolver.Resolve(
|
||||
all.Where(ShouldGenerateWrapper));
|
||||
foreach ((string version, List<GlCommand> commands) in commandsByVersion)
|
||||
{
|
||||
WriteOpenGLFunctionFile(version, commands, managedNames);
|
||||
UniformOverloadEmitter.Write(_outputRoot, version, commands);
|
||||
}
|
||||
WriteMergedGlContextFile(all);
|
||||
WriteCommandHistoryFile(BuildCommandHistory());
|
||||
@@ -249,41 +258,7 @@ namespace GenerateGL.CodeGen
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
string fileName = Path.Combine(_outputRoot, "glCommandHistory.cs");
|
||||
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
|
||||
private void WriteGlContextFile(
|
||||
string version,
|
||||
IReadOnlyList<GlCommand> commands
|
||||
)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("// <auto-generated>");
|
||||
sb.AppendLine($"// Generated by StgSharp.GenerateGL on {DateTime.UtcNow.ToString("u", CultureInfo.InvariantCulture)}");
|
||||
sb.AppendLine($"// Version: {version}");
|
||||
sb.AppendLine("// </auto-generated>");
|
||||
sb.AppendLine("using System;\nusing System.Runtime.CompilerServices;\n");
|
||||
sb.AppendLine("namespace StgSharp.Graphics.OpenGL");
|
||||
sb.AppendLine("{");
|
||||
sb.AppendLine(" public unsafe partial struct OpenglContext");
|
||||
sb.AppendLine(" {");
|
||||
foreach (GlCommand cmd in commands.OrderBy(c => c!.Name, StringComparer.Ordinal))
|
||||
{
|
||||
string ret = CsTypeMapper.MapDelegateReturn(cmd.ReturnType, cmd.ReturnPointerLevel);
|
||||
List<string> paramTypes = new List<string>();
|
||||
foreach (GlParam p in cmd.Parameters)
|
||||
{
|
||||
string mapped = CsTypeMapper.MapDelegateParameter(p);
|
||||
paramTypes.Add(mapped);
|
||||
}
|
||||
string decl = DelegateSignature(ret, paramTypes);
|
||||
sb.AppendLine($" internal unsafe {decl} {cmd.Name};");
|
||||
}
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
string fileName = Path.Combine(_outputRoot, $"glContext.v{version.Replace('.', '_')}.cs");
|
||||
string fileName = Path.Combine(_outputRoot, "GlCommandHistory.g.cs");
|
||||
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
|
||||
@@ -322,13 +297,14 @@ namespace GenerateGL.CodeGen
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
string fileName = Path.Combine(_outputRoot, "glContext.cs");
|
||||
string fileName = Path.Combine(_outputRoot, "OpenglContext.g.cs");
|
||||
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
|
||||
private void WriteOpenGLFunctionFile(
|
||||
string version,
|
||||
IReadOnlyList<GlCommand> commands
|
||||
IReadOnlyList<GlCommand> commands,
|
||||
IReadOnlyDictionary<string, string> managedNames
|
||||
)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -341,33 +317,52 @@ namespace GenerateGL.CodeGen
|
||||
sb.AppendLine("{");
|
||||
sb.AppendLine(" public unsafe partial class OpenGLFunction");
|
||||
sb.AppendLine(" {");
|
||||
foreach (GlCommand cmd in commands.OrderBy(c => c!.Name, StringComparer.Ordinal))
|
||||
foreach (GlCommand cmd in commands.Where(ShouldGenerateWrapper)
|
||||
.OrderBy(c => c!.Name, StringComparer.Ordinal))
|
||||
{
|
||||
string ret = CsTypeMapper.MapReturn(cmd.ReturnType, cmd.ReturnPointerLevel);
|
||||
bool returnsHandle = CsTypeMapper.IsHandleReturn(cmd);
|
||||
string ret = returnsHandle
|
||||
? "GlHandle"
|
||||
: CsTypeMapper.MapReturn(cmd.ReturnType, cmd.ReturnPointerLevel);
|
||||
string rawName = cmd.Name; // original glXxx
|
||||
string methodName = TrimGlPrefix(rawName);
|
||||
string methodName = managedNames[rawName];
|
||||
ManagedCommandPlan commandPlan = ManagedCommandPlan.Create(cmd);
|
||||
List<string> paramList = new List<string>();
|
||||
List<string> callArgs = new List<string>();
|
||||
List<(string Type,string Name)> pinned = new();
|
||||
List<(string Type,string Name,bool IsOut)> pinned = new();
|
||||
foreach (ManagedParameterPlan parameterPlan in commandPlan.PublicParameters)
|
||||
{
|
||||
GlParam p = parameterPlan.Source;
|
||||
string pname = SafeName(p.Name);
|
||||
paramList.Add($"{parameterPlan.PublicType} {pname}");
|
||||
if (parameterPlan.IsSpan)
|
||||
{
|
||||
pinned.Add((parameterPlan.ElementType!, pname, false));
|
||||
} else if (parameterPlan.Kind == ManagedParameterKind.Out) {
|
||||
pinned.Add((parameterPlan.ElementType!, pname, true));
|
||||
}
|
||||
}
|
||||
foreach (GlParam p in cmd.Parameters)
|
||||
{
|
||||
string pname = SafeName(p.Name);
|
||||
if (CsTypeMapper.TryMapConstPointerToSpan(p, out string spanElementType))
|
||||
if (commandPlan.DerivedLengthSources.TryGetValue(
|
||||
p.Name, out string? sourceSpanName))
|
||||
{
|
||||
string nativeType = CsTypeMapper.MapParameter(p);
|
||||
callArgs.Add($"checked(({nativeType}){SafeName(sourceSpanName)}.Length)");
|
||||
continue;
|
||||
}
|
||||
|
||||
ManagedParameterPlan parameterPlan = commandPlan.GetParameter(p.Name);
|
||||
if (parameterPlan.IsSpan || parameterPlan.Kind == ManagedParameterKind.Out)
|
||||
{
|
||||
paramList.Add($"ReadOnlySpan<{spanElementType}> {pname}");
|
||||
pinned.Add((spanElementType, pname));
|
||||
callArgs.Add($"{pname}Ptr");
|
||||
} else if (parameterPlan.PublicType == "GlHandle")
|
||||
{
|
||||
callArgs.Add($"{pname}.Value");
|
||||
} else
|
||||
{
|
||||
string mapped = CsTypeMapper.MapParameter(p);
|
||||
paramList.Add($"{mapped} {pname}");
|
||||
if (mapped == "GlHandle")
|
||||
{
|
||||
callArgs.Add($"{pname}.Value");
|
||||
} else
|
||||
{
|
||||
callArgs.Add(pname);
|
||||
}
|
||||
callArgs.Add(pname);
|
||||
}
|
||||
}
|
||||
string signature = string.Join(", ", paramList);
|
||||
@@ -375,20 +370,29 @@ namespace GenerateGL.CodeGen
|
||||
sb.AppendLine($" [MethodImpl(MethodImplOptions.AggressiveInlining)]");
|
||||
sb.AppendLine($" public {ret} {methodName}({signature})");
|
||||
sb.AppendLine(" {");
|
||||
foreach ((string _, string name, bool isOut) in pinned.Where(p => p.IsOut)) {
|
||||
sb.AppendLine($" {name} = default;");
|
||||
}
|
||||
AppendSpanLengthGuards(sb, cmd, commandPlan);
|
||||
string prefix = ret == "void" ? string.Empty : "return ";
|
||||
string callExpression = $"Context.{rawName}({call})";
|
||||
if (returnsHandle) {
|
||||
callExpression = $"GlHandle.Create({callExpression})";
|
||||
}
|
||||
if (pinned.Count == 0)
|
||||
{
|
||||
sb.AppendLine($" {prefix}Context.{rawName}({call});");
|
||||
sb.AppendLine($" {prefix}{callExpression};");
|
||||
} else
|
||||
{
|
||||
string indent = " ";
|
||||
foreach ((string Type, string Name) pin in pinned)
|
||||
foreach ((string Type, string Name, bool IsOut) pin in pinned)
|
||||
{
|
||||
sb.AppendLine($"{indent}fixed ({pin.Type}* {pin.Name}Ptr = {pin.Name})");
|
||||
string pinSource = pin.IsOut ? $"&{pin.Name}" : pin.Name;
|
||||
sb.AppendLine($"{indent}fixed ({pin.Type}* {pin.Name}Ptr = {pinSource})");
|
||||
sb.AppendLine($"{indent}{{");
|
||||
indent += " ";
|
||||
}
|
||||
sb.AppendLine($"{indent}{prefix}Context.{rawName}({call});");
|
||||
sb.AppendLine($"{indent}{prefix}{callExpression};");
|
||||
for (int i = 0; i < pinned.Count; i++)
|
||||
{
|
||||
indent = indent.Substring(0, indent.Length - 4);
|
||||
@@ -401,10 +405,116 @@ namespace GenerateGL.CodeGen
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
string fileName = Path.Combine(_outputRoot, $"glFunction.v{version.Replace('.', '_')}.cs");
|
||||
string fileName = Path.Combine(
|
||||
_outputRoot,
|
||||
$"OpenGLFunction.Raw.v{version.Replace('.', '_')}.g.cs");
|
||||
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
|
||||
private static void AppendSpanLengthGuards(
|
||||
StringBuilder sb,
|
||||
GlCommand command,
|
||||
ManagedCommandPlan plan
|
||||
)
|
||||
{
|
||||
foreach ((string lengthName, string sourceName) in plan.DerivedLengthSources)
|
||||
{
|
||||
foreach (ManagedParameterPlan related in command.Parameters
|
||||
.Select(p => plan.GetParameter(p.Name))
|
||||
.Where(p => p.IsSpan && p.Source.Length == lengthName &&
|
||||
p.Source.Name != sourceName))
|
||||
{
|
||||
string relatedName = SafeName(related.Source.Name);
|
||||
string safeSourceName = SafeName(sourceName);
|
||||
sb.AppendLine($" if ({relatedName}.Length != {safeSourceName}.Length) {{");
|
||||
sb.AppendLine($" throw new ArgumentException(\"Span lengths controlled by {lengthName} must match.\", nameof({relatedName}));");
|
||||
sb.AppendLine(" }");
|
||||
}
|
||||
}
|
||||
|
||||
foreach (ManagedParameterPlan parameter in command.Parameters
|
||||
.Select(p => plan.GetParameter(p.Name)).Where(p => p.IsSpan))
|
||||
{
|
||||
string? expectedLength = BuildExpectedLengthExpression(parameter.Source, plan);
|
||||
if (expectedLength is null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
string parameterName = SafeName(parameter.Source.Name);
|
||||
sb.AppendLine($" if ({parameterName}.Length < {expectedLength}) {{");
|
||||
sb.AppendLine($" throw new ArgumentException(\"Span is shorter than the OpenGL length expression '{parameter.Source.Length}'.\", nameof({parameterName}));");
|
||||
sb.AppendLine(" }");
|
||||
}
|
||||
}
|
||||
|
||||
private static string? BuildExpectedLengthExpression(
|
||||
GlParam parameter,
|
||||
ManagedCommandPlan plan
|
||||
)
|
||||
{
|
||||
string length = parameter.Length?.Replace(" ", string.Empty,
|
||||
StringComparison.Ordinal) ?? string.Empty;
|
||||
if (length.Length == 0 || length.StartsWith("COMPSIZE(", StringComparison.Ordinal) ||
|
||||
plan.DerivedLengthSources.ContainsKey(length)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (int.TryParse(length, NumberStyles.None, CultureInfo.InvariantCulture,
|
||||
out int constantLength)) {
|
||||
return constantLength.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
ManagedParameterPlan? scalar = plan.PublicParameters.FirstOrDefault(p =>
|
||||
p.Source.PointerLevel == 0 && p.Source.Name == length);
|
||||
if (scalar is not null) {
|
||||
return $"checked((int){SafeName(length)})";
|
||||
}
|
||||
|
||||
Match multiply = Regex.Match(
|
||||
length, "^(?<name>[A-Za-z_][A-Za-z0-9_]*)\\*(?<factor>[0-9]+)$",
|
||||
RegexOptions.CultureInvariant);
|
||||
if (!multiply.Success) {
|
||||
multiply = Regex.Match(
|
||||
length, "^(?<factor>[0-9]+)\\*(?<name>[A-Za-z_][A-Za-z0-9_]*)$",
|
||||
RegexOptions.CultureInvariant);
|
||||
}
|
||||
if (multiply.Success) {
|
||||
return $"checked((int){SafeName(multiply.Groups["name"].Value)} * {multiply.Groups["factor"].Value})";
|
||||
}
|
||||
|
||||
Match divide = Regex.Match(
|
||||
length, "^(?<name>[A-Za-z_][A-Za-z0-9_]*)/(?<divisor>[0-9]+)$",
|
||||
RegexOptions.CultureInvariant);
|
||||
return divide.Success
|
||||
? $"checked((int){SafeName(divide.Groups["name"].Value)} / {divide.Groups["divisor"].Value})"
|
||||
: null;
|
||||
}
|
||||
|
||||
private bool ShouldGenerateWrapper(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
if (UniformOverloadEmitter.IsSetterCommand(command)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !IsRedundantVertexAttribVectorCommand(command);
|
||||
}
|
||||
|
||||
private bool IsRedundantVertexAttribVectorCommand(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
string name = command.Name;
|
||||
if (!name.StartsWith("glVertexAttrib", StringComparison.Ordinal) ||
|
||||
!name.EndsWith('v')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
string scalarCommandName = name.Substring(0, name.Length - 1);
|
||||
return _commands.ContainsKey(scalarCommandName);
|
||||
}
|
||||
|
||||
private enum CommandHistoryAction
|
||||
{
|
||||
|
||||
|
||||
@@ -101,7 +101,8 @@ namespace GenerateGL.CodeGen
|
||||
{
|
||||
string pName = p.Element("name")?.Value ?? string.Empty;
|
||||
string cType = BuildCType(p, out int pointerLevel, out _, out bool isConst);
|
||||
parameters.Add(new GlParam(pName, cType, pointerLevel, isConst));
|
||||
string? length = p.Attribute("len")?.Value;
|
||||
parameters.Add(new GlParam(pName, cType, pointerLevel, isConst, length));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(name)) {
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------
|
||||
// file="ManagedNameResolver"
|
||||
// Project: StgSharp
|
||||
// Copyright (c) Nitload.
|
||||
// SPDX-License-Identifier: MIT
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace GenerateGL.CodeGen
|
||||
{
|
||||
internal static partial class ManagedNameResolver
|
||||
{
|
||||
|
||||
private static readonly HashSet<string> TypedSuffixFamilies = new(
|
||||
StringComparer.Ordinal) {
|
||||
"ClearBuffer", "ClearNamedFramebuffer", "GetBufferParameter",
|
||||
"GetNamedBufferParameter", "GetQueryBufferObject", "GetQueryObject",
|
||||
"GetSamplerParameter", "GetTexLevelParameter", "GetTexParameter",
|
||||
"GetTextureLevelParameter", "GetTextureParameter", "GetUniform", "GetnUniform",
|
||||
"GetVertexAttrib", "PatchParameter", "PixelStore", "PointParameter",
|
||||
"SamplerParameter", "TexParameter", "TextureParameter"
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, string[]> ExactCandidates =
|
||||
new Dictionary<string, string[]>(StringComparer.Ordinal) {
|
||||
{ "BlendEquationi", [ "BlendEquation" ] },
|
||||
{ "BlendEquationSeparatei", [ "BlendEquationSeparate" ] },
|
||||
{ "BlendFunci", [ "BlendFunc" ] },
|
||||
{ "BlendFuncSeparatei", [ "BlendFuncSeparate" ] },
|
||||
{ "ClearDepthf", [ "ClearDepth" ] },
|
||||
{ "ColorMaski", [ "ColorMask" ] },
|
||||
{ "DepthRangef", [ "DepthRange" ] },
|
||||
{ "Disablei", [ "Disable" ] },
|
||||
{ "Enablei", [ "Enable" ] },
|
||||
{ "FramebufferParameteri", [ "FramebufferParameter" ] },
|
||||
{ "GetStringi", [ "GetString" ] },
|
||||
{ "IsEnabledi", [ "IsEnabled" ] },
|
||||
{ "NamedFramebufferParameteri", [ "NamedFramebufferParameter" ] },
|
||||
{ "ProgramParameteri", [ "ProgramParameter" ] },
|
||||
{ "ScissorIndexedv", [ "ScissorIndexed" ] },
|
||||
{ "ViewportIndexedf", [ "ViewportIndexed" ] },
|
||||
{ "ViewportIndexedfv", [ "ViewportIndexed" ] }
|
||||
};
|
||||
|
||||
public static IReadOnlyDictionary<string, string> Resolve(
|
||||
IEnumerable<GlCommand> commands
|
||||
)
|
||||
{
|
||||
Dictionary<string, string> result = new(StringComparer.Ordinal);
|
||||
HashSet<string> usedSignatures = new(StringComparer.Ordinal);
|
||||
|
||||
foreach (GlCommand command in commands.OrderBy(c => c.Name, StringComparer.Ordinal))
|
||||
{
|
||||
string signature = BuildParameterSignature(command);
|
||||
foreach (string candidate in GetCandidates(command.Name))
|
||||
{
|
||||
if (usedSignatures.Add($"{candidate}({signature})"))
|
||||
{
|
||||
result.Add(command.Name, candidate);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string BuildParameterSignature(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
ManagedCommandPlan plan = ManagedCommandPlan.Create(command);
|
||||
return string.Join(",", plan.PublicParameters.Select(p => p.PublicType));
|
||||
}
|
||||
|
||||
private static IEnumerable<string> GetCandidates(
|
||||
string glName
|
||||
)
|
||||
{
|
||||
string name = TrimGlPrefix(glName);
|
||||
|
||||
Match vertexAttrib = VertexAttribRegex().Match(name);
|
||||
if (vertexAttrib.Success)
|
||||
{
|
||||
string stem = vertexAttrib.Groups[1].Value;
|
||||
string dimension = vertexAttrib.Groups[2].Value;
|
||||
bool normalized = vertexAttrib.Groups[3].Success;
|
||||
yield return normalized ? $"{stem}Normalized" : stem;
|
||||
yield return normalized ? $"{stem}{dimension}Normalized" : $"{stem}{dimension}";
|
||||
yield return name;
|
||||
yield break;
|
||||
}
|
||||
|
||||
Match typed = TypedSuffixRegex().Match(name);
|
||||
if (typed.Success && TypedSuffixFamilies.Contains(typed.Groups[1].Value))
|
||||
{
|
||||
string stem = typed.Groups[1].Value;
|
||||
string suffix = typed.Groups[2].Value;
|
||||
if (suffix.StartsWith('I')) {
|
||||
yield return $"{stem}I";
|
||||
}
|
||||
yield return stem;
|
||||
yield return name;
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (ExactCandidates.TryGetValue(name, out string[]? candidates))
|
||||
{
|
||||
foreach (string candidate in candidates) {
|
||||
yield return candidate;
|
||||
}
|
||||
}
|
||||
|
||||
yield return name;
|
||||
}
|
||||
|
||||
private static string TrimGlPrefix(
|
||||
string name
|
||||
)
|
||||
{
|
||||
return name.StartsWith("gl", StringComparison.Ordinal) && name.Length > 2
|
||||
? name.Substring(2)
|
||||
: name;
|
||||
}
|
||||
|
||||
[GeneratedRegex("^(VertexAttrib(?:I|L|P)?)([1-4])(N)?(?:ui|ub|us|i|b|s|f|d)(v)?$",
|
||||
RegexOptions.CultureInvariant)]
|
||||
private static partial Regex VertexAttribRegex();
|
||||
|
||||
[GeneratedRegex("^(.+?)(Iuiv|Iiv|ui64v|i64v|uiv|ui|iv|fi|i|fv|f|dv|d)$",
|
||||
RegexOptions.CultureInvariant)]
|
||||
private static partial Regex TypedSuffixRegex();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------
|
||||
// file="ManagedParameterPlanner"
|
||||
// Project: StgSharp
|
||||
// Copyright (c) Nitload.
|
||||
// SPDX-License-Identifier: MIT
|
||||
// -----------------------------------------------------------------------
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace GenerateGL.CodeGen
|
||||
{
|
||||
internal enum ManagedParameterKind
|
||||
{
|
||||
|
||||
Value,
|
||||
RawPointer,
|
||||
ReadOnlySpan,
|
||||
Span,
|
||||
Out
|
||||
|
||||
}
|
||||
|
||||
internal sealed record ManagedParameterPlan(
|
||||
GlParam Source,
|
||||
string PublicType,
|
||||
ManagedParameterKind Kind,
|
||||
string? ElementType
|
||||
)
|
||||
{
|
||||
|
||||
public bool IsSpan => Kind is ManagedParameterKind.ReadOnlySpan or
|
||||
ManagedParameterKind.Span;
|
||||
|
||||
}
|
||||
|
||||
internal sealed class ManagedCommandPlan
|
||||
{
|
||||
|
||||
private readonly Dictionary<string, ManagedParameterPlan> _allParameters;
|
||||
private readonly Dictionary<string, string> _derivedLengthSources;
|
||||
|
||||
private ManagedCommandPlan(
|
||||
IReadOnlyList<ManagedParameterPlan> publicParameters,
|
||||
Dictionary<string, ManagedParameterPlan> allParameters,
|
||||
Dictionary<string, string> derivedLengthSources
|
||||
)
|
||||
{
|
||||
PublicParameters = publicParameters;
|
||||
_allParameters = allParameters;
|
||||
_derivedLengthSources = derivedLengthSources;
|
||||
}
|
||||
|
||||
public IReadOnlyList<ManagedParameterPlan> PublicParameters { get; }
|
||||
|
||||
public IReadOnlyDictionary<string, string> DerivedLengthSources =>
|
||||
_derivedLengthSources;
|
||||
|
||||
public static ManagedCommandPlan Create(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
Dictionary<string, ManagedParameterPlan> all = new(StringComparer.Ordinal);
|
||||
foreach (GlParam parameter in command.Parameters)
|
||||
{
|
||||
ManagedParameterPlan plan;
|
||||
if (CsTypeMapper.TryMapPointerElement(parameter, out string elementType) &&
|
||||
(parameter.IsConst || !string.IsNullOrWhiteSpace(parameter.Length) ||
|
||||
command.Name.StartsWith("glGet", StringComparison.Ordinal)))
|
||||
{
|
||||
if (!parameter.IsConst && parameter.Length == "1")
|
||||
{
|
||||
plan = new ManagedParameterPlan(
|
||||
parameter, $"out {elementType}", ManagedParameterKind.Out,
|
||||
elementType);
|
||||
} else
|
||||
{
|
||||
ManagedParameterKind kind = parameter.IsConst
|
||||
? ManagedParameterKind.ReadOnlySpan
|
||||
: ManagedParameterKind.Span;
|
||||
string container = parameter.IsConst ? "ReadOnlySpan" : "Span";
|
||||
plan = new ManagedParameterPlan(
|
||||
parameter, $"{container}<{elementType}>", kind, elementType);
|
||||
}
|
||||
} else
|
||||
{
|
||||
string mapped = CsTypeMapper.MapParameter(parameter);
|
||||
ManagedParameterKind kind = parameter.PointerLevel == 0
|
||||
? ManagedParameterKind.Value
|
||||
: ManagedParameterKind.RawPointer;
|
||||
plan = new ManagedParameterPlan(parameter, mapped, kind, null);
|
||||
}
|
||||
all.Add(parameter.Name, plan);
|
||||
}
|
||||
|
||||
Dictionary<string, string> derivedLengths = new(StringComparer.Ordinal);
|
||||
foreach (GlParam scalar in command.Parameters.Where(p => p.PointerLevel == 0))
|
||||
{
|
||||
List<ManagedParameterPlan> spans = command.Parameters
|
||||
.Select(p => all[p.Name])
|
||||
.Where(p => p.IsSpan &&
|
||||
string.Equals(p.Source.Length, scalar.Name,
|
||||
StringComparison.Ordinal))
|
||||
.ToList();
|
||||
if (spans.Count == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
bool lengthAlsoControlsRawPointer = command.Parameters
|
||||
.Select(p => all[p.Name]).Any(p =>
|
||||
p.Kind == ManagedParameterKind.RawPointer &&
|
||||
string.Equals(p.Source.Length, scalar.Name, StringComparison.Ordinal));
|
||||
if (lengthAlsoControlsRawPointer) {
|
||||
continue;
|
||||
}
|
||||
|
||||
string scalarType = all[scalar.Name].PublicType;
|
||||
if (scalarType is not ("int" or "uint" or "nint" or "nuint")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
derivedLengths.Add(scalar.Name, spans[0].Source.Name);
|
||||
}
|
||||
|
||||
IReadOnlyList<ManagedParameterPlan> publicParameters = command.Parameters
|
||||
.Where(p => !derivedLengths.ContainsKey(p.Name))
|
||||
.Select(p => all[p.Name])
|
||||
.ToArray();
|
||||
return new ManagedCommandPlan(publicParameters, all, derivedLengths);
|
||||
}
|
||||
|
||||
public ManagedParameterPlan GetParameter(
|
||||
string name
|
||||
) => _allParameters[name];
|
||||
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,8 @@ namespace GenerateGL.CodeGen
|
||||
string Name,
|
||||
string CType,
|
||||
int PointerLevel,
|
||||
bool IsConst
|
||||
bool IsConst,
|
||||
string? Length
|
||||
)
|
||||
{
|
||||
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------
|
||||
// file="UniformOverloadEmitter"
|
||||
// Project: StgSharp
|
||||
// Copyright (c) Nitload.
|
||||
// SPDX-License-Identifier: MIT
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
#pragma warning disable CA1305
|
||||
|
||||
namespace GenerateGL.CodeGen
|
||||
{
|
||||
internal static partial class UniformOverloadEmitter
|
||||
{
|
||||
|
||||
public static bool IsValueCommand(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
return ValueCommandRegex().IsMatch(command.Name);
|
||||
}
|
||||
|
||||
public static bool IsSetterCommand(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
return IsValueCommand(command) || MatrixCommandRegex().IsMatch(command.Name);
|
||||
}
|
||||
|
||||
public static void Write(
|
||||
string outputRoot,
|
||||
string version,
|
||||
IReadOnlyList<GlCommand> commands
|
||||
)
|
||||
{
|
||||
List<GlCommand> valueCommands = commands.Where(IsValueCommand)
|
||||
.OrderBy(c => c.Name, StringComparer.Ordinal)
|
||||
.ToList();
|
||||
List<GlCommand> matrixConvenienceCommands = commands
|
||||
.Where(c => Matrix4FloatCommandRegex().IsMatch(c.Name))
|
||||
.OrderBy(c => c.Name, StringComparer.Ordinal)
|
||||
.ToList();
|
||||
|
||||
if (valueCommands.Count == 0 && matrixConvenienceCommands.Count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder sb = new();
|
||||
sb.AppendLine("// <auto-generated>");
|
||||
sb.AppendLine($"// Generated by StgSharp.GenerateGL on {DateTime.UtcNow.ToString("u", CultureInfo.InvariantCulture)}");
|
||||
sb.AppendLine($"// Uniform overloads introduced in OpenGL {version}");
|
||||
sb.AppendLine("// </auto-generated>");
|
||||
sb.AppendLine("using System;");
|
||||
sb.AppendLine("using System.Runtime.CompilerServices;");
|
||||
sb.AppendLine("using StgSharp.Mathematics.Graphics;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("namespace StgSharp.Graphics.OpenGL");
|
||||
sb.AppendLine("{");
|
||||
sb.AppendLine(" public unsafe partial class OpenGLFunction");
|
||||
sb.AppendLine(" {");
|
||||
|
||||
foreach (GlCommand command in valueCommands) {
|
||||
EmitValueOverload(sb, command);
|
||||
}
|
||||
foreach (GlCommand command in valueCommands.Where(IsFloatVectorCommand)) {
|
||||
EmitVectorConvenienceOverload(sb, command);
|
||||
}
|
||||
foreach (GlCommand command in matrixConvenienceCommands) {
|
||||
EmitMatrixConvenienceOverload(sb, command);
|
||||
}
|
||||
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
string fileName = Path.Combine(
|
||||
outputRoot,
|
||||
$"OpenGLFunction.Uniform.v{version.Replace('.', '_')}.g.cs");
|
||||
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
|
||||
private static void EmitValueOverload(
|
||||
StringBuilder sb,
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
Match match = ValueCommandRegex().Match(command.Name);
|
||||
bool hasProgram = match.Groups[1].Success;
|
||||
int dimension = int.Parse(match.Groups[2].Value, CultureInfo.InvariantCulture);
|
||||
string scalarType = MapScalarType(match.Groups[3].Value);
|
||||
bool isVector = match.Groups[4].Success;
|
||||
string uniformType = $"Uniform<{string.Join(", ", Enumerable.Repeat(scalarType, dimension))}>";
|
||||
|
||||
sb.AppendLine(" [MethodImpl(MethodImplOptions.AggressiveInlining)]");
|
||||
if (isVector)
|
||||
{
|
||||
string programParameter = hasProgram ? "GlHandle program, " : string.Empty;
|
||||
sb.AppendLine($" public void SetUniformValue({programParameter}{uniformType} uniform, ReadOnlySpan<{scalarType}> values)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" ArgumentNullException.ThrowIfNull(uniform);");
|
||||
if (dimension > 1)
|
||||
{
|
||||
sb.AppendLine($" if ((values.Length % {dimension}) != 0) {{");
|
||||
sb.AppendLine($" throw new ArgumentException(\"Uniform data length must be divisible by {dimension}.\", nameof(values));");
|
||||
sb.AppendLine(" }");
|
||||
}
|
||||
sb.AppendLine($" fixed ({scalarType}* valuesPtr = values) {{");
|
||||
string count = dimension == 1 ? "values.Length" : $"values.Length / {dimension}";
|
||||
sb.AppendLine($" Context.{command.Name}({BuildPrefixArguments(hasProgram)}{count}, valuesPtr);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" }");
|
||||
} else
|
||||
{
|
||||
string programParameter = hasProgram ? "GlHandle program, " : string.Empty;
|
||||
string values = string.Join(", ", Enumerable.Range(0, dimension)
|
||||
.Select(i => $"{scalarType} v{i}"));
|
||||
string valueArguments = string.Join(", ", Enumerable.Range(0, dimension)
|
||||
.Select(i => $"v{i}"));
|
||||
sb.AppendLine($" public void SetUniformValue({programParameter}{uniformType} uniform, {values})");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" ArgumentNullException.ThrowIfNull(uniform);");
|
||||
sb.AppendLine($" Context.{command.Name}({BuildPrefixArguments(hasProgram)}{valueArguments});");
|
||||
sb.AppendLine(" }");
|
||||
}
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
private static void EmitVectorConvenienceOverload(
|
||||
StringBuilder sb,
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
Match match = ValueCommandRegex().Match(command.Name);
|
||||
bool hasProgram = match.Groups[1].Success;
|
||||
int dimension = int.Parse(match.Groups[2].Value, CultureInfo.InvariantCulture);
|
||||
if (dimension < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
string vectorType = $"Vec{dimension}";
|
||||
string programParameter = hasProgram ? "GlHandle program, " : string.Empty;
|
||||
sb.AppendLine(" [MethodImpl(MethodImplOptions.AggressiveInlining)]");
|
||||
sb.AppendLine($" public void SetUniformValue({programParameter}Uniform<{vectorType}> uniform, {vectorType} value)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" ArgumentNullException.ThrowIfNull(uniform);");
|
||||
sb.AppendLine($" Context.{command.Name}({BuildPrefixArguments(hasProgram)}1, (float*)&value);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
private static void EmitMatrixConvenienceOverload(
|
||||
StringBuilder sb,
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
bool hasProgram = command.Name.StartsWith("glProgram", StringComparison.Ordinal);
|
||||
string programParameter = hasProgram ? "GlHandle program, " : string.Empty;
|
||||
sb.AppendLine(" [MethodImpl(MethodImplOptions.AggressiveInlining)]");
|
||||
sb.AppendLine($" public void SetUniformValue({programParameter}Uniform<GraphicsMatrix> uniform, GraphicsMatrix value, bool transpose = false)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" ArgumentNullException.ThrowIfNull(uniform);");
|
||||
sb.AppendLine($" Context.{command.Name}({BuildPrefixArguments(hasProgram)}1, transpose ? (byte)1 : (byte)0, (float*)&value);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
private static string BuildPrefixArguments(
|
||||
bool hasProgram
|
||||
)
|
||||
{
|
||||
return hasProgram
|
||||
? "program.Value, uniform.id.SignedValue, "
|
||||
: "uniform.id.SignedValue, ";
|
||||
}
|
||||
|
||||
private static bool IsFloatVectorCommand(
|
||||
GlCommand command
|
||||
)
|
||||
{
|
||||
Match match = ValueCommandRegex().Match(command.Name);
|
||||
return match.Success && match.Groups[3].Value == "f" && match.Groups[4].Success;
|
||||
}
|
||||
|
||||
private static string MapScalarType(
|
||||
string suffix
|
||||
)
|
||||
{
|
||||
return suffix switch
|
||||
{
|
||||
"f" => "float",
|
||||
"d" => "double",
|
||||
"i" => "int",
|
||||
"ui" => "uint",
|
||||
_ => throw new InvalidOperationException($"Unsupported uniform suffix: {suffix}")
|
||||
};
|
||||
}
|
||||
|
||||
[GeneratedRegex("^gl(Program)?Uniform([1-4])(ui|[fdi])(v)?$",
|
||||
RegexOptions.CultureInvariant)]
|
||||
private static partial Regex ValueCommandRegex();
|
||||
|
||||
[GeneratedRegex("^gl(?:Program)?UniformMatrix4fv$", RegexOptions.CultureInvariant)]
|
||||
private static partial Regex Matrix4FloatCommandRegex();
|
||||
|
||||
[GeneratedRegex("^gl(?:Program)?UniformMatrix[234](?:x[234])?[fd]v$",
|
||||
RegexOptions.CultureInvariant)]
|
||||
private static partial Regex MatrixCommandRegex();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning restore CA1305
|
||||
@@ -2,6 +2,31 @@
|
||||
|
||||
评估日期:2026-08-24
|
||||
|
||||
## 实施状态(2026-08-25)
|
||||
|
||||
已完成第一轮无公开 API 破坏的文件整理:
|
||||
|
||||
- 手写 `OpenGLFunction` 已拆分到 `src/StgSharp.Graphics/OpenGL/Api`;
|
||||
- 版本 Raw wrapper 已移动到 `src/StgSharp.Graphics/OpenGL/Generated` 并使用 `.g.cs` 后缀;
|
||||
- `OpenglContext` 已移动为 `Generated/OpenglContext.g.cs`;
|
||||
- `SetUniformValue` 已从 Uniform 模型文件移动到 `Api/OpenGLFunction.Uniform.cs`;
|
||||
- Texture Unit 状态已移动到 `Api/OpenGLFunction.TextureUnits.cs`;
|
||||
- 已修复两个 `Vec4` overload 对 `glUniform1fv` 的错误调用,现调用 `glUniform4fv(location, 1, ...)`;
|
||||
- GenerateGL 已改为只生成一个合并 Context,Raw wrapper 继续按版本输出;
|
||||
- GenerateGL 输出文件名已与新的 `Generated` 目录约定对齐。
|
||||
|
||||
第二轮生成器实验已经完成并输出到 `test/StgSharp.GenerateGL/Generated`:
|
||||
|
||||
- `glUniform1/2/3/4[f|i|ui|d][v]` 与 `glProgramUniform*` 已生成为 `SetUniformValue(...)` 重载;
|
||||
- 已生成 scalar、`ReadOnlySpan<T>`、`Vec2/3/4` 和 `GraphicsMatrix` 入口;
|
||||
- 所有 uniform setter 已从 Raw wrapper 排除;没有对应托管矩阵类型的形状暂时只存在于 `OpenglContext`;
|
||||
- TexParameter、SamplerParameter、VertexAttrib、ClearBuffer 及 indexed API 等可由 C# 参数签名区分的函数已归并重载;
|
||||
- 归并发生签名冲突时,生成器会保留必要的维度或语义尾缀;
|
||||
- `OpenglContext` 仍保持纯 ABI 函数指针表,`GlHandle` 暂不拆分;
|
||||
- 已移除“参数名为 type 就映射为 ShaderType”的不安全启发式规则。
|
||||
|
||||
Loader/ContextShadow 合并、BufferObject 专项生成和生成快照测试尚未实施。
|
||||
|
||||
## 1. 评估目的
|
||||
|
||||
本文评估 `StgSharp.GenerateGL` 与 `src/StgSharp.Graphics` 当前 OpenGL 绑定代码之间的关系,重点回答以下问题:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 目标与范围
|
||||
- **输入**:Khronos OpenGL Registry `gl.xml`(Core Profile 为主,版本 3.3→4.6,可选扩展)。
|
||||
- **输出**:分版本 partial `glContext`(`delegate*` 字段)与 `OpenGLFunction` 包装方法(调用 `Context.glXxx`),以及新增常量/枚举补全文件,写入 `StgSharp.Common\Graphics\OpenGL\Generated\`。不改动现有手写文件。
|
||||
- **输出**:合并的 partial `OpenglContext`(`delegate*` 字段)、分版本 `OpenGLFunction` 薄包装方法,以及按版本生成的 Uniform 语义重载。生成结果最终对应 `src\StgSharp.Graphics\OpenGL\Generated\`,评审时可以通过命令行参数输出到独立目录。
|
||||
- **风格**:保持现有函数指针字段 + 薄封装方法模式;兼容现有命名和类型定义(如 `GlHandle`)。
|
||||
|
||||
---
|
||||
@@ -21,27 +21,41 @@
|
||||
## 阶段 2:类型映射与句柄规则
|
||||
- 整数:`GLenum`/`GLbitfield`→`uint`;`GLint`/`GLsizei`/`GLfixed`→`int`;`GLuint`→`uint`;`GLboolean`→`byte`(包装层可 bool→byte)。
|
||||
- 浮点:`GLfloat`→`float`;`GLdouble`→`double`。
|
||||
- 指针与尺寸:`void*`/`const void*`→`void*`;`GLintptr`→`nint`/`IntPtr`;`GLsizeiptr`/`size_t`→`nuint`/`UIntPtr`;`GLsync`→现有 `GLsync`/`IntPtr` 包装。
|
||||
- 字符串:`const GLchar*`→`byte*`(UTF-8),包装层可另行提供 string/Span<byte> 重载。
|
||||
- 指针与尺寸:`void*`/`const void*`→`void*`;`GLintptr`、`GLsizeiptr`→`nint`;`GLsync`→现有 `glSync` 包装。`GLint64`/`GLuint64` 分别映射为 `long`/`ulong`。回调类型 `GLDEBUGPROC` 暂以指针大小的 `IntPtr` 表示。
|
||||
- 未知 C 类型直接终止生成,不再静默回退为 `IntPtr`。这可以防止 typedef 漏映射后生成 ABI 不兼容的函数指针。
|
||||
- 字符串:函数表中的 `GLchar*` 保持 `byte*` ABI;包装层的 const 单指针使用 UTF-8 `ReadOnlySpan<byte>`,后续可另行提供 `string` 重载。
|
||||
- 参数长度:解析并保留 registry `<param len="...">`。包装层以该表达式判断数组方向、固定长度和关联的 `count`/`bufSize` 参数;底层函数表不使用这些托管规则。
|
||||
- 调用约定:OpenGL APIENTRY 通常 stdcall(Windows);保持与现有 `glContext` 字段一致(`delegate* unmanaged[Stdcall]` 或 `unmanaged[Cdecl]`,需与 loader 对齐)。
|
||||
- 句柄识别:包含 program/shader/buffer/texture/framebuffer/renderbuffer/vertexarray/query/sampler/transformfeedback 等对象名的 `GLuint` 参数 → 包装层使用 `GlHandle`,内部传 `handle.Value`。
|
||||
- 句柄识别:包含 program/shader/buffer/texture/framebuffer/renderbuffer/vertexarray/query/sampler/transformfeedback 等对象名的 `GLuint` 参数 → 包装层使用 `GlHandle`,内部传 `handle.Value`。`glCreateProgram`、`glCreateShader` 等明确返回 object name 的命令返回 `GlHandle`。
|
||||
- `GLenum` 不再仅凭参数名 `type` 推断为 `ShaderType`;低层包装保持 `uint`,避免把像素类型、索引类型等无关参数错误分类。
|
||||
- glGet* 输出:保留指针签名,或另行生成 unsafe Span/stackalloc 适配器;核心先生成指针版。
|
||||
|
||||
---
|
||||
|
||||
## 阶段 3:版本分组与文件组织
|
||||
- 输出目录:`StgSharp.Common\Graphics\OpenGL\Generated\`
|
||||
- 每个版本生成独立 partial:
|
||||
- `glContext.v33.cs`, `glContext.v40.cs`, …, `glContext.v46.cs`:`delegate*` 字段。
|
||||
- `OpenGLFunction.v33.cs`, …:包装方法 `public void Foo(...) => Context.glFoo(...);`
|
||||
- 目标目录:`src\StgSharp.Graphics\OpenGL\Generated\`
|
||||
- Context 生成一个合并文件:
|
||||
- `OpenglContext.g.cs`:所有目标 Core 版本需要的 `delegate*` 字段。
|
||||
- Raw 包装按版本生成独立 partial:
|
||||
- `OpenGLFunction.Raw.v3_3.g.cs`, …:包装方法 `public void Foo(...) => Context.glFoo(...);`
|
||||
- Uniform 重载按首次引入版本生成:
|
||||
- `OpenGLFunction.Uniform.v3_3.g.cs`、`v4_0`、`v4_1`。
|
||||
- 不再同时生成分版本 Context 与合并 Context,避免同一字段被 partial struct 重复定义。
|
||||
- 常量/枚举:`glConst.generated.cs`(或分版本补丁),避免与现有重复,先查已有定义再生成。
|
||||
- 命名空间:`StgSharp.Graphics.OpenGL`;类声明:`partial struct/partial class glContext`(按现有定义),`partial class OpenGLFunction`。
|
||||
|
||||
---
|
||||
|
||||
## 阶段 4:生成规则(函数表与包装)
|
||||
- `glContext` 字段:`internal unsafe delegate*<converted_sig> glFoo;`
|
||||
- `OpenglContext` 字段:`internal unsafe delegate*<converted_sig> glFoo;`
|
||||
- `OpenGLFunction` 包装:薄封装直接转发;句柄参数用 `GlHandle`,内部传 `handle.Value`;`bool` 参数按底层 `GLboolean` 需要转换为 `byte/uint`。
|
||||
- 指针包装:带长度的 `const T*` 生成 `ReadOnlySpan<T>`,输出 `T*` 生成 `Span<T>`,`len="1"` 的输出生成 `out T`。可由单个 Span 唯一决定的 `count`/`n`/`bufSize` 从 `Span.Length` 推导;共享同一长度的输入 Span 会检查长度一致。简单常量、乘法和除法长度表达式会生成下限检查。
|
||||
- registry 中省略 `len` 的零结尾 const 字符指针仍生成 `ReadOnlySpan<byte>`;省略 `len` 的 `glGet*` 数值单指针按未知长度输出生成 `Span<T>`。`void*`、二级指针、驱动拥有的返回指针以及表示 Buffer 偏移的指针继续保留原始形式。
|
||||
- 可重载的 C 类型尾缀会折叠为同一 C# 方法名,例如 `TexParameterf/i/fv/iv` → `TexParameter(...)`,`BlendEquation/BlendEquationi` → `BlendEquation(...)`。生成器以最终 C# 参数签名检测冲突;无法区分时保留最少的维度或语义尾缀。
|
||||
- `glUniform1/2/3/4[f|i|ui|d][v]` 和 `glProgramUniform*` 不再作为一组公开的 C 风格方法生成,而是生成 `SetUniformValue(...)` 重载。location 从 `Uniform<T...>.id.SignedValue` 取得;数组版本接受 `ReadOnlySpan<T>` 并自动计算 count。
|
||||
- float vector 额外生成 `Vec2`、`Vec3`、`Vec4` 重载,4×4 float matrix 生成 `GraphicsMatrix` 重载。所有 uniform setter(包括 matrix)都不进入 Raw wrapper;项目暂时没有对应托管类型的其他矩阵形状只保留底层 `OpenglContext` 函数指针,待类型齐备后再生成公开重载。
|
||||
- `glVertexAttribN*v` 若存在对应的标量命令 `glVertexAttribN*`,不再生成重复的 Span wrapper;公开 API 使用 `VertexAttrib(index, x, y, z, w)` 形式的固定分量重载。只有不存在标量等价命令的特殊整数/归一化形式才暂时保留独立入口。
|
||||
- `FramebufferTexture1D/2D/3D` 表示不同 OpenGL API,不参与维度重载归并。
|
||||
- 去重:若同名字段/方法已存在,跳过或比对签名避免重复生成。
|
||||
|
||||
---
|
||||
@@ -69,3 +83,11 @@
|
||||
2. 搭建增量生成器骨架:Parse → Filter → Emit。
|
||||
3. 先生成 3.3 子集验证编译,再扩展到 4.6。
|
||||
4. 按需追加扩展(ARB/KHR),保持可配置启用列表。
|
||||
|
||||
## 本地评审输出
|
||||
|
||||
可把首个命令行参数作为输出目录:
|
||||
|
||||
```powershell
|
||||
dotnet run --project test\StgSharp.GenerateGL\GenerateGL.csproj -- test\StgSharp.GenerateGL\Generated
|
||||
```
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Generated\**\*.cs" />
|
||||
<None Include="Generated\**\*.cs" />
|
||||
<None Update="xml\**" CopyToOutputDirectory="Always" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,238 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.0
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BeginQueryIndexed(uint target, uint index, uint id)
|
||||
{
|
||||
Context.glBeginQueryIndexed(target, index, id);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindTransformFeedback(uint target, uint id)
|
||||
{
|
||||
Context.glBindTransformFeedback(target, id);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BlendEquationSeparate(uint buf, uint modeRGB, uint modeAlpha)
|
||||
{
|
||||
Context.glBlendEquationSeparatei(buf, modeRGB, modeAlpha);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BlendEquation(uint buf, uint mode)
|
||||
{
|
||||
Context.glBlendEquationi(buf, mode);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BlendFuncSeparate(uint buf, uint srcRGB, uint dstRGB, uint srcAlpha, uint dstAlpha)
|
||||
{
|
||||
Context.glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BlendFunc(uint buf, uint src, uint dst)
|
||||
{
|
||||
Context.glBlendFunci(buf, src, dst);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DeleteTransformFeedbacks(ReadOnlySpan<uint> ids)
|
||||
{
|
||||
fixed (uint* idsPtr = ids)
|
||||
{
|
||||
Context.glDeleteTransformFeedbacks(checked((int)ids.Length), idsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawArraysIndirect(uint mode, void* indirect)
|
||||
{
|
||||
Context.glDrawArraysIndirect(mode, indirect);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawElementsIndirect(uint mode, uint type, void* indirect)
|
||||
{
|
||||
Context.glDrawElementsIndirect(mode, type, indirect);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawTransformFeedback(uint mode, uint id)
|
||||
{
|
||||
Context.glDrawTransformFeedback(mode, id);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawTransformFeedbackStream(uint mode, uint id, uint stream)
|
||||
{
|
||||
Context.glDrawTransformFeedbackStream(mode, id, stream);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void EndQueryIndexed(uint target, uint index)
|
||||
{
|
||||
Context.glEndQueryIndexed(target, index);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GenTransformFeedbacks(Span<uint> ids)
|
||||
{
|
||||
fixed (uint* idsPtr = ids)
|
||||
{
|
||||
Context.glGenTransformFeedbacks(checked((int)ids.Length), idsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetActiveSubroutineName(GlHandle program, uint shadertype, uint index, out int length, Span<byte> name)
|
||||
{
|
||||
length = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
Context.glGetActiveSubroutineName(program.Value, shadertype, index, checked((int)name.Length), lengthPtr, namePtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetActiveSubroutineUniformName(GlHandle program, uint shadertype, uint index, out int length, Span<byte> name)
|
||||
{
|
||||
length = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
Context.glGetActiveSubroutineUniformName(program.Value, shadertype, index, checked((int)name.Length), lengthPtr, namePtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetActiveSubroutineUniformiv(GlHandle program, uint shadertype, uint index, uint pname, Span<int> values)
|
||||
{
|
||||
fixed (int* valuesPtr = values)
|
||||
{
|
||||
Context.glGetActiveSubroutineUniformiv(program.Value, shadertype, index, pname, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramStageiv(GlHandle program, uint shadertype, uint pname, out int values)
|
||||
{
|
||||
values = default;
|
||||
fixed (int* valuesPtr = &values)
|
||||
{
|
||||
Context.glGetProgramStageiv(program.Value, shadertype, pname, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetQueryIndexediv(uint target, uint index, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetQueryIndexediv(target, index, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public uint GetSubroutineIndex(GlHandle program, uint shadertype, ReadOnlySpan<byte> name)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
return Context.glGetSubroutineIndex(program.Value, shadertype, namePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public int GetSubroutineUniformLocation(GlHandle program, uint shadertype, ReadOnlySpan<byte> name)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
return Context.glGetSubroutineUniformLocation(program.Value, shadertype, namePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetUniformSubroutineuiv(uint shadertype, int location, out uint @params)
|
||||
{
|
||||
@params = default;
|
||||
fixed (uint* @paramsPtr = &@params)
|
||||
{
|
||||
Context.glGetUniformSubroutineuiv(shadertype, location, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetUniform(GlHandle program, int location, Span<double> @params)
|
||||
{
|
||||
fixed (double* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetUniformdv(program.Value, location, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public byte IsTransformFeedback(uint id)
|
||||
{
|
||||
return Context.glIsTransformFeedback(id);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MinSampleShading(float value)
|
||||
{
|
||||
Context.glMinSampleShading(value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void PatchParameter(uint pname, ReadOnlySpan<float> values)
|
||||
{
|
||||
fixed (float* valuesPtr = values)
|
||||
{
|
||||
Context.glPatchParameterfv(pname, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void PatchParameter(uint pname, int value)
|
||||
{
|
||||
Context.glPatchParameteri(pname, value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void PauseTransformFeedback()
|
||||
{
|
||||
Context.glPauseTransformFeedback();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ResumeTransformFeedback()
|
||||
{
|
||||
Context.glResumeTransformFeedback();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void UniformSubroutinesuiv(uint shadertype, ReadOnlySpan<uint> indices)
|
||||
{
|
||||
fixed (uint* indicesPtr = indices)
|
||||
{
|
||||
Context.glUniformSubroutinesuiv(shadertype, checked((int)indices.Length), indicesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,286 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.1
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ActiveShaderProgram(uint pipeline, GlHandle program)
|
||||
{
|
||||
Context.glActiveShaderProgram(pipeline, program.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindProgramPipeline(uint pipeline)
|
||||
{
|
||||
Context.glBindProgramPipeline(pipeline);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearDepth(float d)
|
||||
{
|
||||
Context.glClearDepthf(d);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public GlHandle CreateShaderProgramv(uint type, int count, byte** strings)
|
||||
{
|
||||
return GlHandle.Create(Context.glCreateShaderProgramv(type, count, strings));
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DeleteProgramPipelines(ReadOnlySpan<uint> pipelines)
|
||||
{
|
||||
fixed (uint* pipelinesPtr = pipelines)
|
||||
{
|
||||
Context.glDeleteProgramPipelines(checked((int)pipelines.Length), pipelinesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DepthRangeArrayv(uint first, int count, ReadOnlySpan<double> v)
|
||||
{
|
||||
fixed (double* vPtr = v)
|
||||
{
|
||||
Context.glDepthRangeArrayv(first, count, vPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DepthRangeIndexed(uint index, double n, double f)
|
||||
{
|
||||
Context.glDepthRangeIndexed(index, n, f);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DepthRange(float n, float f)
|
||||
{
|
||||
Context.glDepthRangef(n, f);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GenProgramPipelines(Span<uint> pipelines)
|
||||
{
|
||||
fixed (uint* pipelinesPtr = pipelines)
|
||||
{
|
||||
Context.glGenProgramPipelines(checked((int)pipelines.Length), pipelinesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetDoublei_v(uint target, uint index, Span<double> data)
|
||||
{
|
||||
fixed (double* dataPtr = data)
|
||||
{
|
||||
Context.glGetDoublei_v(target, index, dataPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetFloati_v(uint target, uint index, Span<float> data)
|
||||
{
|
||||
fixed (float* dataPtr = data)
|
||||
{
|
||||
Context.glGetFloati_v(target, index, dataPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramBinary(GlHandle program, int bufSize, out int length, out uint binaryFormat, void* binary)
|
||||
{
|
||||
length = default;
|
||||
binaryFormat = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (uint* binaryFormatPtr = &binaryFormat)
|
||||
{
|
||||
Context.glGetProgramBinary(program.Value, bufSize, lengthPtr, binaryFormatPtr, binary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramPipelineInfoLog(uint pipeline, out int length, Span<byte> infoLog)
|
||||
{
|
||||
length = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (byte* infoLogPtr = infoLog)
|
||||
{
|
||||
Context.glGetProgramPipelineInfoLog(pipeline, checked((int)infoLog.Length), lengthPtr, infoLogPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramPipelineiv(uint pipeline, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetProgramPipelineiv(pipeline, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetShaderPrecisionFormat(uint shadertype, uint precisiontype, Span<int> range, out int precision)
|
||||
{
|
||||
precision = default;
|
||||
if (range.Length < 2) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression '2'.", nameof(range));
|
||||
}
|
||||
fixed (int* rangePtr = range)
|
||||
{
|
||||
fixed (int* precisionPtr = &precision)
|
||||
{
|
||||
Context.glGetShaderPrecisionFormat(shadertype, precisiontype, rangePtr, precisionPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetVertexAttribLdv(uint index, uint pname, Span<double> @params)
|
||||
{
|
||||
fixed (double* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetVertexAttribLdv(index, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public byte IsProgramPipeline(uint pipeline)
|
||||
{
|
||||
return Context.glIsProgramPipeline(pipeline);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ProgramBinary(GlHandle program, uint binaryFormat, void* binary, int length)
|
||||
{
|
||||
Context.glProgramBinary(program.Value, binaryFormat, binary, length);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ProgramParameter(GlHandle program, uint pname, int value)
|
||||
{
|
||||
Context.glProgramParameteri(program.Value, pname, value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ReleaseShaderCompiler()
|
||||
{
|
||||
Context.glReleaseShaderCompiler();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ScissorArrayv(uint first, int count, ReadOnlySpan<int> v)
|
||||
{
|
||||
fixed (int* vPtr = v)
|
||||
{
|
||||
Context.glScissorArrayv(first, count, vPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ScissorIndexed(uint index, int left, int bottom, int width, int height)
|
||||
{
|
||||
Context.glScissorIndexed(index, left, bottom, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ScissorIndexed(uint index, ReadOnlySpan<int> v)
|
||||
{
|
||||
if (v.Length < 4) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression '4'.", nameof(v));
|
||||
}
|
||||
fixed (int* vPtr = v)
|
||||
{
|
||||
Context.glScissorIndexedv(index, vPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ShaderBinary(ReadOnlySpan<uint> shaders, uint binaryFormat, void* binary, int length)
|
||||
{
|
||||
fixed (uint* shadersPtr = shaders)
|
||||
{
|
||||
Context.glShaderBinary(checked((int)shaders.Length), shadersPtr, binaryFormat, binary, length);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void UseProgramStages(uint pipeline, uint stages, GlHandle program)
|
||||
{
|
||||
Context.glUseProgramStages(pipeline, stages, program.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ValidateProgramPipeline(uint pipeline)
|
||||
{
|
||||
Context.glValidateProgramPipeline(pipeline);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribL(uint index, double x)
|
||||
{
|
||||
Context.glVertexAttribL1d(index, x);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribL(uint index, double x, double y)
|
||||
{
|
||||
Context.glVertexAttribL2d(index, x, y);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribL(uint index, double x, double y, double z)
|
||||
{
|
||||
Context.glVertexAttribL3d(index, x, y, z);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribL(uint index, double x, double y, double z, double w)
|
||||
{
|
||||
Context.glVertexAttribL4d(index, x, y, z, w);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribLPointer(uint index, int size, uint type, int stride, void* pointer)
|
||||
{
|
||||
Context.glVertexAttribLPointer(index, size, type, stride, pointer);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ViewportArrayv(uint first, int count, ReadOnlySpan<float> v)
|
||||
{
|
||||
fixed (float* vPtr = v)
|
||||
{
|
||||
Context.glViewportArrayv(first, count, vPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ViewportIndexed(uint index, float x, float y, float w, float h)
|
||||
{
|
||||
Context.glViewportIndexedf(index, x, y, w, h);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ViewportIndexed(uint index, ReadOnlySpan<float> v)
|
||||
{
|
||||
if (v.Length < 4) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression '4'.", nameof(v));
|
||||
}
|
||||
fixed (float* vPtr = v)
|
||||
{
|
||||
Context.glViewportIndexedfv(index, vPtr);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.2
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindImageTexture(uint unit, GlHandle texture, int level, byte layered, int layer, uint access, uint format)
|
||||
{
|
||||
Context.glBindImageTexture(unit, texture.Value, level, layered, layer, access, format);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawArraysInstancedBaseInstance(uint mode, int first, int count, int instancecount, uint baseinstance)
|
||||
{
|
||||
Context.glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawElementsInstancedBaseInstance(uint mode, int count, uint type, void* indices, int instancecount, uint baseinstance)
|
||||
{
|
||||
Context.glDrawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawElementsInstancedBaseVertexBaseInstance(uint mode, int count, uint type, void* indices, int instancecount, int basevertex, uint baseinstance)
|
||||
{
|
||||
Context.glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawTransformFeedbackInstanced(uint mode, uint id, int instancecount)
|
||||
{
|
||||
Context.glDrawTransformFeedbackInstanced(mode, id, instancecount);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DrawTransformFeedbackStreamInstanced(uint mode, uint id, uint stream, int instancecount)
|
||||
{
|
||||
Context.glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetActiveAtomicCounterBufferiv(GlHandle program, GlHandle bufferIndex, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetActiveAtomicCounterBufferiv(program.Value, bufferIndex.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetInternalformativ(uint target, uint internalformat, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetInternalformativ(target, internalformat, pname, checked((int)@params.Length), @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MemoryBarrier(uint barriers)
|
||||
{
|
||||
Context.glMemoryBarrier(barriers);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TexStorage1D(uint target, int levels, uint internalformat, int width)
|
||||
{
|
||||
Context.glTexStorage1D(target, levels, internalformat, width);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TexStorage2D(uint target, int levels, uint internalformat, int width, int height)
|
||||
{
|
||||
Context.glTexStorage2D(target, levels, internalformat, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TexStorage3D(uint target, int levels, uint internalformat, int width, int height, int depth)
|
||||
{
|
||||
Context.glTexStorage3D(target, levels, internalformat, width, height, depth);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,379 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.3
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindVertexBuffer(uint bindingindex, GlHandle buffer, nint offset, int stride)
|
||||
{
|
||||
Context.glBindVertexBuffer(bindingindex, buffer.Value, offset, stride);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearBufferData(uint target, uint internalformat, uint format, uint type, void* data)
|
||||
{
|
||||
Context.glClearBufferData(target, internalformat, format, type, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearBufferSubData(uint target, uint internalformat, nint offset, nint size, uint format, uint type, void* data)
|
||||
{
|
||||
Context.glClearBufferSubData(target, internalformat, offset, size, format, type, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CopyImageSubData(uint srcName, uint srcTarget, int srcLevel, int srcX, int srcY, int srcZ, uint dstName, uint dstTarget, int dstLevel, int dstX, int dstY, int dstZ, int srcWidth, int srcHeight, int srcDepth)
|
||||
{
|
||||
Context.glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DebugMessageCallback(IntPtr callback, void* userParam)
|
||||
{
|
||||
Context.glDebugMessageCallback(callback, userParam);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DebugMessageControl(uint source, uint type, uint severity, ReadOnlySpan<uint> ids, byte enabled)
|
||||
{
|
||||
fixed (uint* idsPtr = ids)
|
||||
{
|
||||
Context.glDebugMessageControl(source, type, severity, checked((int)ids.Length), idsPtr, enabled);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DebugMessageInsert(uint source, uint type, uint id, uint severity, int length, ReadOnlySpan<byte> buf)
|
||||
{
|
||||
fixed (byte* bufPtr = buf)
|
||||
{
|
||||
Context.glDebugMessageInsert(source, type, id, severity, length, bufPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DispatchCompute(uint num_groups_x, uint num_groups_y, uint num_groups_z)
|
||||
{
|
||||
Context.glDispatchCompute(num_groups_x, num_groups_y, num_groups_z);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DispatchComputeIndirect(nint indirect)
|
||||
{
|
||||
Context.glDispatchComputeIndirect(indirect);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void FramebufferParameter(uint target, uint pname, int param)
|
||||
{
|
||||
Context.glFramebufferParameteri(target, pname, param);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public uint GetDebugMessageLog(Span<uint> sources, Span<uint> types, Span<uint> ids, Span<uint> severities, Span<int> lengths, Span<byte> messageLog)
|
||||
{
|
||||
if (types.Length != sources.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(types));
|
||||
}
|
||||
if (ids.Length != sources.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(ids));
|
||||
}
|
||||
if (severities.Length != sources.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(severities));
|
||||
}
|
||||
if (lengths.Length != sources.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(lengths));
|
||||
}
|
||||
fixed (uint* sourcesPtr = sources)
|
||||
{
|
||||
fixed (uint* typesPtr = types)
|
||||
{
|
||||
fixed (uint* idsPtr = ids)
|
||||
{
|
||||
fixed (uint* severitiesPtr = severities)
|
||||
{
|
||||
fixed (int* lengthsPtr = lengths)
|
||||
{
|
||||
fixed (byte* messageLogPtr = messageLog)
|
||||
{
|
||||
return Context.glGetDebugMessageLog(checked((uint)sources.Length), checked((int)messageLog.Length), sourcesPtr, typesPtr, idsPtr, severitiesPtr, lengthsPtr, messageLogPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetFramebufferParameteriv(uint target, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetFramebufferParameteriv(target, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetInternalformati64v(uint target, uint internalformat, uint pname, Span<long> @params)
|
||||
{
|
||||
fixed (long* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetInternalformati64v(target, internalformat, pname, checked((int)@params.Length), @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetObjectLabel(uint identifier, uint name, out int length, Span<byte> label)
|
||||
{
|
||||
length = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (byte* labelPtr = label)
|
||||
{
|
||||
Context.glGetObjectLabel(identifier, name, checked((int)label.Length), lengthPtr, labelPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetObjectPtrLabel(void* ptr, out int length, Span<byte> label)
|
||||
{
|
||||
length = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (byte* labelPtr = label)
|
||||
{
|
||||
Context.glGetObjectPtrLabel(ptr, checked((int)label.Length), lengthPtr, labelPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetPointerv(uint pname, void** @params)
|
||||
{
|
||||
Context.glGetPointerv(pname, @params);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramInterfaceiv(GlHandle program, uint programInterface, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetProgramInterfaceiv(program.Value, programInterface, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public uint GetProgramResourceIndex(GlHandle program, uint programInterface, ReadOnlySpan<byte> name)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
return Context.glGetProgramResourceIndex(program.Value, programInterface, namePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public int GetProgramResourceLocation(GlHandle program, uint programInterface, ReadOnlySpan<byte> name)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
return Context.glGetProgramResourceLocation(program.Value, programInterface, namePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public int GetProgramResourceLocationIndex(GlHandle program, uint programInterface, ReadOnlySpan<byte> name)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
return Context.glGetProgramResourceLocationIndex(program.Value, programInterface, namePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramResourceName(GlHandle program, uint programInterface, uint index, out int length, Span<byte> name)
|
||||
{
|
||||
length = default;
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (byte* namePtr = name)
|
||||
{
|
||||
Context.glGetProgramResourceName(program.Value, programInterface, index, checked((int)name.Length), lengthPtr, namePtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetProgramResourceiv(GlHandle program, uint programInterface, uint index, ReadOnlySpan<uint> props, out int length, Span<int> @params)
|
||||
{
|
||||
length = default;
|
||||
fixed (uint* propsPtr = props)
|
||||
{
|
||||
fixed (int* lengthPtr = &length)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetProgramResourceiv(program.Value, programInterface, index, checked((int)props.Length), propsPtr, checked((int)@params.Length), lengthPtr, @paramsPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateBufferData(GlHandle buffer)
|
||||
{
|
||||
Context.glInvalidateBufferData(buffer.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateBufferSubData(GlHandle buffer, nint offset, nint length)
|
||||
{
|
||||
Context.glInvalidateBufferSubData(buffer.Value, offset, length);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateFramebuffer(uint target, ReadOnlySpan<uint> attachments)
|
||||
{
|
||||
fixed (uint* attachmentsPtr = attachments)
|
||||
{
|
||||
Context.glInvalidateFramebuffer(target, checked((int)attachments.Length), attachmentsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateSubFramebuffer(uint target, ReadOnlySpan<uint> attachments, int x, int y, int width, int height)
|
||||
{
|
||||
fixed (uint* attachmentsPtr = attachments)
|
||||
{
|
||||
Context.glInvalidateSubFramebuffer(target, checked((int)attachments.Length), attachmentsPtr, x, y, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateTexImage(GlHandle texture, int level)
|
||||
{
|
||||
Context.glInvalidateTexImage(texture.Value, level);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateTexSubImage(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth)
|
||||
{
|
||||
Context.glInvalidateTexSubImage(texture.Value, level, xoffset, yoffset, zoffset, width, height, depth);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MultiDrawArraysIndirect(uint mode, void* indirect, int drawcount, int stride)
|
||||
{
|
||||
Context.glMultiDrawArraysIndirect(mode, indirect, drawcount, stride);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MultiDrawElementsIndirect(uint mode, uint type, void* indirect, int drawcount, int stride)
|
||||
{
|
||||
Context.glMultiDrawElementsIndirect(mode, type, indirect, drawcount, stride);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ObjectLabel(uint identifier, uint name, int length, ReadOnlySpan<byte> label)
|
||||
{
|
||||
fixed (byte* labelPtr = label)
|
||||
{
|
||||
Context.glObjectLabel(identifier, name, length, labelPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ObjectPtrLabel(void* ptr, int length, ReadOnlySpan<byte> label)
|
||||
{
|
||||
fixed (byte* labelPtr = label)
|
||||
{
|
||||
Context.glObjectPtrLabel(ptr, length, labelPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void PopDebugGroup()
|
||||
{
|
||||
Context.glPopDebugGroup();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void PushDebugGroup(uint source, uint id, int length, ReadOnlySpan<byte> message)
|
||||
{
|
||||
fixed (byte* messagePtr = message)
|
||||
{
|
||||
Context.glPushDebugGroup(source, id, length, messagePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ShaderStorageBlockBinding(GlHandle program, uint storageBlockIndex, uint storageBlockBinding)
|
||||
{
|
||||
Context.glShaderStorageBlockBinding(program.Value, storageBlockIndex, storageBlockBinding);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TexBufferRange(uint target, uint internalformat, GlHandle buffer, nint offset, nint size)
|
||||
{
|
||||
Context.glTexBufferRange(target, internalformat, buffer.Value, offset, size);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TexStorage2DMultisample(uint target, int samples, uint internalformat, int width, int height, byte fixedsamplelocations)
|
||||
{
|
||||
Context.glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TexStorage3DMultisample(uint target, int samples, uint internalformat, int width, int height, int depth, byte fixedsamplelocations)
|
||||
{
|
||||
Context.glTexStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureView(GlHandle texture, uint target, GlHandle origtexture, uint internalformat, uint minlevel, uint numlevels, uint minlayer, uint numlayers)
|
||||
{
|
||||
Context.glTextureView(texture.Value, target, origtexture.Value, internalformat, minlevel, numlevels, minlayer, numlayers);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribBinding(uint attribindex, uint bindingindex)
|
||||
{
|
||||
Context.glVertexAttribBinding(attribindex, bindingindex);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribFormat(uint attribindex, int size, uint type, byte normalized, uint relativeoffset)
|
||||
{
|
||||
Context.glVertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribIFormat(uint attribindex, int size, uint type, uint relativeoffset)
|
||||
{
|
||||
Context.glVertexAttribIFormat(attribindex, size, type, relativeoffset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexAttribLFormat(uint attribindex, int size, uint type, uint relativeoffset)
|
||||
{
|
||||
Context.glVertexAttribLFormat(attribindex, size, type, relativeoffset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexBindingDivisor(uint bindingindex, uint divisor)
|
||||
{
|
||||
Context.glVertexBindingDivisor(bindingindex, divisor);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.4
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindBuffersBase(uint target, uint first, ReadOnlySpan<uint> buffers)
|
||||
{
|
||||
fixed (uint* buffersPtr = buffers)
|
||||
{
|
||||
Context.glBindBuffersBase(target, first, checked((int)buffers.Length), buffersPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindBuffersRange(uint target, uint first, ReadOnlySpan<uint> buffers, ReadOnlySpan<nint> offsets, ReadOnlySpan<nint> sizes)
|
||||
{
|
||||
if (offsets.Length != buffers.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(offsets));
|
||||
}
|
||||
if (sizes.Length != buffers.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(sizes));
|
||||
}
|
||||
fixed (uint* buffersPtr = buffers)
|
||||
{
|
||||
fixed (nint* offsetsPtr = offsets)
|
||||
{
|
||||
fixed (nint* sizesPtr = sizes)
|
||||
{
|
||||
Context.glBindBuffersRange(target, first, checked((int)buffers.Length), buffersPtr, offsetsPtr, sizesPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindImageTextures(uint first, ReadOnlySpan<uint> textures)
|
||||
{
|
||||
fixed (uint* texturesPtr = textures)
|
||||
{
|
||||
Context.glBindImageTextures(first, checked((int)textures.Length), texturesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindSamplers(uint first, ReadOnlySpan<uint> samplers)
|
||||
{
|
||||
fixed (uint* samplersPtr = samplers)
|
||||
{
|
||||
Context.glBindSamplers(first, checked((int)samplers.Length), samplersPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindTextures(uint first, ReadOnlySpan<uint> textures)
|
||||
{
|
||||
fixed (uint* texturesPtr = textures)
|
||||
{
|
||||
Context.glBindTextures(first, checked((int)textures.Length), texturesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindVertexBuffers(uint first, ReadOnlySpan<uint> buffers, ReadOnlySpan<nint> offsets, ReadOnlySpan<int> strides)
|
||||
{
|
||||
if (offsets.Length != buffers.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(offsets));
|
||||
}
|
||||
if (strides.Length != buffers.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(strides));
|
||||
}
|
||||
fixed (uint* buffersPtr = buffers)
|
||||
{
|
||||
fixed (nint* offsetsPtr = offsets)
|
||||
{
|
||||
fixed (int* stridesPtr = strides)
|
||||
{
|
||||
Context.glBindVertexBuffers(first, checked((int)buffers.Length), buffersPtr, offsetsPtr, stridesPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BufferStorage(uint target, nint size, void* data, uint flags)
|
||||
{
|
||||
Context.glBufferStorage(target, size, data, flags);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearTexImage(GlHandle texture, int level, uint format, uint type, void* data)
|
||||
{
|
||||
Context.glClearTexImage(texture.Value, level, format, type, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearTexSubImage(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, uint format, uint type, void* data)
|
||||
{
|
||||
Context.glClearTexSubImage(texture.Value, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,822 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.5
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BindTextureUnit(uint unit, GlHandle texture)
|
||||
{
|
||||
Context.glBindTextureUnit(unit, texture.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void BlitNamedFramebuffer(GlHandle readFramebuffer, GlHandle drawFramebuffer, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, uint mask, uint filter)
|
||||
{
|
||||
Context.glBlitNamedFramebuffer(readFramebuffer.Value, drawFramebuffer.Value, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public uint CheckNamedFramebufferStatus(GlHandle framebuffer, uint target)
|
||||
{
|
||||
return Context.glCheckNamedFramebufferStatus(framebuffer.Value, target);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearNamedBufferData(GlHandle buffer, uint internalformat, uint format, uint type, void* data)
|
||||
{
|
||||
Context.glClearNamedBufferData(buffer.Value, internalformat, format, type, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearNamedBufferSubData(GlHandle buffer, uint internalformat, nint offset, nint size, uint format, uint type, void* data)
|
||||
{
|
||||
Context.glClearNamedBufferSubData(buffer.Value, internalformat, offset, size, format, type, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearNamedFramebuffer(GlHandle framebuffer, uint buffer, int drawbuffer, float depth, int stencil)
|
||||
{
|
||||
Context.glClearNamedFramebufferfi(framebuffer.Value, buffer, drawbuffer, depth, stencil);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearNamedFramebuffer(GlHandle framebuffer, uint buffer, int drawbuffer, ReadOnlySpan<float> value)
|
||||
{
|
||||
fixed (float* valuePtr = value)
|
||||
{
|
||||
Context.glClearNamedFramebufferfv(framebuffer.Value, buffer, drawbuffer, valuePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearNamedFramebuffer(GlHandle framebuffer, uint buffer, int drawbuffer, ReadOnlySpan<int> value)
|
||||
{
|
||||
fixed (int* valuePtr = value)
|
||||
{
|
||||
Context.glClearNamedFramebufferiv(framebuffer.Value, buffer, drawbuffer, valuePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClearNamedFramebuffer(GlHandle framebuffer, uint buffer, int drawbuffer, ReadOnlySpan<uint> value)
|
||||
{
|
||||
fixed (uint* valuePtr = value)
|
||||
{
|
||||
Context.glClearNamedFramebufferuiv(framebuffer.Value, buffer, drawbuffer, valuePtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ClipControl(uint origin, uint depth)
|
||||
{
|
||||
Context.glClipControl(origin, depth);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CompressedTextureSubImage1D(GlHandle texture, int level, int xoffset, int width, uint format, int imageSize, void* data)
|
||||
{
|
||||
Context.glCompressedTextureSubImage1D(texture.Value, level, xoffset, width, format, imageSize, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CompressedTextureSubImage2D(GlHandle texture, int level, int xoffset, int yoffset, int width, int height, uint format, int imageSize, void* data)
|
||||
{
|
||||
Context.glCompressedTextureSubImage2D(texture.Value, level, xoffset, yoffset, width, height, format, imageSize, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CompressedTextureSubImage3D(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, uint format, int imageSize, void* data)
|
||||
{
|
||||
Context.glCompressedTextureSubImage3D(texture.Value, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CopyNamedBufferSubData(GlHandle readBuffer, GlHandle writeBuffer, nint readOffset, nint writeOffset, nint size)
|
||||
{
|
||||
Context.glCopyNamedBufferSubData(readBuffer.Value, writeBuffer.Value, readOffset, writeOffset, size);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CopyTextureSubImage1D(GlHandle texture, int level, int xoffset, int x, int y, int width)
|
||||
{
|
||||
Context.glCopyTextureSubImage1D(texture.Value, level, xoffset, x, y, width);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CopyTextureSubImage2D(GlHandle texture, int level, int xoffset, int yoffset, int x, int y, int width, int height)
|
||||
{
|
||||
Context.glCopyTextureSubImage2D(texture.Value, level, xoffset, yoffset, x, y, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CopyTextureSubImage3D(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height)
|
||||
{
|
||||
Context.glCopyTextureSubImage3D(texture.Value, level, xoffset, yoffset, zoffset, x, y, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateBuffers(Span<uint> buffers)
|
||||
{
|
||||
fixed (uint* buffersPtr = buffers)
|
||||
{
|
||||
Context.glCreateBuffers(checked((int)buffers.Length), buffersPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateFramebuffers(Span<uint> framebuffers)
|
||||
{
|
||||
fixed (uint* framebuffersPtr = framebuffers)
|
||||
{
|
||||
Context.glCreateFramebuffers(checked((int)framebuffers.Length), framebuffersPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateProgramPipelines(Span<uint> pipelines)
|
||||
{
|
||||
fixed (uint* pipelinesPtr = pipelines)
|
||||
{
|
||||
Context.glCreateProgramPipelines(checked((int)pipelines.Length), pipelinesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateQueries(uint target, Span<uint> ids)
|
||||
{
|
||||
fixed (uint* idsPtr = ids)
|
||||
{
|
||||
Context.glCreateQueries(target, checked((int)ids.Length), idsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateRenderbuffers(Span<uint> renderbuffers)
|
||||
{
|
||||
fixed (uint* renderbuffersPtr = renderbuffers)
|
||||
{
|
||||
Context.glCreateRenderbuffers(checked((int)renderbuffers.Length), renderbuffersPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateSamplers(Span<uint> samplers)
|
||||
{
|
||||
fixed (uint* samplersPtr = samplers)
|
||||
{
|
||||
Context.glCreateSamplers(checked((int)samplers.Length), samplersPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateTextures(uint target, Span<uint> textures)
|
||||
{
|
||||
fixed (uint* texturesPtr = textures)
|
||||
{
|
||||
Context.glCreateTextures(target, checked((int)textures.Length), texturesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateTransformFeedbacks(Span<uint> ids)
|
||||
{
|
||||
fixed (uint* idsPtr = ids)
|
||||
{
|
||||
Context.glCreateTransformFeedbacks(checked((int)ids.Length), idsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void CreateVertexArrays(Span<uint> arrays)
|
||||
{
|
||||
fixed (uint* arraysPtr = arrays)
|
||||
{
|
||||
Context.glCreateVertexArrays(checked((int)arrays.Length), arraysPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void DisableVertexArrayAttrib(uint vaobj, uint index)
|
||||
{
|
||||
Context.glDisableVertexArrayAttrib(vaobj, index);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void EnableVertexArrayAttrib(uint vaobj, uint index)
|
||||
{
|
||||
Context.glEnableVertexArrayAttrib(vaobj, index);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void FlushMappedNamedBufferRange(GlHandle buffer, nint offset, nint length)
|
||||
{
|
||||
Context.glFlushMappedNamedBufferRange(buffer.Value, offset, length);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GenerateTextureMipmap(GlHandle texture)
|
||||
{
|
||||
Context.glGenerateTextureMipmap(texture.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetCompressedTextureImage(GlHandle texture, int level, int bufSize, void* pixels)
|
||||
{
|
||||
Context.glGetCompressedTextureImage(texture.Value, level, bufSize, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetCompressedTextureSubImage(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int bufSize, void* pixels)
|
||||
{
|
||||
Context.glGetCompressedTextureSubImage(texture.Value, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public uint GetGraphicsResetStatus()
|
||||
{
|
||||
return Context.glGetGraphicsResetStatus();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedBufferParameter(GlHandle buffer, uint pname, Span<long> @params)
|
||||
{
|
||||
fixed (long* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetNamedBufferParameteri64v(buffer.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedBufferParameter(GlHandle buffer, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetNamedBufferParameteriv(buffer.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedBufferPointerv(GlHandle buffer, uint pname, void** @params)
|
||||
{
|
||||
Context.glGetNamedBufferPointerv(buffer.Value, pname, @params);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedBufferSubData(GlHandle buffer, nint offset, nint size, void* data)
|
||||
{
|
||||
Context.glGetNamedBufferSubData(buffer.Value, offset, size, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedFramebufferAttachmentParameteriv(GlHandle framebuffer, uint attachment, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetNamedFramebufferAttachmentParameteriv(framebuffer.Value, attachment, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedFramebufferParameteriv(GlHandle framebuffer, uint pname, Span<int> param)
|
||||
{
|
||||
fixed (int* paramPtr = param)
|
||||
{
|
||||
Context.glGetNamedFramebufferParameteriv(framebuffer.Value, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetNamedRenderbufferParameteriv(GlHandle renderbuffer, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetNamedRenderbufferParameteriv(renderbuffer.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetQueryBufferObject(uint id, GlHandle buffer, uint pname, nint offset)
|
||||
{
|
||||
Context.glGetQueryBufferObjecti64v(id, buffer.Value, pname, offset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetQueryBufferObjectiv(uint id, GlHandle buffer, uint pname, nint offset)
|
||||
{
|
||||
Context.glGetQueryBufferObjectiv(id, buffer.Value, pname, offset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetQueryBufferObjectui64v(uint id, GlHandle buffer, uint pname, nint offset)
|
||||
{
|
||||
Context.glGetQueryBufferObjectui64v(id, buffer.Value, pname, offset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetQueryBufferObjectuiv(uint id, GlHandle buffer, uint pname, nint offset)
|
||||
{
|
||||
Context.glGetQueryBufferObjectuiv(id, buffer.Value, pname, offset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureImage(GlHandle texture, int level, uint format, uint type, int bufSize, void* pixels)
|
||||
{
|
||||
Context.glGetTextureImage(texture.Value, level, format, type, bufSize, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureLevelParameter(GlHandle texture, int level, uint pname, Span<float> @params)
|
||||
{
|
||||
fixed (float* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetTextureLevelParameterfv(texture.Value, level, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureLevelParameter(GlHandle texture, int level, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetTextureLevelParameteriv(texture.Value, level, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureParameterI(GlHandle texture, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetTextureParameterIiv(texture.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureParameterI(GlHandle texture, uint pname, Span<uint> @params)
|
||||
{
|
||||
fixed (uint* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetTextureParameterIuiv(texture.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureParameter(GlHandle texture, uint pname, Span<float> @params)
|
||||
{
|
||||
fixed (float* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetTextureParameterfv(texture.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureParameter(GlHandle texture, uint pname, Span<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetTextureParameteriv(texture.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTextureSubImage(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, uint format, uint type, int bufSize, void* pixels)
|
||||
{
|
||||
Context.glGetTextureSubImage(texture.Value, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTransformFeedbacki64_v(uint xfb, uint pname, uint index, Span<long> param)
|
||||
{
|
||||
fixed (long* paramPtr = param)
|
||||
{
|
||||
Context.glGetTransformFeedbacki64_v(xfb, pname, index, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTransformFeedbacki_v(uint xfb, uint pname, uint index, Span<int> param)
|
||||
{
|
||||
fixed (int* paramPtr = param)
|
||||
{
|
||||
Context.glGetTransformFeedbacki_v(xfb, pname, index, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetTransformFeedbackiv(uint xfb, uint pname, Span<int> param)
|
||||
{
|
||||
fixed (int* paramPtr = param)
|
||||
{
|
||||
Context.glGetTransformFeedbackiv(xfb, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetVertexArrayIndexed64iv(uint vaobj, uint index, uint pname, Span<long> param)
|
||||
{
|
||||
fixed (long* paramPtr = param)
|
||||
{
|
||||
Context.glGetVertexArrayIndexed64iv(vaobj, index, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetVertexArrayIndexediv(uint vaobj, uint index, uint pname, Span<int> param)
|
||||
{
|
||||
fixed (int* paramPtr = param)
|
||||
{
|
||||
Context.glGetVertexArrayIndexediv(vaobj, index, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetVertexArrayiv(uint vaobj, uint pname, Span<int> param)
|
||||
{
|
||||
fixed (int* paramPtr = param)
|
||||
{
|
||||
Context.glGetVertexArrayiv(vaobj, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetnCompressedTexImage(uint target, int lod, int bufSize, void* pixels)
|
||||
{
|
||||
Context.glGetnCompressedTexImage(target, lod, bufSize, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetnTexImage(uint target, int level, uint format, uint type, int bufSize, void* pixels)
|
||||
{
|
||||
Context.glGetnTexImage(target, level, format, type, bufSize, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetnUniform(GlHandle program, int location, int bufSize, Span<double> @params)
|
||||
{
|
||||
if (@params.Length < checked((int)bufSize / 8)) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression 'bufSize / 8'.", nameof(@params));
|
||||
}
|
||||
fixed (double* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetnUniformdv(program.Value, location, bufSize, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetnUniform(GlHandle program, int location, int bufSize, Span<float> @params)
|
||||
{
|
||||
if (@params.Length < checked((int)bufSize / 4)) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression 'bufSize / 4'.", nameof(@params));
|
||||
}
|
||||
fixed (float* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetnUniformfv(program.Value, location, bufSize, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetnUniform(GlHandle program, int location, int bufSize, Span<int> @params)
|
||||
{
|
||||
if (@params.Length < checked((int)bufSize / 4)) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression 'bufSize / 4'.", nameof(@params));
|
||||
}
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetnUniformiv(program.Value, location, bufSize, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void GetnUniform(GlHandle program, int location, int bufSize, Span<uint> @params)
|
||||
{
|
||||
if (@params.Length < checked((int)bufSize / 4)) {
|
||||
throw new ArgumentException("Span is shorter than the OpenGL length expression 'bufSize / 4'.", nameof(@params));
|
||||
}
|
||||
fixed (uint* @paramsPtr = @params)
|
||||
{
|
||||
Context.glGetnUniformuiv(program.Value, location, bufSize, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateNamedFramebufferData(GlHandle framebuffer, ReadOnlySpan<uint> attachments)
|
||||
{
|
||||
fixed (uint* attachmentsPtr = attachments)
|
||||
{
|
||||
Context.glInvalidateNamedFramebufferData(framebuffer.Value, checked((int)attachments.Length), attachmentsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void InvalidateNamedFramebufferSubData(GlHandle framebuffer, ReadOnlySpan<uint> attachments, int x, int y, int width, int height)
|
||||
{
|
||||
fixed (uint* attachmentsPtr = attachments)
|
||||
{
|
||||
Context.glInvalidateNamedFramebufferSubData(framebuffer.Value, checked((int)attachments.Length), attachmentsPtr, x, y, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void* MapNamedBuffer(GlHandle buffer, uint access)
|
||||
{
|
||||
return Context.glMapNamedBuffer(buffer.Value, access);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void* MapNamedBufferRange(GlHandle buffer, nint offset, nint length, uint access)
|
||||
{
|
||||
return Context.glMapNamedBufferRange(buffer.Value, offset, length, access);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MemoryBarrierByRegion(uint barriers)
|
||||
{
|
||||
Context.glMemoryBarrierByRegion(barriers);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedBufferData(GlHandle buffer, nint size, void* data, uint usage)
|
||||
{
|
||||
Context.glNamedBufferData(buffer.Value, size, data, usage);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedBufferStorage(GlHandle buffer, nint size, void* data, uint flags)
|
||||
{
|
||||
Context.glNamedBufferStorage(buffer.Value, size, data, flags);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedBufferSubData(GlHandle buffer, nint offset, nint size, void* data)
|
||||
{
|
||||
Context.glNamedBufferSubData(buffer.Value, offset, size, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferDrawBuffer(GlHandle framebuffer, uint buf)
|
||||
{
|
||||
Context.glNamedFramebufferDrawBuffer(framebuffer.Value, buf);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferDrawBuffers(GlHandle framebuffer, ReadOnlySpan<uint> bufs)
|
||||
{
|
||||
fixed (uint* bufsPtr = bufs)
|
||||
{
|
||||
Context.glNamedFramebufferDrawBuffers(framebuffer.Value, checked((int)bufs.Length), bufsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferParameter(GlHandle framebuffer, uint pname, int param)
|
||||
{
|
||||
Context.glNamedFramebufferParameteri(framebuffer.Value, pname, param);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferReadBuffer(GlHandle framebuffer, uint src)
|
||||
{
|
||||
Context.glNamedFramebufferReadBuffer(framebuffer.Value, src);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferRenderbuffer(GlHandle framebuffer, uint attachment, uint renderbuffertarget, GlHandle renderbuffer)
|
||||
{
|
||||
Context.glNamedFramebufferRenderbuffer(framebuffer.Value, attachment, renderbuffertarget, renderbuffer.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferTexture(GlHandle framebuffer, uint attachment, GlHandle texture, int level)
|
||||
{
|
||||
Context.glNamedFramebufferTexture(framebuffer.Value, attachment, texture.Value, level);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedFramebufferTextureLayer(GlHandle framebuffer, uint attachment, GlHandle texture, int level, int layer)
|
||||
{
|
||||
Context.glNamedFramebufferTextureLayer(framebuffer.Value, attachment, texture.Value, level, layer);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedRenderbufferStorage(GlHandle renderbuffer, uint internalformat, int width, int height)
|
||||
{
|
||||
Context.glNamedRenderbufferStorage(renderbuffer.Value, internalformat, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void NamedRenderbufferStorageMultisample(GlHandle renderbuffer, int samples, uint internalformat, int width, int height)
|
||||
{
|
||||
Context.glNamedRenderbufferStorageMultisample(renderbuffer.Value, samples, internalformat, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void ReadnPixels(int x, int y, int width, int height, uint format, uint type, int bufSize, void* data)
|
||||
{
|
||||
Context.glReadnPixels(x, y, width, height, format, type, bufSize, data);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureBarrier()
|
||||
{
|
||||
Context.glTextureBarrier();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureBuffer(GlHandle texture, uint internalformat, GlHandle buffer)
|
||||
{
|
||||
Context.glTextureBuffer(texture.Value, internalformat, buffer.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureBufferRange(GlHandle texture, uint internalformat, GlHandle buffer, nint offset, nint size)
|
||||
{
|
||||
Context.glTextureBufferRange(texture.Value, internalformat, buffer.Value, offset, size);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureParameterI(GlHandle texture, uint pname, ReadOnlySpan<int> @params)
|
||||
{
|
||||
fixed (int* @paramsPtr = @params)
|
||||
{
|
||||
Context.glTextureParameterIiv(texture.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureParameterI(GlHandle texture, uint pname, ReadOnlySpan<uint> @params)
|
||||
{
|
||||
fixed (uint* @paramsPtr = @params)
|
||||
{
|
||||
Context.glTextureParameterIuiv(texture.Value, pname, @paramsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureParameter(GlHandle texture, uint pname, float param)
|
||||
{
|
||||
Context.glTextureParameterf(texture.Value, pname, param);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureParameter(GlHandle texture, uint pname, ReadOnlySpan<float> param)
|
||||
{
|
||||
fixed (float* paramPtr = param)
|
||||
{
|
||||
Context.glTextureParameterfv(texture.Value, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureParameter(GlHandle texture, uint pname, int param)
|
||||
{
|
||||
Context.glTextureParameteri(texture.Value, pname, param);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureParameter(GlHandle texture, uint pname, ReadOnlySpan<int> param)
|
||||
{
|
||||
fixed (int* paramPtr = param)
|
||||
{
|
||||
Context.glTextureParameteriv(texture.Value, pname, paramPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureStorage1D(GlHandle texture, int levels, uint internalformat, int width)
|
||||
{
|
||||
Context.glTextureStorage1D(texture.Value, levels, internalformat, width);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureStorage2D(GlHandle texture, int levels, uint internalformat, int width, int height)
|
||||
{
|
||||
Context.glTextureStorage2D(texture.Value, levels, internalformat, width, height);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureStorage2DMultisample(GlHandle texture, int samples, uint internalformat, int width, int height, byte fixedsamplelocations)
|
||||
{
|
||||
Context.glTextureStorage2DMultisample(texture.Value, samples, internalformat, width, height, fixedsamplelocations);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureStorage3D(GlHandle texture, int levels, uint internalformat, int width, int height, int depth)
|
||||
{
|
||||
Context.glTextureStorage3D(texture.Value, levels, internalformat, width, height, depth);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureStorage3DMultisample(GlHandle texture, int samples, uint internalformat, int width, int height, int depth, byte fixedsamplelocations)
|
||||
{
|
||||
Context.glTextureStorage3DMultisample(texture.Value, samples, internalformat, width, height, depth, fixedsamplelocations);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureSubImage1D(GlHandle texture, int level, int xoffset, int width, uint format, uint type, void* pixels)
|
||||
{
|
||||
Context.glTextureSubImage1D(texture.Value, level, xoffset, width, format, type, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureSubImage2D(GlHandle texture, int level, int xoffset, int yoffset, int width, int height, uint format, uint type, void* pixels)
|
||||
{
|
||||
Context.glTextureSubImage2D(texture.Value, level, xoffset, yoffset, width, height, format, type, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TextureSubImage3D(GlHandle texture, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, uint format, uint type, void* pixels)
|
||||
{
|
||||
Context.glTextureSubImage3D(texture.Value, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TransformFeedbackBufferBase(uint xfb, uint index, GlHandle buffer)
|
||||
{
|
||||
Context.glTransformFeedbackBufferBase(xfb, index, buffer.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void TransformFeedbackBufferRange(uint xfb, uint index, GlHandle buffer, nint offset, nint size)
|
||||
{
|
||||
Context.glTransformFeedbackBufferRange(xfb, index, buffer.Value, offset, size);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public byte UnmapNamedBuffer(GlHandle buffer)
|
||||
{
|
||||
return Context.glUnmapNamedBuffer(buffer.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayAttribBinding(uint vaobj, uint attribindex, uint bindingindex)
|
||||
{
|
||||
Context.glVertexArrayAttribBinding(vaobj, attribindex, bindingindex);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayAttribFormat(uint vaobj, uint attribindex, int size, uint type, byte normalized, uint relativeoffset)
|
||||
{
|
||||
Context.glVertexArrayAttribFormat(vaobj, attribindex, size, type, normalized, relativeoffset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayAttribIFormat(uint vaobj, uint attribindex, int size, uint type, uint relativeoffset)
|
||||
{
|
||||
Context.glVertexArrayAttribIFormat(vaobj, attribindex, size, type, relativeoffset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayAttribLFormat(uint vaobj, uint attribindex, int size, uint type, uint relativeoffset)
|
||||
{
|
||||
Context.glVertexArrayAttribLFormat(vaobj, attribindex, size, type, relativeoffset);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayBindingDivisor(uint vaobj, uint bindingindex, uint divisor)
|
||||
{
|
||||
Context.glVertexArrayBindingDivisor(vaobj, bindingindex, divisor);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayElementBuffer(uint vaobj, GlHandle buffer)
|
||||
{
|
||||
Context.glVertexArrayElementBuffer(vaobj, buffer.Value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayVertexBuffer(uint vaobj, uint bindingindex, GlHandle buffer, nint offset, int stride)
|
||||
{
|
||||
Context.glVertexArrayVertexBuffer(vaobj, bindingindex, buffer.Value, offset, stride);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void VertexArrayVertexBuffers(uint vaobj, uint first, ReadOnlySpan<uint> buffers, ReadOnlySpan<nint> offsets, ReadOnlySpan<int> strides)
|
||||
{
|
||||
if (offsets.Length != buffers.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(offsets));
|
||||
}
|
||||
if (strides.Length != buffers.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by count must match.", nameof(strides));
|
||||
}
|
||||
fixed (uint* buffersPtr = buffers)
|
||||
{
|
||||
fixed (nint* offsetsPtr = offsets)
|
||||
{
|
||||
fixed (int* stridesPtr = strides)
|
||||
{
|
||||
Context.glVertexArrayVertexBuffers(vaobj, first, checked((int)buffers.Length), buffersPtr, offsetsPtr, stridesPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Version: 4.6
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using StgSharp.Graphics.OpenGL;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MultiDrawArraysIndirectCount(uint mode, void* indirect, nint drawcount, int maxdrawcount, int stride)
|
||||
{
|
||||
Context.glMultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void MultiDrawElementsIndirectCount(uint mode, uint type, void* indirect, nint drawcount, int maxdrawcount, int stride)
|
||||
{
|
||||
Context.glMultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void PolygonOffsetClamp(float factor, float units, float clamp)
|
||||
{
|
||||
Context.glPolygonOffsetClamp(factor, units, clamp);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SpecializeShader(GlHandle shader, ReadOnlySpan<byte> pEntryPoint, ReadOnlySpan<uint> pConstantIndex, ReadOnlySpan<uint> pConstantValue)
|
||||
{
|
||||
if (pConstantValue.Length != pConstantIndex.Length) {
|
||||
throw new ArgumentException("Span lengths controlled by numSpecializationConstants must match.", nameof(pConstantValue));
|
||||
}
|
||||
fixed (byte* pEntryPointPtr = pEntryPoint)
|
||||
{
|
||||
fixed (uint* pConstantIndexPtr = pConstantIndex)
|
||||
{
|
||||
fixed (uint* pConstantValuePtr = pConstantValue)
|
||||
{
|
||||
Context.glSpecializeShader(shader.Value, pEntryPointPtr, checked((uint)pConstantIndex.Length), pConstantIndexPtr, pConstantValuePtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,261 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Uniform overloads introduced in OpenGL 3.3
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using StgSharp.Mathematics.Graphics;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float> uniform, float v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform1f(uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glUniform1fv(uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int> uniform, int v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform1i(uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glUniform1iv(uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint> uniform, uint v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform1ui(uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glUniform1uiv(uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float, float> uniform, float v0, float v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform2f(uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float, float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glUniform2fv(uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int, int> uniform, int v0, int v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform2i(uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int, int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glUniform2iv(uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint, uint> uniform, uint v0, uint v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform2ui(uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint, uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glUniform2uiv(uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float, float, float> uniform, float v0, float v1, float v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform3f(uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float, float, float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glUniform3fv(uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int, int, int> uniform, int v0, int v1, int v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform3i(uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int, int, int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glUniform3iv(uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint, uint, uint> uniform, uint v0, uint v1, uint v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform3ui(uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint, uint, uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glUniform3uiv(uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float, float, float, float> uniform, float v0, float v1, float v2, float v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform4f(uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<float, float, float, float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glUniform4fv(uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int, int, int, int> uniform, int v0, int v1, int v2, int v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform4i(uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<int, int, int, int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glUniform4iv(uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint, uint, uint, uint> uniform, uint v0, uint v1, uint v2, uint v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform4ui(uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<uint, uint, uint, uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glUniform4uiv(uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<Vec2> uniform, Vec2 value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform2fv(uniform.id.SignedValue, 1, (float*)&value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<Vec3> uniform, Vec3 value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform3fv(uniform.id.SignedValue, 1, (float*)&value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<Vec4> uniform, Vec4 value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform4fv(uniform.id.SignedValue, 1, (float*)&value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<GraphicsMatrix> uniform, GraphicsMatrix value, bool transpose = false)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniformMatrix4fv(uniform.id.SignedValue, 1, transpose ? (byte)1 : (byte)0, (float*)&value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Uniform overloads introduced in OpenGL 4.0
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using StgSharp.Mathematics.Graphics;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double> uniform, double v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform1d(uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glUniform1dv(uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double, double> uniform, double v0, double v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform2d(uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double, double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glUniform2dv(uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double, double, double> uniform, double v0, double v1, double v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform3d(uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double, double, double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glUniform3dv(uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double, double, double, double> uniform, double v0, double v1, double v2, double v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glUniform4d(uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(Uniform<double, double, double, double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glUniform4dv(uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,334 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Uniform overloads introduced in OpenGL 4.1
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using StgSharp.Mathematics.Graphics;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial class OpenGLFunction
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double> uniform, double v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform1d(program.Value, uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glProgramUniform1dv(program.Value, uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float> uniform, float v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform1f(program.Value, uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glProgramUniform1fv(program.Value, uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int> uniform, int v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform1i(program.Value, uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glProgramUniform1iv(program.Value, uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint> uniform, uint v0)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform1ui(program.Value, uniform.id.SignedValue, v0);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glProgramUniform1uiv(program.Value, uniform.id.SignedValue, values.Length, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double, double> uniform, double v0, double v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform2d(program.Value, uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double, double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glProgramUniform2dv(program.Value, uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float, float> uniform, float v0, float v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform2f(program.Value, uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float, float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glProgramUniform2fv(program.Value, uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int, int> uniform, int v0, int v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform2i(program.Value, uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int, int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glProgramUniform2iv(program.Value, uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint, uint> uniform, uint v0, uint v1)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform2ui(program.Value, uniform.id.SignedValue, v0, v1);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint, uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 2) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 2.", nameof(values));
|
||||
}
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glProgramUniform2uiv(program.Value, uniform.id.SignedValue, values.Length / 2, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double, double, double> uniform, double v0, double v1, double v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform3d(program.Value, uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double, double, double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glProgramUniform3dv(program.Value, uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float, float, float> uniform, float v0, float v1, float v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform3f(program.Value, uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float, float, float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glProgramUniform3fv(program.Value, uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int, int, int> uniform, int v0, int v1, int v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform3i(program.Value, uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int, int, int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glProgramUniform3iv(program.Value, uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint, uint, uint> uniform, uint v0, uint v1, uint v2)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform3ui(program.Value, uniform.id.SignedValue, v0, v1, v2);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint, uint, uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 3) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 3.", nameof(values));
|
||||
}
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glProgramUniform3uiv(program.Value, uniform.id.SignedValue, values.Length / 3, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double, double, double, double> uniform, double v0, double v1, double v2, double v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform4d(program.Value, uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<double, double, double, double> uniform, ReadOnlySpan<double> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (double* valuesPtr = values) {
|
||||
Context.glProgramUniform4dv(program.Value, uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float, float, float, float> uniform, float v0, float v1, float v2, float v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform4f(program.Value, uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<float, float, float, float> uniform, ReadOnlySpan<float> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (float* valuesPtr = values) {
|
||||
Context.glProgramUniform4fv(program.Value, uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int, int, int, int> uniform, int v0, int v1, int v2, int v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform4i(program.Value, uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<int, int, int, int> uniform, ReadOnlySpan<int> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (int* valuesPtr = values) {
|
||||
Context.glProgramUniform4iv(program.Value, uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint, uint, uint, uint> uniform, uint v0, uint v1, uint v2, uint v3)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform4ui(program.Value, uniform.id.SignedValue, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<uint, uint, uint, uint> uniform, ReadOnlySpan<uint> values)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
if ((values.Length % 4) != 0) {
|
||||
throw new ArgumentException("Uniform data length must be divisible by 4.", nameof(values));
|
||||
}
|
||||
fixed (uint* valuesPtr = values) {
|
||||
Context.glProgramUniform4uiv(program.Value, uniform.id.SignedValue, values.Length / 4, valuesPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<Vec2> uniform, Vec2 value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform2fv(program.Value, uniform.id.SignedValue, 1, (float*)&value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<Vec3> uniform, Vec3 value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform3fv(program.Value, uniform.id.SignedValue, 1, (float*)&value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<Vec4> uniform, Vec4 value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniform4fv(program.Value, uniform.id.SignedValue, 1, (float*)&value);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetUniformValue(GlHandle program, Uniform<GraphicsMatrix> uniform, GraphicsMatrix value, bool transpose = false)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(uniform);
|
||||
Context.glProgramUniformMatrix4fv(program.Value, uniform.id.SignedValue, 1, transpose ? (byte)1 : (byte)0, (float*)&value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,670 @@
|
||||
// <auto-generated>
|
||||
// Generated by StgSharp.GenerateGL on 2026-08-25 09:22:55Z
|
||||
// Aggregated GL3+ commands
|
||||
// </auto-generated>
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace StgSharp.Graphics.OpenGL
|
||||
{
|
||||
public unsafe partial struct OpenglContext
|
||||
{
|
||||
internal unsafe delegate*<uint, uint, void> glActiveShaderProgram;
|
||||
internal unsafe delegate*<uint, void> glActiveTexture;
|
||||
internal unsafe delegate*<uint, uint, void> glAttachShader;
|
||||
internal unsafe delegate*<uint, uint, void> glBeginConditionalRender;
|
||||
internal unsafe delegate*<uint, uint, void> glBeginQuery;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glBeginQueryIndexed;
|
||||
internal unsafe delegate*<uint, void> glBeginTransformFeedback;
|
||||
internal unsafe delegate*<uint, uint, byte*, void> glBindAttribLocation;
|
||||
internal unsafe delegate*<uint, uint, void> glBindBuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glBindBufferBase;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, nint, void> glBindBufferRange;
|
||||
internal unsafe delegate*<uint, uint, int, uint*, void> glBindBuffersBase;
|
||||
internal unsafe delegate*<uint, uint, int, uint*, nint*, nint*, void> glBindBuffersRange;
|
||||
internal unsafe delegate*<uint, uint, byte*, void> glBindFragDataLocation;
|
||||
internal unsafe delegate*<uint, uint, uint, byte*, void> glBindFragDataLocationIndexed;
|
||||
internal unsafe delegate*<uint, uint, void> glBindFramebuffer;
|
||||
internal unsafe delegate*<uint, uint, int, byte, int, uint, uint, void> glBindImageTexture;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glBindImageTextures;
|
||||
internal unsafe delegate*<uint, void> glBindProgramPipeline;
|
||||
internal unsafe delegate*<uint, uint, void> glBindRenderbuffer;
|
||||
internal unsafe delegate*<uint, uint, void> glBindSampler;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glBindSamplers;
|
||||
internal unsafe delegate*<uint, uint, void> glBindTexture;
|
||||
internal unsafe delegate*<uint, uint, void> glBindTextureUnit;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glBindTextures;
|
||||
internal unsafe delegate*<uint, uint, void> glBindTransformFeedback;
|
||||
internal unsafe delegate*<uint, void> glBindVertexArray;
|
||||
internal unsafe delegate*<uint, uint, nint, int, void> glBindVertexBuffer;
|
||||
internal unsafe delegate*<uint, int, uint*, nint*, int*, void> glBindVertexBuffers;
|
||||
internal unsafe delegate*<float, float, float, float, void> glBlendColor;
|
||||
internal unsafe delegate*<uint, void> glBlendEquation;
|
||||
internal unsafe delegate*<uint, uint, void> glBlendEquationSeparate;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glBlendEquationSeparatei;
|
||||
internal unsafe delegate*<uint, uint, void> glBlendEquationi;
|
||||
internal unsafe delegate*<uint, uint, void> glBlendFunc;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void> glBlendFuncSeparate;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, uint, void> glBlendFuncSeparatei;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glBlendFunci;
|
||||
internal unsafe delegate*<int, int, int, int, int, int, int, int, uint, uint, void> glBlitFramebuffer;
|
||||
internal unsafe delegate*<uint, uint, int, int, int, int, int, int, int, int, uint, uint, void> glBlitNamedFramebuffer;
|
||||
internal unsafe delegate*<uint, nint, void*, uint, void> glBufferData;
|
||||
internal unsafe delegate*<uint, nint, void*, uint, void> glBufferStorage;
|
||||
internal unsafe delegate*<uint, nint, nint, void*, void> glBufferSubData;
|
||||
internal unsafe delegate*<uint, uint> glCheckFramebufferStatus;
|
||||
internal unsafe delegate*<uint, uint, uint> glCheckNamedFramebufferStatus;
|
||||
internal unsafe delegate*<uint, uint, void> glClampColor;
|
||||
internal unsafe delegate*<uint, void> glClear;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void*, void> glClearBufferData;
|
||||
internal unsafe delegate*<uint, uint, nint, nint, uint, uint, void*, void> glClearBufferSubData;
|
||||
internal unsafe delegate*<uint, int, float, int, void> glClearBufferfi;
|
||||
internal unsafe delegate*<uint, int, float*, void> glClearBufferfv;
|
||||
internal unsafe delegate*<uint, int, int*, void> glClearBufferiv;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glClearBufferuiv;
|
||||
internal unsafe delegate*<float, float, float, float, void> glClearColor;
|
||||
internal unsafe delegate*<double, void> glClearDepth;
|
||||
internal unsafe delegate*<float, void> glClearDepthf;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void*, void> glClearNamedBufferData;
|
||||
internal unsafe delegate*<uint, uint, nint, nint, uint, uint, void*, void> glClearNamedBufferSubData;
|
||||
internal unsafe delegate*<uint, uint, int, float, int, void> glClearNamedFramebufferfi;
|
||||
internal unsafe delegate*<uint, uint, int, float*, void> glClearNamedFramebufferfv;
|
||||
internal unsafe delegate*<uint, uint, int, int*, void> glClearNamedFramebufferiv;
|
||||
internal unsafe delegate*<uint, uint, int, uint*, void> glClearNamedFramebufferuiv;
|
||||
internal unsafe delegate*<int, void> glClearStencil;
|
||||
internal unsafe delegate*<uint, int, uint, uint, void*, void> glClearTexImage;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, uint, uint, void*, void> glClearTexSubImage;
|
||||
internal unsafe delegate*<glSync, uint, ulong, uint> glClientWaitSync;
|
||||
internal unsafe delegate*<uint, uint, void> glClipControl;
|
||||
internal unsafe delegate*<byte, byte, byte, byte, void> glColorMask;
|
||||
internal unsafe delegate*<uint, byte, byte, byte, byte, void> glColorMaski;
|
||||
internal unsafe delegate*<uint, void> glCompileShader;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, void*, void> glCompressedTexImage1D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, int, void*, void> glCompressedTexImage2D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, int, int, void*, void> glCompressedTexImage3D;
|
||||
internal unsafe delegate*<uint, int, int, int, uint, int, void*, void> glCompressedTexSubImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, uint, int, void*, void> glCompressedTexSubImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, uint, int, void*, void> glCompressedTexSubImage3D;
|
||||
internal unsafe delegate*<uint, int, int, int, uint, int, void*, void> glCompressedTextureSubImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, uint, int, void*, void> glCompressedTextureSubImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, uint, int, void*, void> glCompressedTextureSubImage3D;
|
||||
internal unsafe delegate*<uint, uint, nint, nint, nint, void> glCopyBufferSubData;
|
||||
internal unsafe delegate*<uint, uint, int, int, int, int, uint, uint, int, int, int, int, int, int, int, void> glCopyImageSubData;
|
||||
internal unsafe delegate*<uint, uint, nint, nint, nint, void> glCopyNamedBufferSubData;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, int, void> glCopyTexImage1D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, int, int, void> glCopyTexImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, void> glCopyTexSubImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, void> glCopyTexSubImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, int, void> glCopyTexSubImage3D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, void> glCopyTextureSubImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, void> glCopyTextureSubImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, int, void> glCopyTextureSubImage3D;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateBuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateFramebuffers;
|
||||
internal unsafe delegate*<uint> glCreateProgram;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateProgramPipelines;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glCreateQueries;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateRenderbuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateSamplers;
|
||||
internal unsafe delegate*<uint, uint> glCreateShader;
|
||||
internal unsafe delegate*<uint, int, byte**, uint> glCreateShaderProgramv;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glCreateTextures;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateTransformFeedbacks;
|
||||
internal unsafe delegate*<int, uint*, void> glCreateVertexArrays;
|
||||
internal unsafe delegate*<uint, void> glCullFace;
|
||||
internal unsafe delegate*<IntPtr, void*, void> glDebugMessageCallback;
|
||||
internal unsafe delegate*<uint, uint, uint, int, uint*, byte, void> glDebugMessageControl;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, int, byte*, void> glDebugMessageInsert;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteBuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteFramebuffers;
|
||||
internal unsafe delegate*<uint, void> glDeleteProgram;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteProgramPipelines;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteQueries;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteRenderbuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteSamplers;
|
||||
internal unsafe delegate*<uint, void> glDeleteShader;
|
||||
internal unsafe delegate*<glSync, void> glDeleteSync;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteTextures;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteTransformFeedbacks;
|
||||
internal unsafe delegate*<int, uint*, void> glDeleteVertexArrays;
|
||||
internal unsafe delegate*<uint, void> glDepthFunc;
|
||||
internal unsafe delegate*<byte, void> glDepthMask;
|
||||
internal unsafe delegate*<double, double, void> glDepthRange;
|
||||
internal unsafe delegate*<uint, int, double*, void> glDepthRangeArrayv;
|
||||
internal unsafe delegate*<uint, double, double, void> glDepthRangeIndexed;
|
||||
internal unsafe delegate*<float, float, void> glDepthRangef;
|
||||
internal unsafe delegate*<uint, uint, void> glDetachShader;
|
||||
internal unsafe delegate*<uint, void> glDisable;
|
||||
internal unsafe delegate*<uint, uint, void> glDisableVertexArrayAttrib;
|
||||
internal unsafe delegate*<uint, void> glDisableVertexAttribArray;
|
||||
internal unsafe delegate*<uint, uint, void> glDisablei;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glDispatchCompute;
|
||||
internal unsafe delegate*<nint, void> glDispatchComputeIndirect;
|
||||
internal unsafe delegate*<uint, int, int, void> glDrawArrays;
|
||||
internal unsafe delegate*<uint, void*, void> glDrawArraysIndirect;
|
||||
internal unsafe delegate*<uint, int, int, int, void> glDrawArraysInstanced;
|
||||
internal unsafe delegate*<uint, int, int, int, uint, void> glDrawArraysInstancedBaseInstance;
|
||||
internal unsafe delegate*<uint, void> glDrawBuffer;
|
||||
internal unsafe delegate*<int, uint*, void> glDrawBuffers;
|
||||
internal unsafe delegate*<uint, int, uint, void*, void> glDrawElements;
|
||||
internal unsafe delegate*<uint, int, uint, void*, int, void> glDrawElementsBaseVertex;
|
||||
internal unsafe delegate*<uint, uint, void*, void> glDrawElementsIndirect;
|
||||
internal unsafe delegate*<uint, int, uint, void*, int, void> glDrawElementsInstanced;
|
||||
internal unsafe delegate*<uint, int, uint, void*, int, uint, void> glDrawElementsInstancedBaseInstance;
|
||||
internal unsafe delegate*<uint, int, uint, void*, int, int, void> glDrawElementsInstancedBaseVertex;
|
||||
internal unsafe delegate*<uint, int, uint, void*, int, int, uint, void> glDrawElementsInstancedBaseVertexBaseInstance;
|
||||
internal unsafe delegate*<uint, uint, uint, int, uint, void*, void> glDrawRangeElements;
|
||||
internal unsafe delegate*<uint, uint, uint, int, uint, void*, int, void> glDrawRangeElementsBaseVertex;
|
||||
internal unsafe delegate*<uint, uint, void> glDrawTransformFeedback;
|
||||
internal unsafe delegate*<uint, uint, int, void> glDrawTransformFeedbackInstanced;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glDrawTransformFeedbackStream;
|
||||
internal unsafe delegate*<uint, uint, uint, int, void> glDrawTransformFeedbackStreamInstanced;
|
||||
internal unsafe delegate*<uint, void> glEnable;
|
||||
internal unsafe delegate*<uint, uint, void> glEnableVertexArrayAttrib;
|
||||
internal unsafe delegate*<uint, void> glEnableVertexAttribArray;
|
||||
internal unsafe delegate*<uint, uint, void> glEnablei;
|
||||
internal unsafe delegate*<void> glEndConditionalRender;
|
||||
internal unsafe delegate*<uint, void> glEndQuery;
|
||||
internal unsafe delegate*<uint, uint, void> glEndQueryIndexed;
|
||||
internal unsafe delegate*<void> glEndTransformFeedback;
|
||||
internal unsafe delegate*<uint, uint, glSync> glFenceSync;
|
||||
internal unsafe delegate*<void> glFinish;
|
||||
internal unsafe delegate*<void> glFlush;
|
||||
internal unsafe delegate*<uint, nint, nint, void> glFlushMappedBufferRange;
|
||||
internal unsafe delegate*<uint, nint, nint, void> glFlushMappedNamedBufferRange;
|
||||
internal unsafe delegate*<uint, uint, int, void> glFramebufferParameteri;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void> glFramebufferRenderbuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, int, void> glFramebufferTexture;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, int, void> glFramebufferTexture1D;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, int, void> glFramebufferTexture2D;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, int, int, void> glFramebufferTexture3D;
|
||||
internal unsafe delegate*<uint, uint, uint, int, int, void> glFramebufferTextureLayer;
|
||||
internal unsafe delegate*<uint, void> glFrontFace;
|
||||
internal unsafe delegate*<int, uint*, void> glGenBuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glGenFramebuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glGenProgramPipelines;
|
||||
internal unsafe delegate*<int, uint*, void> glGenQueries;
|
||||
internal unsafe delegate*<int, uint*, void> glGenRenderbuffers;
|
||||
internal unsafe delegate*<int, uint*, void> glGenSamplers;
|
||||
internal unsafe delegate*<int, uint*, void> glGenTextures;
|
||||
internal unsafe delegate*<int, uint*, void> glGenTransformFeedbacks;
|
||||
internal unsafe delegate*<int, uint*, void> glGenVertexArrays;
|
||||
internal unsafe delegate*<uint, void> glGenerateMipmap;
|
||||
internal unsafe delegate*<uint, void> glGenerateTextureMipmap;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetActiveAtomicCounterBufferiv;
|
||||
internal unsafe delegate*<uint, uint, int, int*, int*, uint*, byte*, void> glGetActiveAttrib;
|
||||
internal unsafe delegate*<uint, uint, uint, int, int*, byte*, void> glGetActiveSubroutineName;
|
||||
internal unsafe delegate*<uint, uint, uint, int, int*, byte*, void> glGetActiveSubroutineUniformName;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, int*, void> glGetActiveSubroutineUniformiv;
|
||||
internal unsafe delegate*<uint, uint, int, int*, int*, uint*, byte*, void> glGetActiveUniform;
|
||||
internal unsafe delegate*<uint, uint, int, int*, byte*, void> glGetActiveUniformBlockName;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetActiveUniformBlockiv;
|
||||
internal unsafe delegate*<uint, uint, int, int*, byte*, void> glGetActiveUniformName;
|
||||
internal unsafe delegate*<uint, int, uint*, uint, int*, void> glGetActiveUniformsiv;
|
||||
internal unsafe delegate*<uint, int, int*, uint*, void> glGetAttachedShaders;
|
||||
internal unsafe delegate*<uint, byte*, int> glGetAttribLocation;
|
||||
internal unsafe delegate*<uint, uint, byte*, void> glGetBooleani_v;
|
||||
internal unsafe delegate*<uint, byte*, void> glGetBooleanv;
|
||||
internal unsafe delegate*<uint, uint, long*, void> glGetBufferParameteri64v;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetBufferParameteriv;
|
||||
internal unsafe delegate*<uint, uint, void**, void> glGetBufferPointerv;
|
||||
internal unsafe delegate*<uint, nint, nint, void*, void> glGetBufferSubData;
|
||||
internal unsafe delegate*<uint, int, void*, void> glGetCompressedTexImage;
|
||||
internal unsafe delegate*<uint, int, int, void*, void> glGetCompressedTextureImage;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, int, void*, void> glGetCompressedTextureSubImage;
|
||||
internal unsafe delegate*<uint, int, uint*, uint*, uint*, uint*, int*, byte*, uint> glGetDebugMessageLog;
|
||||
internal unsafe delegate*<uint, uint, double*, void> glGetDoublei_v;
|
||||
internal unsafe delegate*<uint, double*, void> glGetDoublev;
|
||||
internal unsafe delegate*<uint> glGetError;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glGetFloati_v;
|
||||
internal unsafe delegate*<uint, float*, void> glGetFloatv;
|
||||
internal unsafe delegate*<uint, byte*, int> glGetFragDataIndex;
|
||||
internal unsafe delegate*<uint, byte*, int> glGetFragDataLocation;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetFramebufferAttachmentParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetFramebufferParameteriv;
|
||||
internal unsafe delegate*<uint> glGetGraphicsResetStatus;
|
||||
internal unsafe delegate*<uint, uint, long*, void> glGetInteger64i_v;
|
||||
internal unsafe delegate*<uint, long*, void> glGetInteger64v;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetIntegeri_v;
|
||||
internal unsafe delegate*<uint, int*, void> glGetIntegerv;
|
||||
internal unsafe delegate*<uint, uint, uint, int, long*, void> glGetInternalformati64v;
|
||||
internal unsafe delegate*<uint, uint, uint, int, int*, void> glGetInternalformativ;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glGetMultisamplefv;
|
||||
internal unsafe delegate*<uint, uint, long*, void> glGetNamedBufferParameteri64v;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetNamedBufferParameteriv;
|
||||
internal unsafe delegate*<uint, uint, void**, void> glGetNamedBufferPointerv;
|
||||
internal unsafe delegate*<uint, nint, nint, void*, void> glGetNamedBufferSubData;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetNamedFramebufferAttachmentParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetNamedFramebufferParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetNamedRenderbufferParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int, int*, byte*, void> glGetObjectLabel;
|
||||
internal unsafe delegate*<void*, int, int*, byte*, void> glGetObjectPtrLabel;
|
||||
internal unsafe delegate*<uint, void**, void> glGetPointerv;
|
||||
internal unsafe delegate*<uint, int, int*, uint*, void*, void> glGetProgramBinary;
|
||||
internal unsafe delegate*<uint, int, int*, byte*, void> glGetProgramInfoLog;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetProgramInterfaceiv;
|
||||
internal unsafe delegate*<uint, int, int*, byte*, void> glGetProgramPipelineInfoLog;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetProgramPipelineiv;
|
||||
internal unsafe delegate*<uint, uint, byte*, uint> glGetProgramResourceIndex;
|
||||
internal unsafe delegate*<uint, uint, byte*, int> glGetProgramResourceLocation;
|
||||
internal unsafe delegate*<uint, uint, byte*, int> glGetProgramResourceLocationIndex;
|
||||
internal unsafe delegate*<uint, uint, uint, int, int*, byte*, void> glGetProgramResourceName;
|
||||
internal unsafe delegate*<uint, uint, uint, int, uint*, int, int*, int*, void> glGetProgramResourceiv;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetProgramStageiv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetProgramiv;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, void> glGetQueryBufferObjecti64v;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, void> glGetQueryBufferObjectiv;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, void> glGetQueryBufferObjectui64v;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, void> glGetQueryBufferObjectuiv;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetQueryIndexediv;
|
||||
internal unsafe delegate*<uint, uint, long*, void> glGetQueryObjecti64v;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetQueryObjectiv;
|
||||
internal unsafe delegate*<uint, uint, ulong*, void> glGetQueryObjectui64v;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glGetQueryObjectuiv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetQueryiv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetRenderbufferParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetSamplerParameterIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glGetSamplerParameterIuiv;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glGetSamplerParameterfv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetSamplerParameteriv;
|
||||
internal unsafe delegate*<uint, int, int*, byte*, void> glGetShaderInfoLog;
|
||||
internal unsafe delegate*<uint, uint, int*, int*, void> glGetShaderPrecisionFormat;
|
||||
internal unsafe delegate*<uint, int, int*, byte*, void> glGetShaderSource;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetShaderiv;
|
||||
internal unsafe delegate*<uint, byte*> glGetString;
|
||||
internal unsafe delegate*<uint, uint, byte*> glGetStringi;
|
||||
internal unsafe delegate*<uint, uint, byte*, uint> glGetSubroutineIndex;
|
||||
internal unsafe delegate*<uint, uint, byte*, int> glGetSubroutineUniformLocation;
|
||||
internal unsafe delegate*<glSync, uint, int, int*, int*, void> glGetSynciv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, void*, void> glGetTexImage;
|
||||
internal unsafe delegate*<uint, int, uint, float*, void> glGetTexLevelParameterfv;
|
||||
internal unsafe delegate*<uint, int, uint, int*, void> glGetTexLevelParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetTexParameterIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glGetTexParameterIuiv;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glGetTexParameterfv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetTexParameteriv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, int, void*, void> glGetTextureImage;
|
||||
internal unsafe delegate*<uint, int, uint, float*, void> glGetTextureLevelParameterfv;
|
||||
internal unsafe delegate*<uint, int, uint, int*, void> glGetTextureLevelParameteriv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetTextureParameterIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glGetTextureParameterIuiv;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glGetTextureParameterfv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetTextureParameteriv;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, uint, uint, int, void*, void> glGetTextureSubImage;
|
||||
internal unsafe delegate*<uint, uint, int, int*, int*, uint*, byte*, void> glGetTransformFeedbackVarying;
|
||||
internal unsafe delegate*<uint, uint, uint, long*, void> glGetTransformFeedbacki64_v;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetTransformFeedbacki_v;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetTransformFeedbackiv;
|
||||
internal unsafe delegate*<uint, byte*, uint> glGetUniformBlockIndex;
|
||||
internal unsafe delegate*<uint, int, byte**, uint*, void> glGetUniformIndices;
|
||||
internal unsafe delegate*<uint, byte*, int> glGetUniformLocation;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glGetUniformSubroutineuiv;
|
||||
internal unsafe delegate*<uint, int, double*, void> glGetUniformdv;
|
||||
internal unsafe delegate*<uint, int, float*, void> glGetUniformfv;
|
||||
internal unsafe delegate*<uint, int, int*, void> glGetUniformiv;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glGetUniformuiv;
|
||||
internal unsafe delegate*<uint, uint, uint, long*, void> glGetVertexArrayIndexed64iv;
|
||||
internal unsafe delegate*<uint, uint, uint, int*, void> glGetVertexArrayIndexediv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetVertexArrayiv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetVertexAttribIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glGetVertexAttribIuiv;
|
||||
internal unsafe delegate*<uint, uint, double*, void> glGetVertexAttribLdv;
|
||||
internal unsafe delegate*<uint, uint, void**, void> glGetVertexAttribPointerv;
|
||||
internal unsafe delegate*<uint, uint, double*, void> glGetVertexAttribdv;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glGetVertexAttribfv;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glGetVertexAttribiv;
|
||||
internal unsafe delegate*<uint, int, int, void*, void> glGetnCompressedTexImage;
|
||||
internal unsafe delegate*<uint, int, uint, uint, int, void*, void> glGetnTexImage;
|
||||
internal unsafe delegate*<uint, int, int, double*, void> glGetnUniformdv;
|
||||
internal unsafe delegate*<uint, int, int, float*, void> glGetnUniformfv;
|
||||
internal unsafe delegate*<uint, int, int, int*, void> glGetnUniformiv;
|
||||
internal unsafe delegate*<uint, int, int, uint*, void> glGetnUniformuiv;
|
||||
internal unsafe delegate*<uint, uint, void> glHint;
|
||||
internal unsafe delegate*<uint, void> glInvalidateBufferData;
|
||||
internal unsafe delegate*<uint, nint, nint, void> glInvalidateBufferSubData;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glInvalidateFramebuffer;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glInvalidateNamedFramebufferData;
|
||||
internal unsafe delegate*<uint, int, uint*, int, int, int, int, void> glInvalidateNamedFramebufferSubData;
|
||||
internal unsafe delegate*<uint, int, uint*, int, int, int, int, void> glInvalidateSubFramebuffer;
|
||||
internal unsafe delegate*<uint, int, void> glInvalidateTexImage;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, void> glInvalidateTexSubImage;
|
||||
internal unsafe delegate*<uint, byte> glIsBuffer;
|
||||
internal unsafe delegate*<uint, byte> glIsEnabled;
|
||||
internal unsafe delegate*<uint, uint, byte> glIsEnabledi;
|
||||
internal unsafe delegate*<uint, byte> glIsFramebuffer;
|
||||
internal unsafe delegate*<uint, byte> glIsProgram;
|
||||
internal unsafe delegate*<uint, byte> glIsProgramPipeline;
|
||||
internal unsafe delegate*<uint, byte> glIsQuery;
|
||||
internal unsafe delegate*<uint, byte> glIsRenderbuffer;
|
||||
internal unsafe delegate*<uint, byte> glIsSampler;
|
||||
internal unsafe delegate*<uint, byte> glIsShader;
|
||||
internal unsafe delegate*<glSync, byte> glIsSync;
|
||||
internal unsafe delegate*<uint, byte> glIsTexture;
|
||||
internal unsafe delegate*<uint, byte> glIsTransformFeedback;
|
||||
internal unsafe delegate*<uint, byte> glIsVertexArray;
|
||||
internal unsafe delegate*<float, void> glLineWidth;
|
||||
internal unsafe delegate*<uint, void> glLinkProgram;
|
||||
internal unsafe delegate*<uint, void> glLogicOp;
|
||||
internal unsafe delegate*<uint, uint, void*> glMapBuffer;
|
||||
internal unsafe delegate*<uint, nint, nint, uint, void*> glMapBufferRange;
|
||||
internal unsafe delegate*<uint, uint, void*> glMapNamedBuffer;
|
||||
internal unsafe delegate*<uint, nint, nint, uint, void*> glMapNamedBufferRange;
|
||||
internal unsafe delegate*<uint, void> glMemoryBarrier;
|
||||
internal unsafe delegate*<uint, void> glMemoryBarrierByRegion;
|
||||
internal unsafe delegate*<float, void> glMinSampleShading;
|
||||
internal unsafe delegate*<uint, int*, int*, int, void> glMultiDrawArrays;
|
||||
internal unsafe delegate*<uint, void*, int, int, void> glMultiDrawArraysIndirect;
|
||||
internal unsafe delegate*<uint, void*, nint, int, int, void> glMultiDrawArraysIndirectCount;
|
||||
internal unsafe delegate*<uint, int*, uint, void**, int, void> glMultiDrawElements;
|
||||
internal unsafe delegate*<uint, int*, uint, void**, int, int*, void> glMultiDrawElementsBaseVertex;
|
||||
internal unsafe delegate*<uint, uint, void*, int, int, void> glMultiDrawElementsIndirect;
|
||||
internal unsafe delegate*<uint, uint, void*, nint, int, int, void> glMultiDrawElementsIndirectCount;
|
||||
internal unsafe delegate*<uint, nint, void*, uint, void> glNamedBufferData;
|
||||
internal unsafe delegate*<uint, nint, void*, uint, void> glNamedBufferStorage;
|
||||
internal unsafe delegate*<uint, nint, nint, void*, void> glNamedBufferSubData;
|
||||
internal unsafe delegate*<uint, uint, void> glNamedFramebufferDrawBuffer;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glNamedFramebufferDrawBuffers;
|
||||
internal unsafe delegate*<uint, uint, int, void> glNamedFramebufferParameteri;
|
||||
internal unsafe delegate*<uint, uint, void> glNamedFramebufferReadBuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void> glNamedFramebufferRenderbuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, int, void> glNamedFramebufferTexture;
|
||||
internal unsafe delegate*<uint, uint, uint, int, int, void> glNamedFramebufferTextureLayer;
|
||||
internal unsafe delegate*<uint, uint, int, int, void> glNamedRenderbufferStorage;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, void> glNamedRenderbufferStorageMultisample;
|
||||
internal unsafe delegate*<uint, uint, int, byte*, void> glObjectLabel;
|
||||
internal unsafe delegate*<void*, int, byte*, void> glObjectPtrLabel;
|
||||
internal unsafe delegate*<uint, float*, void> glPatchParameterfv;
|
||||
internal unsafe delegate*<uint, int, void> glPatchParameteri;
|
||||
internal unsafe delegate*<void> glPauseTransformFeedback;
|
||||
internal unsafe delegate*<uint, float, void> glPixelStoref;
|
||||
internal unsafe delegate*<uint, int, void> glPixelStorei;
|
||||
internal unsafe delegate*<uint, float, void> glPointParameterf;
|
||||
internal unsafe delegate*<uint, float*, void> glPointParameterfv;
|
||||
internal unsafe delegate*<uint, int, void> glPointParameteri;
|
||||
internal unsafe delegate*<uint, int*, void> glPointParameteriv;
|
||||
internal unsafe delegate*<float, void> glPointSize;
|
||||
internal unsafe delegate*<uint, uint, void> glPolygonMode;
|
||||
internal unsafe delegate*<float, float, void> glPolygonOffset;
|
||||
internal unsafe delegate*<float, float, float, void> glPolygonOffsetClamp;
|
||||
internal unsafe delegate*<void> glPopDebugGroup;
|
||||
internal unsafe delegate*<uint, void> glPrimitiveRestartIndex;
|
||||
internal unsafe delegate*<uint, uint, void*, int, void> glProgramBinary;
|
||||
internal unsafe delegate*<uint, uint, int, void> glProgramParameteri;
|
||||
internal unsafe delegate*<uint, int, double, void> glProgramUniform1d;
|
||||
internal unsafe delegate*<uint, int, int, double*, void> glProgramUniform1dv;
|
||||
internal unsafe delegate*<uint, int, float, void> glProgramUniform1f;
|
||||
internal unsafe delegate*<uint, int, int, float*, void> glProgramUniform1fv;
|
||||
internal unsafe delegate*<uint, int, int, void> glProgramUniform1i;
|
||||
internal unsafe delegate*<uint, int, int, int*, void> glProgramUniform1iv;
|
||||
internal unsafe delegate*<uint, int, uint, void> glProgramUniform1ui;
|
||||
internal unsafe delegate*<uint, int, int, uint*, void> glProgramUniform1uiv;
|
||||
internal unsafe delegate*<uint, int, double, double, void> glProgramUniform2d;
|
||||
internal unsafe delegate*<uint, int, int, double*, void> glProgramUniform2dv;
|
||||
internal unsafe delegate*<uint, int, float, float, void> glProgramUniform2f;
|
||||
internal unsafe delegate*<uint, int, int, float*, void> glProgramUniform2fv;
|
||||
internal unsafe delegate*<uint, int, int, int, void> glProgramUniform2i;
|
||||
internal unsafe delegate*<uint, int, int, int*, void> glProgramUniform2iv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, void> glProgramUniform2ui;
|
||||
internal unsafe delegate*<uint, int, int, uint*, void> glProgramUniform2uiv;
|
||||
internal unsafe delegate*<uint, int, double, double, double, void> glProgramUniform3d;
|
||||
internal unsafe delegate*<uint, int, int, double*, void> glProgramUniform3dv;
|
||||
internal unsafe delegate*<uint, int, float, float, float, void> glProgramUniform3f;
|
||||
internal unsafe delegate*<uint, int, int, float*, void> glProgramUniform3fv;
|
||||
internal unsafe delegate*<uint, int, int, int, int, void> glProgramUniform3i;
|
||||
internal unsafe delegate*<uint, int, int, int*, void> glProgramUniform3iv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, uint, void> glProgramUniform3ui;
|
||||
internal unsafe delegate*<uint, int, int, uint*, void> glProgramUniform3uiv;
|
||||
internal unsafe delegate*<uint, int, double, double, double, double, void> glProgramUniform4d;
|
||||
internal unsafe delegate*<uint, int, int, double*, void> glProgramUniform4dv;
|
||||
internal unsafe delegate*<uint, int, float, float, float, float, void> glProgramUniform4f;
|
||||
internal unsafe delegate*<uint, int, int, float*, void> glProgramUniform4fv;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, void> glProgramUniform4i;
|
||||
internal unsafe delegate*<uint, int, int, int*, void> glProgramUniform4iv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, uint, uint, void> glProgramUniform4ui;
|
||||
internal unsafe delegate*<uint, int, int, uint*, void> glProgramUniform4uiv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix2dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix2fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix2x3dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix2x3fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix2x4dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix2x4fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix3dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix3fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix3x2dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix3x2fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix3x4dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix3x4fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix4dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix4fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix4x2dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix4x2fv;
|
||||
internal unsafe delegate*<uint, int, int, byte, double*, void> glProgramUniformMatrix4x3dv;
|
||||
internal unsafe delegate*<uint, int, int, byte, float*, void> glProgramUniformMatrix4x3fv;
|
||||
internal unsafe delegate*<uint, void> glProvokingVertex;
|
||||
internal unsafe delegate*<uint, uint, int, byte*, void> glPushDebugGroup;
|
||||
internal unsafe delegate*<uint, uint, void> glQueryCounter;
|
||||
internal unsafe delegate*<uint, void> glReadBuffer;
|
||||
internal unsafe delegate*<int, int, int, int, uint, uint, void*, void> glReadPixels;
|
||||
internal unsafe delegate*<int, int, int, int, uint, uint, int, void*, void> glReadnPixels;
|
||||
internal unsafe delegate*<void> glReleaseShaderCompiler;
|
||||
internal unsafe delegate*<uint, uint, int, int, void> glRenderbufferStorage;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, void> glRenderbufferStorageMultisample;
|
||||
internal unsafe delegate*<void> glResumeTransformFeedback;
|
||||
internal unsafe delegate*<float, byte, void> glSampleCoverage;
|
||||
internal unsafe delegate*<uint, uint, void> glSampleMaski;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glSamplerParameterIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glSamplerParameterIuiv;
|
||||
internal unsafe delegate*<uint, uint, float, void> glSamplerParameterf;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glSamplerParameterfv;
|
||||
internal unsafe delegate*<uint, uint, int, void> glSamplerParameteri;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glSamplerParameteriv;
|
||||
internal unsafe delegate*<int, int, int, int, void> glScissor;
|
||||
internal unsafe delegate*<uint, int, int*, void> glScissorArrayv;
|
||||
internal unsafe delegate*<uint, int, int, int, int, void> glScissorIndexed;
|
||||
internal unsafe delegate*<uint, int*, void> glScissorIndexedv;
|
||||
internal unsafe delegate*<int, uint*, uint, void*, int, void> glShaderBinary;
|
||||
internal unsafe delegate*<uint, int, byte**, int*, void> glShaderSource;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glShaderStorageBlockBinding;
|
||||
internal unsafe delegate*<uint, byte*, uint, uint*, uint*, void> glSpecializeShader;
|
||||
internal unsafe delegate*<uint, int, uint, void> glStencilFunc;
|
||||
internal unsafe delegate*<uint, uint, int, uint, void> glStencilFuncSeparate;
|
||||
internal unsafe delegate*<uint, void> glStencilMask;
|
||||
internal unsafe delegate*<uint, uint, void> glStencilMaskSeparate;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glStencilOp;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void> glStencilOpSeparate;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glTexBuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, nint, void> glTexBufferRange;
|
||||
internal unsafe delegate*<uint, int, int, int, int, uint, uint, void*, void> glTexImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, uint, uint, void*, void> glTexImage2D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, byte, void> glTexImage2DMultisample;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, uint, uint, void*, void> glTexImage3D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, byte, void> glTexImage3DMultisample;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glTexParameterIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glTexParameterIuiv;
|
||||
internal unsafe delegate*<uint, uint, float, void> glTexParameterf;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glTexParameterfv;
|
||||
internal unsafe delegate*<uint, uint, int, void> glTexParameteri;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glTexParameteriv;
|
||||
internal unsafe delegate*<uint, int, uint, int, void> glTexStorage1D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, void> glTexStorage2D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, byte, void> glTexStorage2DMultisample;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, void> glTexStorage3D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, byte, void> glTexStorage3DMultisample;
|
||||
internal unsafe delegate*<uint, int, int, int, uint, uint, void*, void> glTexSubImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, uint, uint, void*, void> glTexSubImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, uint, uint, void*, void> glTexSubImage3D;
|
||||
internal unsafe delegate*<void> glTextureBarrier;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glTextureBuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, nint, void> glTextureBufferRange;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glTextureParameterIiv;
|
||||
internal unsafe delegate*<uint, uint, uint*, void> glTextureParameterIuiv;
|
||||
internal unsafe delegate*<uint, uint, float, void> glTextureParameterf;
|
||||
internal unsafe delegate*<uint, uint, float*, void> glTextureParameterfv;
|
||||
internal unsafe delegate*<uint, uint, int, void> glTextureParameteri;
|
||||
internal unsafe delegate*<uint, uint, int*, void> glTextureParameteriv;
|
||||
internal unsafe delegate*<uint, int, uint, int, void> glTextureStorage1D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, void> glTextureStorage2D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, byte, void> glTextureStorage2DMultisample;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, void> glTextureStorage3D;
|
||||
internal unsafe delegate*<uint, int, uint, int, int, int, byte, void> glTextureStorage3DMultisample;
|
||||
internal unsafe delegate*<uint, int, int, int, uint, uint, void*, void> glTextureSubImage1D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, uint, uint, void*, void> glTextureSubImage2D;
|
||||
internal unsafe delegate*<uint, int, int, int, int, int, int, int, uint, uint, void*, void> glTextureSubImage3D;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, uint, uint, uint, uint, void> glTextureView;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glTransformFeedbackBufferBase;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, nint, void> glTransformFeedbackBufferRange;
|
||||
internal unsafe delegate*<uint, int, byte**, uint, void> glTransformFeedbackVaryings;
|
||||
internal unsafe delegate*<int, double, void> glUniform1d;
|
||||
internal unsafe delegate*<int, int, double*, void> glUniform1dv;
|
||||
internal unsafe delegate*<int, float, void> glUniform1f;
|
||||
internal unsafe delegate*<int, int, float*, void> glUniform1fv;
|
||||
internal unsafe delegate*<int, int, void> glUniform1i;
|
||||
internal unsafe delegate*<int, int, int*, void> glUniform1iv;
|
||||
internal unsafe delegate*<int, uint, void> glUniform1ui;
|
||||
internal unsafe delegate*<int, int, uint*, void> glUniform1uiv;
|
||||
internal unsafe delegate*<int, double, double, void> glUniform2d;
|
||||
internal unsafe delegate*<int, int, double*, void> glUniform2dv;
|
||||
internal unsafe delegate*<int, float, float, void> glUniform2f;
|
||||
internal unsafe delegate*<int, int, float*, void> glUniform2fv;
|
||||
internal unsafe delegate*<int, int, int, void> glUniform2i;
|
||||
internal unsafe delegate*<int, int, int*, void> glUniform2iv;
|
||||
internal unsafe delegate*<int, uint, uint, void> glUniform2ui;
|
||||
internal unsafe delegate*<int, int, uint*, void> glUniform2uiv;
|
||||
internal unsafe delegate*<int, double, double, double, void> glUniform3d;
|
||||
internal unsafe delegate*<int, int, double*, void> glUniform3dv;
|
||||
internal unsafe delegate*<int, float, float, float, void> glUniform3f;
|
||||
internal unsafe delegate*<int, int, float*, void> glUniform3fv;
|
||||
internal unsafe delegate*<int, int, int, int, void> glUniform3i;
|
||||
internal unsafe delegate*<int, int, int*, void> glUniform3iv;
|
||||
internal unsafe delegate*<int, uint, uint, uint, void> glUniform3ui;
|
||||
internal unsafe delegate*<int, int, uint*, void> glUniform3uiv;
|
||||
internal unsafe delegate*<int, double, double, double, double, void> glUniform4d;
|
||||
internal unsafe delegate*<int, int, double*, void> glUniform4dv;
|
||||
internal unsafe delegate*<int, float, float, float, float, void> glUniform4f;
|
||||
internal unsafe delegate*<int, int, float*, void> glUniform4fv;
|
||||
internal unsafe delegate*<int, int, int, int, int, void> glUniform4i;
|
||||
internal unsafe delegate*<int, int, int*, void> glUniform4iv;
|
||||
internal unsafe delegate*<int, uint, uint, uint, uint, void> glUniform4ui;
|
||||
internal unsafe delegate*<int, int, uint*, void> glUniform4uiv;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glUniformBlockBinding;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix2dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix2fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix2x3dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix2x3fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix2x4dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix2x4fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix3dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix3fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix3x2dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix3x2fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix3x4dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix3x4fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix4dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix4fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix4x2dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix4x2fv;
|
||||
internal unsafe delegate*<int, int, byte, double*, void> glUniformMatrix4x3dv;
|
||||
internal unsafe delegate*<int, int, byte, float*, void> glUniformMatrix4x3fv;
|
||||
internal unsafe delegate*<uint, int, uint*, void> glUniformSubroutinesuiv;
|
||||
internal unsafe delegate*<uint, byte> glUnmapBuffer;
|
||||
internal unsafe delegate*<uint, byte> glUnmapNamedBuffer;
|
||||
internal unsafe delegate*<uint, void> glUseProgram;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glUseProgramStages;
|
||||
internal unsafe delegate*<uint, void> glValidateProgram;
|
||||
internal unsafe delegate*<uint, void> glValidateProgramPipeline;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glVertexArrayAttribBinding;
|
||||
internal unsafe delegate*<uint, uint, int, uint, byte, uint, void> glVertexArrayAttribFormat;
|
||||
internal unsafe delegate*<uint, uint, int, uint, uint, void> glVertexArrayAttribIFormat;
|
||||
internal unsafe delegate*<uint, uint, int, uint, uint, void> glVertexArrayAttribLFormat;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glVertexArrayBindingDivisor;
|
||||
internal unsafe delegate*<uint, uint, void> glVertexArrayElementBuffer;
|
||||
internal unsafe delegate*<uint, uint, uint, nint, int, void> glVertexArrayVertexBuffer;
|
||||
internal unsafe delegate*<uint, uint, int, uint*, nint*, int*, void> glVertexArrayVertexBuffers;
|
||||
internal unsafe delegate*<uint, double, void> glVertexAttrib1d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttrib1dv;
|
||||
internal unsafe delegate*<uint, float, void> glVertexAttrib1f;
|
||||
internal unsafe delegate*<uint, float*, void> glVertexAttrib1fv;
|
||||
internal unsafe delegate*<uint, short, void> glVertexAttrib1s;
|
||||
internal unsafe delegate*<uint, short*, void> glVertexAttrib1sv;
|
||||
internal unsafe delegate*<uint, double, double, void> glVertexAttrib2d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttrib2dv;
|
||||
internal unsafe delegate*<uint, float, float, void> glVertexAttrib2f;
|
||||
internal unsafe delegate*<uint, float*, void> glVertexAttrib2fv;
|
||||
internal unsafe delegate*<uint, short, short, void> glVertexAttrib2s;
|
||||
internal unsafe delegate*<uint, short*, void> glVertexAttrib2sv;
|
||||
internal unsafe delegate*<uint, double, double, double, void> glVertexAttrib3d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttrib3dv;
|
||||
internal unsafe delegate*<uint, float, float, float, void> glVertexAttrib3f;
|
||||
internal unsafe delegate*<uint, float*, void> glVertexAttrib3fv;
|
||||
internal unsafe delegate*<uint, short, short, short, void> glVertexAttrib3s;
|
||||
internal unsafe delegate*<uint, short*, void> glVertexAttrib3sv;
|
||||
internal unsafe delegate*<uint, sbyte*, void> glVertexAttrib4Nbv;
|
||||
internal unsafe delegate*<uint, int*, void> glVertexAttrib4Niv;
|
||||
internal unsafe delegate*<uint, short*, void> glVertexAttrib4Nsv;
|
||||
internal unsafe delegate*<uint, byte, byte, byte, byte, void> glVertexAttrib4Nub;
|
||||
internal unsafe delegate*<uint, byte*, void> glVertexAttrib4Nubv;
|
||||
internal unsafe delegate*<uint, uint*, void> glVertexAttrib4Nuiv;
|
||||
internal unsafe delegate*<uint, ushort*, void> glVertexAttrib4Nusv;
|
||||
internal unsafe delegate*<uint, sbyte*, void> glVertexAttrib4bv;
|
||||
internal unsafe delegate*<uint, double, double, double, double, void> glVertexAttrib4d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttrib4dv;
|
||||
internal unsafe delegate*<uint, float, float, float, float, void> glVertexAttrib4f;
|
||||
internal unsafe delegate*<uint, float*, void> glVertexAttrib4fv;
|
||||
internal unsafe delegate*<uint, int*, void> glVertexAttrib4iv;
|
||||
internal unsafe delegate*<uint, short, short, short, short, void> glVertexAttrib4s;
|
||||
internal unsafe delegate*<uint, short*, void> glVertexAttrib4sv;
|
||||
internal unsafe delegate*<uint, byte*, void> glVertexAttrib4ubv;
|
||||
internal unsafe delegate*<uint, uint*, void> glVertexAttrib4uiv;
|
||||
internal unsafe delegate*<uint, ushort*, void> glVertexAttrib4usv;
|
||||
internal unsafe delegate*<uint, uint, void> glVertexAttribBinding;
|
||||
internal unsafe delegate*<uint, uint, void> glVertexAttribDivisor;
|
||||
internal unsafe delegate*<uint, int, uint, byte, uint, void> glVertexAttribFormat;
|
||||
internal unsafe delegate*<uint, int, void> glVertexAttribI1i;
|
||||
internal unsafe delegate*<uint, int*, void> glVertexAttribI1iv;
|
||||
internal unsafe delegate*<uint, uint, void> glVertexAttribI1ui;
|
||||
internal unsafe delegate*<uint, uint*, void> glVertexAttribI1uiv;
|
||||
internal unsafe delegate*<uint, int, int, void> glVertexAttribI2i;
|
||||
internal unsafe delegate*<uint, int*, void> glVertexAttribI2iv;
|
||||
internal unsafe delegate*<uint, uint, uint, void> glVertexAttribI2ui;
|
||||
internal unsafe delegate*<uint, uint*, void> glVertexAttribI2uiv;
|
||||
internal unsafe delegate*<uint, int, int, int, void> glVertexAttribI3i;
|
||||
internal unsafe delegate*<uint, int*, void> glVertexAttribI3iv;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, void> glVertexAttribI3ui;
|
||||
internal unsafe delegate*<uint, uint*, void> glVertexAttribI3uiv;
|
||||
internal unsafe delegate*<uint, sbyte*, void> glVertexAttribI4bv;
|
||||
internal unsafe delegate*<uint, int, int, int, int, void> glVertexAttribI4i;
|
||||
internal unsafe delegate*<uint, int*, void> glVertexAttribI4iv;
|
||||
internal unsafe delegate*<uint, short*, void> glVertexAttribI4sv;
|
||||
internal unsafe delegate*<uint, byte*, void> glVertexAttribI4ubv;
|
||||
internal unsafe delegate*<uint, uint, uint, uint, uint, void> glVertexAttribI4ui;
|
||||
internal unsafe delegate*<uint, uint*, void> glVertexAttribI4uiv;
|
||||
internal unsafe delegate*<uint, ushort*, void> glVertexAttribI4usv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, void> glVertexAttribIFormat;
|
||||
internal unsafe delegate*<uint, int, uint, int, void*, void> glVertexAttribIPointer;
|
||||
internal unsafe delegate*<uint, double, void> glVertexAttribL1d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttribL1dv;
|
||||
internal unsafe delegate*<uint, double, double, void> glVertexAttribL2d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttribL2dv;
|
||||
internal unsafe delegate*<uint, double, double, double, void> glVertexAttribL3d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttribL3dv;
|
||||
internal unsafe delegate*<uint, double, double, double, double, void> glVertexAttribL4d;
|
||||
internal unsafe delegate*<uint, double*, void> glVertexAttribL4dv;
|
||||
internal unsafe delegate*<uint, int, uint, uint, void> glVertexAttribLFormat;
|
||||
internal unsafe delegate*<uint, int, uint, int, void*, void> glVertexAttribLPointer;
|
||||
internal unsafe delegate*<uint, uint, byte, uint, void> glVertexAttribP1ui;
|
||||
internal unsafe delegate*<uint, uint, byte, uint*, void> glVertexAttribP1uiv;
|
||||
internal unsafe delegate*<uint, uint, byte, uint, void> glVertexAttribP2ui;
|
||||
internal unsafe delegate*<uint, uint, byte, uint*, void> glVertexAttribP2uiv;
|
||||
internal unsafe delegate*<uint, uint, byte, uint, void> glVertexAttribP3ui;
|
||||
internal unsafe delegate*<uint, uint, byte, uint*, void> glVertexAttribP3uiv;
|
||||
internal unsafe delegate*<uint, uint, byte, uint, void> glVertexAttribP4ui;
|
||||
internal unsafe delegate*<uint, uint, byte, uint*, void> glVertexAttribP4uiv;
|
||||
internal unsafe delegate*<uint, int, uint, byte, int, void*, void> glVertexAttribPointer;
|
||||
internal unsafe delegate*<uint, uint, void> glVertexBindingDivisor;
|
||||
internal unsafe delegate*<int, int, int, int, void> glViewport;
|
||||
internal unsafe delegate*<uint, int, float*, void> glViewportArrayv;
|
||||
internal unsafe delegate*<uint, float, float, float, float, void> glViewportIndexedf;
|
||||
internal unsafe delegate*<uint, float*, void> glViewportIndexedfv;
|
||||
internal unsafe delegate*<glSync, uint, ulong, void> glWaitSync;
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,9 @@ namespace GenerateGL
|
||||
{
|
||||
string baseDir = AppContext.BaseDirectory;
|
||||
string xmlPath = Path.GetFullPath(Path.Combine(baseDir, "xml", "gl.xml"));
|
||||
string outputRoot = Path.GetFullPath(Path.Combine(baseDir, "Generated"));
|
||||
string outputRoot = args.Length > 0
|
||||
? Path.GetFullPath(args[0])
|
||||
: Path.GetFullPath(Path.Combine(baseDir, "Generated"));
|
||||
|
||||
Console.WriteLine($"[GenerateGL] Loading registry: {xmlPath}");
|
||||
var (commands, features) = GlXmlParser.Parse(xmlPath);
|
||||
|
||||
Reference in New Issue
Block a user