Exemplo n.º 1
0
        public void LoadPart(IGLSpecification context, XElement rootNode)
        {
            var methodTypes = context.Methods;

            var commands = rootNode.Elements("commands");

            foreach (var c in commands)
            {
                foreach (var command in c.Elements("command"))
                {
                    var prototypeBase  = command.Element("proto");
                    var methodName     = prototypeBase.Element("name")?.Value;
                    var returnTypeName = prototypeBase.Element("ptype")?.Value
                                         ?? prototypeBase.GetXmlText(element => string.Empty);//string.Join("", prototypeBase.Elements().Select(x => x.Value));

                    if (methodName == null)
                    {
                        throw new ArgumentNullException();
                    }

                    returnTypeName = returnTypeName.Trim();

                    if (string.IsNullOrEmpty(returnTypeName))
                    {
                        throw new ArgumentException();
                    }

                    var returnType = context.GetType(returnTypeName);

                    var method = new GLMethod(returnType, methodName);

                    foreach (var p in command.Elements("param"))
                    {
                        var group = p.Attribute("group")?.Value;

                        var paramName = p.Element("name")?.Value;

                        var paramTypeName = p.GetXmlText(element => element.Name == "name" ? string.Empty : element.Value);

                        var paramType = context.GetType(paramTypeName);

                        method.Parameters.Add(new GLParameter(paramType, paramName));
                    }

                    methodTypes.Add(methodName, method);
                }
            }
        }
Exemplo n.º 2
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();
        }