daily update on 20231113 by nitload youmu, upgrade gl loader complete

This commit is contained in:
Nitload
2023-11-14 02:51:12 +08:00
parent dac5f2455b
commit ae804553ce
84 changed files with 5492 additions and 98112 deletions
+2 -78
View File
@@ -9,87 +9,11 @@ namespace StgSharp.Graphics
{
public unsafe partial class Form
{
internal GLcontext* glContext;
internal GLcontext glContext;
internal GLcontextIO* contextID;
private int missingAPIcount = 0;
private int problemAPIcount = 0;
public unsafe IntPtr LoadGLfunc(string name)
{
string log = $"Attempt to load ";
IntPtr ret = InternalIO.glfw.GetProcAddress(name);
if (ret == default)
{
InternalIO.InternalAppendLog(
$"Cannot load OpenGL api called {name}, this api may not exist or supported.");
missingAPIcount++;
return ret;
}
return ret;
}
public unsafe void LoadGlapi()
{
InternalIO.InternalLoaderLoadGLapi(glContext, LoadGLfunc);
//check out if all api is converted correctely.
FieldInfo[] target = typeof(GLcontext).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
string problemLog = "Have problem in converting the fallowing GL API to C# delegates:\n";
foreach (FieldInfo item in target)
{
if (item.FieldType.Name.Contains("PFNG"))
{
if (item.GetValue(*glContext) == null)
{
problemLog += item.Name + ",";
problemAPIcount++;
}
}
}
InternalIO.InternalWriteLog(problemLog, LogType.Error);
if (problemAPIcount > missingAPIcount)
{
InternalIO.InternalWriteLog("Attempt to reload GL APIs", LogType.Info);
//use IntPtr as interface
TypedReference contextref = __makeref(*glContext);
GLcontextIO* iopack = (GLcontextIO*)glContext;
TypedReference iosource = __makeref(*iopack);
foreach (FieldInfo item in target)
{
if (item.FieldType.IsSubclassOf(typeof(Delegate))
&& item.GetValueDirect(contextref) == null)
{
IntPtr proc = default;
proc = LoadGLfunc("gl" + item.Name);
if (proc != IntPtr.Zero)
{
try
{
Delegate dele = Marshal.GetDelegateForFunctionPointer(proc, item.FieldType);
item.SetValueDirect(contextref, dele);
}
catch (Exception ex)
{
InternalIO.InternalWriteLog(
$"{ex.Message}",
LogType.Error);
}
}
}
}
}
GL.gl = glContext;
}
}
}