public void Generate(string outputFileName, IGenerator generator, IGLSpecification spec, GLFeature feature, GLFeature.GLProfile profile, string namesapceName) { string outputDir = feature.Name; if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } using (var fs = new FileStream(Path.Combine(outputDir, outputFileName), FileMode.Create)) using (var streamWriter = new StreamWriter(fs)) using (var indentedTextWriter = new IndentedTextWriter(streamWriter)) { indentedTextWriter.WriteLine("using System;"); indentedTextWriter.WriteLine("using System.Runtime.InteropServices;"); indentedTextWriter.WriteLine("namespace OpenTK.Graphics" + (string.IsNullOrWhiteSpace(namesapceName) ? string.Empty : "." + namesapceName)); indentedTextWriter.WriteLine("{"); using (indentedTextWriter.Indentation()) { generator.Generate(indentedTextWriter, spec, feature, profile); } indentedTextWriter.WriteLine("}"); } }
public void Generate(IndentedTextWriter indentedTextWriter, IGLSpecification spec, GLFeature feature, GLFeature.GLProfile profile) { var collected = feature.CollectFeatures(profile.Name); foreach (var e in spec.Enums.Values) { if (e.Name == "SpecialNumbers") { GenerateSpecialNumbers(indentedTextWriter, e, feature, collected); } else { GenerateEnum(indentedTextWriter, e, feature, collected); } } }
public void Generate(IndentedTextWriter indentedTextWriter, IGLSpecification spec, GLFeature feature, GLFeature.GLProfile profile) { var collected = feature.CollectFeatures(profile.Name); List <(GLMethod m, string name)> delegates = new List <(GLMethod m, string name)>(); foreach (var t in spec.Types.Values.OfType <GLTypeDef>()) { var resolved = t.OriginalType.Resolved(); if (resolved.IsMethod) { var methodType = (GLMethod)resolved; if (string.IsNullOrEmpty(profile.Name)) // Only add delegates in base profile { delegates.Add((methodType, t.Name)); } continue; } while (resolved.IsTypeDef) { resolved = ((GLTypeDef)resolved).OriginalType.Resolved(); } indentedTextWriter.WriteLine("using " + t.Name + " = " + resolved + ";"); } indentedTextWriter.WriteLine("public static unsafe partial class GL"); indentedTextWriter.WriteLine("{"); using (indentedTextWriter.Indentation()) { foreach (var(del, delName) in delegates) { indentedTextWriter.Write("public delegate " + del.ReturnTypeBase + " " + delName + "("); bool first = true; foreach (var p in del.Parameters) { if (!first) { indentedTextWriter.Write(", "); } var pType = p.Type; if (pType.IsConst) { indentedTextWriter.Write("[Const]"); pType = ((GLConstType)pType).ElementType; } indentedTextWriter.Write(pType + " " + p.Name); first = false; } indentedTextWriter.WriteLine(");"); } if (!string.IsNullOrEmpty(profile.Name)) { indentedTextWriter.WriteLine("public static class " + profile.Name); indentedTextWriter.WriteLine("{"); indentedTextWriter.Indent++; } foreach (var e in spec.Methods.Values) { GenerateMethod(indentedTextWriter, e, feature, collected); } if (!string.IsNullOrEmpty(profile.Name)) { indentedTextWriter.Indent--; indentedTextWriter.WriteLine("}"); } } indentedTextWriter.WriteLine("}"); }