Beispiel #1
0
        private void GenerateEnum(IndentedTextWriter writer, GLEnum glEnum, GLFeature feature, HashSet <GLChangeReference> collected)
        {
            bool any = false;

            using (var sb = new StringBuilderTextWriter(new StringBuilder()))
                using (var tempWriter = new IndentedTextWriter(sb))
                {
                    tempWriter.Indent = writer.Indent;
                    tempWriter.WriteLine("enum " + glEnum.Name + " : uint");
                    tempWriter.WriteLine("{");

                    using (tempWriter.Indentation())
                    {
                        foreach (var entry in glEnum.Entries)
                        {
                            var reference = new GLChangeReference("enum", entry.Value.Name);

                            if (!collected.Contains(reference))
                            {
                                continue;
                            }
                            any = true;

                            tempWriter.WriteLine(entry.Value.Name + " = " + entry.Value.Value + ",");
                        }
                    }

                    tempWriter.WriteLine("}");

                    if (any)
                    {
                        writer.WriteLine(sb.StringBuilder.ToString());
                    }
                }
        }
Beispiel #2
0
        private void GenerateSpecialNumbers(IndentedTextWriter writer, GLEnum glEnum, GLFeature feature, HashSet <GLChangeReference> collected)
        {
            bool any = false;

            using (var sb = new StringBuilderTextWriter(new StringBuilder()))
                using (var tempWriter = new IndentedTextWriter(sb))
                {
                    tempWriter.Indent = writer.Indent;
                    tempWriter.WriteLine("public static class " + glEnum.Name + "");
                    tempWriter.WriteLine("{");

                    using (tempWriter.Indentation())
                    {
                        foreach (var entry in glEnum.Entries)
                        {
                            var reference = new GLChangeReference("enum", entry.Value.Name);

                            if (!collected.Contains(reference))
                            {
                                continue;
                            }
                            any = true;
                            string dataType = entry.Value.Value <= byte.MaxValue ? "byte" :
                                              entry.Value.Value <= ushort.MaxValue ? "ushort" :
                                              entry.Value.Value <= uint.MaxValue ? "uint" : "ulong";
                            tempWriter.WriteLine($"public static {dataType} {entry.Value.Name} = {entry.Value.Value};");
                        }
                    }

                    tempWriter.WriteLine("}");

                    if (any)
                    {
                        writer.WriteLine(sb.StringBuilder.ToString());
                    }
                }
        }
Beispiel #3
0
        private void GenerateMethod(IndentedTextWriter writer, GLMethod glMethod, GLFeature feature, HashSet <GLChangeReference> collected)
        {
            var reference = new GLChangeReference("command", glMethod.Name);

            if (!collected.Contains(reference))
            {
                return;
            }

            writer.WriteLine($"[DllImport(\"OpenTK.OpenGL\", EntryPoint = \"{glMethod.Name}\")]");
            writer.Write("public extern static ");
            writer.Write(glMethod.ReturnTypeBase + " " + glMethod.Name);

            writer.Write("(");
            bool isFirst = true;

            foreach (var p in glMethod.Parameters)
            {
                if (!isFirst)
                {
                    writer.Write(", ");
                }
                var pType = p.Type;
                if (pType.IsConst)
                {
                    writer.Write("[Const]");
                    pType = ((GLConstType)pType).ElementType;
                }

                writer.Write(pType.Name + " " + NameMangler.MangleParameter(p.Name));

                isFirst = false;
            }

            writer.Write(");");
            writer.WriteLine();
        }