Exemple #1
0
        private static void GenerateVersionsSupportClass(RegistryProcessor glRegistryProcessor, RegistryContext ctx)
        {
            string path = String.Format("{0}/{1}.Versions.cs", _OutputBasePath, ctx.Class);

            Console.WriteLine("Generate version support class to {0}.", path);

            using (SourceStreamWriter sw = new SourceStreamWriter(Path.Combine(BasePath, path), false)) {
                RegistryProcessor.GenerateLicensePreamble(sw);

                sw.WriteLine("namespace {0}", _Namespace);
                sw.WriteLine("{");
                sw.Indent();

                sw.WriteLine("public partial class {0}", ctx.Class);
                sw.WriteLine("{");
                sw.Indent();

                sw.WriteLine("#region Known Versions Constants");
                sw.WriteLine();

                foreach (Feature featureVersion in ctx.Registry.Features)
                {
                    if (featureVersion.Number == null)
                    {
                        continue;
                    }

                    // Determine version value (support up to 3 version numbers)
                    Match versionMatch = Regex.Match(featureVersion.Number, @"(?<Major>\d+)\.(?<Minor>\d+)(\.(?<Rev>\d+))?");
                    if (versionMatch.Success == false)
                    {
                        continue;
                    }

                    int versionMajor = Int32.Parse(versionMatch.Groups["Major"].Value);
                    int versionMinor = Int32.Parse(versionMatch.Groups["Minor"].Value);
                    int versionRev   = versionMatch.Groups["Rev"].Success ? Int32.Parse(versionMatch.Groups["Rev"].Value) : 0;

                    int versionValue = versionMajor * 100 + versionMinor * 10 + versionRev;

                    // Determine version/api name
                    string versionName = String.Format("Version_{0}", versionValue);
                    string api         = ctx.Class;

                    if (featureVersion.IsEsVersion)
                    {
                        versionName = String.Format("Version_{0}_ES", versionValue);
                        switch (versionMajor)
                        {
                        case 1:
                            api = "Gles1";
                            break;

                        case 2:
                        default:
                            api = "Gles2";
                            break;
                        }
                    }
                    else if (featureVersion.IsScVersion)
                    {
                        versionName = String.Format("Version_{0}_SC", versionValue);
                        api         = "Glsc2";
                    }

                    sw.WriteLine("/// <summary>");
                    sw.WriteLine("/// Version for {0} API.", SpecificationStyle.GetKhronosVersionHumanReadable(featureVersion.Name));
                    sw.WriteLine("/// </summary>");
                    if (versionRev != 0)
                    {
                        sw.WriteLine("public static readonly KhronosVersion {0} = new KhronosVersion({1}, {2}, {3}, KhronosVersion.Api{4});", versionName, versionMajor, versionMinor, versionRev, api);
                    }
                    else
                    {
                        sw.WriteLine("public static readonly KhronosVersion {0} = new KhronosVersion({1}, {2}, KhronosVersion.Api{3});", versionName, versionMajor, versionMinor, api);
                    }
                    sw.WriteLine();
                }

                sw.WriteLine("#endregion");
                sw.WriteLine();

                sw.Unindent();
                sw.WriteLine("}");
                sw.Unindent();

                sw.WriteLine();
                sw.WriteLine("}");
            }
        }
Exemple #2
0
        private static void GenerateVersionsSupportClass(RegistryProcessor glRegistryProcessor, RegistryContext ctx)
        {
            string path = String.Format("OpenGL.NET/{0}.Versions.cs", ctx.Class);

            Console.WriteLine("Generate version support class to {0}.", path);

            using (SourceStreamWriter sw = new SourceStreamWriter(Path.Combine(BasePath, path), false)) {
                RegistryProcessor.GenerateLicensePreamble(sw);

                sw.WriteLine("namespace OpenGL");
                sw.WriteLine("{");
                sw.Indent();

                sw.WriteLine("public partial class {0}", ctx.Class);
                sw.WriteLine("{");
                sw.Indent();

                sw.WriteLine("#region Known Versions Constants");
                sw.WriteLine();

                foreach (Feature featureVersion in ctx.Registry.Features)
                {
                    if (featureVersion.Number == null)
                    {
                        continue;
                    }

                    // Determine version value (support up to 3 version numbers)
                    Match versionMatch = Regex.Match(featureVersion.Number, @"(?<Major>\d+)\.(?<Minor>\d+)(\.(?<Rev>\d+))?");
                    if (versionMatch.Success == false)
                    {
                        continue;
                    }

                    int versionMajor = Int32.Parse(versionMatch.Groups["Major"].Value);
                    int versionMinor = Int32.Parse(versionMatch.Groups["Minor"].Value);
                    int versionRev   = versionMatch.Groups["Rev"].Success ? Int32.Parse(versionMatch.Groups["Rev"].Value) : 0;

                    int versionValue = versionMajor * 100 + versionMinor * 10 + versionRev;

                    // Determine version name
                    string versionName = String.Format("Version_{0}", versionValue);
                    if (featureVersion.IsEsVersion)
                    {
                        versionName = String.Format("Version_{0}ES", versionValue);
                    }

                    sw.WriteLine("/// <summary>");
                    sw.WriteLine("/// Version for {0} API.", SpecificationStyle.GetKhronosVersionHumanReadable(featureVersion.Name));
                    sw.WriteLine("/// </summary>");
                    sw.WriteLine("public const int {0} = {1};", versionName, versionValue);
                    sw.WriteLine();
                }

                sw.WriteLine("#endregion");
                sw.WriteLine();

                sw.Unindent();
                sw.WriteLine("}");
                sw.Unindent();

                sw.WriteLine();
                sw.WriteLine("}");
            }
        }