Generated opengl function binding added. All opengl core profile function is now available but not in C# flavour.
This commit is contained in:
@@ -36,63 +36,98 @@ namespace GenerateGL.CodeGen
|
||||
GlParam param
|
||||
)
|
||||
{
|
||||
// For delegate signatures, handles are kept as uint (not GlHandle) to match function pointer fields.
|
||||
if (param.CType.Equals("GLchar", StringComparison.Ordinal) && param.IsPointer)
|
||||
{
|
||||
return "byte*";
|
||||
int pointerLevel = param.PointerLevel;
|
||||
if (param.CType.Equals("GLchar", StringComparison.Ordinal) && pointerLevel > 0) {
|
||||
return $"byte{new string('*', pointerLevel)}";
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType, allowVoid:false);
|
||||
if (param.IsPointer)
|
||||
if (pointerLevel > 0)
|
||||
{
|
||||
if (mapped == "void") {
|
||||
return "void*";
|
||||
return $"void{new string('*', pointerLevel)}";
|
||||
}
|
||||
return $"{mapped}*";
|
||||
return $"{mapped}{new string('*', pointerLevel)}";
|
||||
}
|
||||
return mapped;
|
||||
}
|
||||
|
||||
public static string MapDelegateReturn(
|
||||
string cType
|
||||
string cType,
|
||||
int pointerLevel
|
||||
)
|
||||
{
|
||||
return MapType(cType, allowVoid:true);
|
||||
string mapped = MapType(cType, allowVoid:true);
|
||||
if (pointerLevel > 0) {
|
||||
return $"{mapped}{new string('*', pointerLevel)}";
|
||||
}
|
||||
return mapped;
|
||||
}
|
||||
|
||||
public static string MapParameter(
|
||||
GlParam param
|
||||
)
|
||||
{
|
||||
// Handle GlHandle-like cases: if the C type is GLuint and name hints an object, map to GlHandle
|
||||
if (param.CType.Equals("GLuint", StringComparison.Ordinal) &&
|
||||
LooksLikeHandle(param.Name) &&
|
||||
!param.IsPointer)
|
||||
if (param.PointerLevel == 0)
|
||||
{
|
||||
return "GlHandle";
|
||||
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) {
|
||||
return "GlHandle";
|
||||
}
|
||||
}
|
||||
|
||||
int pointerLevel = param.PointerLevel;
|
||||
if (param.CType.Equals("GLchar", StringComparison.Ordinal) && pointerLevel > 0) {
|
||||
return $"byte{new string('*', pointerLevel)}";
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType, allowVoid:false);
|
||||
if (param.IsPointer)
|
||||
if (pointerLevel > 0)
|
||||
{
|
||||
// const GLchar* -> byte*; other pointers -> void*/IntPtr depending on base
|
||||
if (param.CType.Equals("GLchar", StringComparison.Ordinal))
|
||||
{
|
||||
return "byte*";
|
||||
}
|
||||
if (mapped == "void") {
|
||||
return "void*";
|
||||
return $"void{new string('*', pointerLevel)}";
|
||||
}
|
||||
return $"{mapped}*";
|
||||
return $"{mapped}{new string('*', pointerLevel)}";
|
||||
}
|
||||
return mapped;
|
||||
}
|
||||
|
||||
public static string MapReturn(
|
||||
string cType
|
||||
string cType,
|
||||
int pointerLevel
|
||||
)
|
||||
{
|
||||
return MapType(cType, allowVoid:true);
|
||||
string mapped = MapType(cType, allowVoid:true);
|
||||
if (pointerLevel > 0) {
|
||||
return $"{mapped}{new string('*', pointerLevel)}";
|
||||
}
|
||||
return mapped;
|
||||
}
|
||||
|
||||
public static bool TryMapConstPointerToSpan(
|
||||
GlParam param,
|
||||
out string spanElementType
|
||||
)
|
||||
{
|
||||
spanElementType = string.Empty;
|
||||
if (!param.IsConst || param.PointerLevel != 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
string mapped = MapType(param.CType, allowVoid:false);
|
||||
if (mapped is "void") {
|
||||
return false;
|
||||
}
|
||||
|
||||
spanElementType = mapped;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool LooksLikeHandle(
|
||||
@@ -115,6 +150,17 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user