Beispiel #1
0
        private static void WriteDelegateInitializerGLesEXT(string NameSpace, string outpath, bool verbose)
        {
            if (verbose) //Si Verbose mode mostramos inicio del proceso.
            {
                Console.WriteLine(); Console.WriteLine("Generating File: OpenGLesInitDelsExts.cs");
            }
            if (!Directory.Exists(outpath)) // Si la ruta no existe la creamos
            {
                Directory.CreateDirectory(outpath);
            }
            if (File.Exists(outpath + "OpenGLesInitDelsExts.cs")) //Si existe algun archivo previo lo eliminamos.
            {
                File.Delete(outpath + "OpenGLesInitDelsExts.cs");
            }
            StreamWriter file = File.CreateText(outpath + "OpenGLesInitDelsExts.cs"); //Generamos Contenido del archivo.

            file.WriteLine("// OpenGL|ES Delegates Initializer for Extensions.");
            file.WriteLine("// File Created with OpenGL Parser 3.");
            file.WriteLine("// Developed by Luis Guijarro Pérez.");
            file.WriteLine();

            file.WriteLine("using System;");
            file.WriteLine("using System.Collections.Generic;");
            file.WriteLine("using System.Runtime.InteropServices;");
            file.WriteLine();
            file.WriteLine("namespace " + NameSpace + ".OpenGL");
            file.WriteLine("{");

            string tab = "\t";                                                          //Definimos tabulación.

            file.WriteLine(tab + "internal static partial class DelegastesInitGLes");   //Declaramos Clase Estatica contenedora de los métodos.
            file.WriteLine(tab + "{");                                                  //Abrimos clase
            file.WriteLine(tab + tab + "private static List<string> SuportedExt;");     // Lista que contendrá los métodos de extensiones soportados.
            file.WriteLine();
            file.WriteLine(tab + tab + "internal static void InitdelegatesGLESExts()"); //Declaramos Metodo Estatico Iniciador de Delegados..
            file.WriteLine(tab + tab + "{");                                            //Abrimos Metodo
            //file.WriteLine(tab+tab+tab+"InternalGLesTool.GetOS();"); //Lammamos a herramienta de definición del SO actual.

            #region Get Ext Supported

            file.WriteLine(tab + tab + tab + "SuportedExt = new List<string>();");
            file.WriteLine(tab + tab + tab + "int oglVer = int.Parse(oglGetString(" + NameSpace + ".OpenGL.StringName.GL_VERSION).Split('.')[0]);");  // Se comprueba Version de OpenGL.
            file.WriteLine(tab + tab + tab + "if (oglVer<3)");                                                                                        // Si es menor a la versión 3.0
            file.WriteLine(tab + tab + tab + "{");
            file.WriteLine(tab + tab + tab + tab + "string[] oglExts = oglGetString(" + NameSpace + ".OpenGL.StringName.GL_EXTENSIONS).Split(' ');"); // Obtenemos Array de Extensiones.
            file.WriteLine(tab + tab + tab + tab + "SuportedExt.AddRange(oglExts);");                                                                 // Add to List
            file.WriteLine(tab + tab + tab + "}");
            file.WriteLine(tab + tab + tab + "else");                                                                                                 // En caso contrario es mayor o igual a 3.0
            file.WriteLine(tab + tab + tab + "{");
            file.WriteLine(tab + tab + tab + tab + "glGetIntegerv = (dglGetIntegerv)" + NameSpace + ".OpenGL.InternalGLesTool.GetGLesMethodAdress(\"glGetIntegerv\", typeof(dglGetIntegerv));");
            file.WriteLine(tab + tab + tab + tab + "glGetStringi = (dglGetStringi)" + NameSpace + ".OpenGL.InternalGLesTool.GetGLesMethodAdress(\"glGetStringi\", typeof(dglGetStringi));");
            file.WriteLine(tab + tab + tab + tab + "int Extnum = oglGetIntegerv(" + NameSpace + ".OpenGL.GetPName.GL_NUM_EXTENSIONS);"); // Obtenemos el número de Extensiones.
            file.WriteLine(tab + tab + tab + tab + "for (int i=0;i<Extnum;i++)");
            file.WriteLine(tab + tab + tab + tab + "{");
            file.WriteLine(tab + tab + tab + tab + tab + "string oglExts = oglGetStringi(" + NameSpace + ".OpenGL.StringName.GL_EXTENSIONS, i);"); // Obtenemos el número de Extensione.
            file.WriteLine(tab + tab + tab + tab + tab + "SuportedExt.Add(oglExts);");                                                             // Add to List
            file.WriteLine(tab + tab + tab + tab + "}");
            file.WriteLine(tab + tab + tab + "}");

            #endregion

            List <string> CommandsKeysList = new List <string>(glReader.d_Commandos.Keys); //Creamos lista de nombres de comandos para ordenar.
            CommandsKeysList.Sort();                                                       //Ordenamos lista alfabeticamente.


            char LastFirstLetter = ' ';                            // Creamos variable para recoger la ultima primera letra de metodo empleada.
            for (int key = 0; key < CommandsKeysList.Count; key++) //Recorremos la lista de Comandos
            {
                bool IsGles = false;
                foreach (glExtension vers in glReader.d_Gles_Extensions.Values)
                {
                    if (vers.Metodos.Contains(CommandsKeysList[key]))
                    {
                        IsGles = true;
                    }
                }

                if (!IsGles)
                {
                    continue;
                }                          // Si no es de OpenGL|ES nos lo saltamos.

                //Definir Regiones Alfabeticas.
                DataObjects.glCommand commandTemp = glReader.d_Commandos[CommandsKeysList[key]]; //Recuperamos el comando.

                if (commandTemp.FromVersion.Length <= 0)                                         //Solo escribimos los que NO estan en el Core de OpenGL.
                {
                    char ActualLetter = CommandsKeysList[key].Replace("gl", "").Substring(0, 1).ToCharArray()[0];

                    if (ActualLetter != LastFirstLetter)                    //Si la nueva letra no es la ultima
                    {
                        if (LastFirstLetter != ' ')                         //Comprovamos que no es la primera
                        {
                            file.WriteLine(tab + tab + tab + "#endregion"); //Cerramos región
                            file.WriteLine();
                        }
                        LastFirstLetter = ActualLetter;                                                            //Establecemos nueva letra
                        file.WriteLine(tab + tab + tab + "#region " + LastFirstLetter.ToString().ToUpper() + ":"); //Abrimos región
                        file.WriteLine();
                    }

                    file.WriteLine(tab + tab + tab + "if (SuportedExt.Contains(\"" + CommandsKeysList[key] + "\"))"); // Comprobar si está soportado.
                    file.WriteLine(tab + tab + tab + "{");

                    string s_initDel = tab + tab + tab + tab + NameSpace + ".OpenGL.internalGLES." + CommandsKeysList[key] + " = ";
                    s_initDel += "(" + NameSpace + ".OpenGL.delegatesGLES." + CommandsKeysList[key] + ") ";
                    s_initDel += "InternalGLesTool.GetGLesMethodAdress(\"" + CommandsKeysList[key] + "\", typeof(" + NameSpace + ".OpenGL.delegatesGLES." + CommandsKeysList[key] + "));";
                    file.WriteLine(s_initDel); //Escribimos iniciación de Metodo de OpenGL
                    //file.WriteLine();
                    file.WriteLine(tab + tab + tab + "}");
                }
            }

            file.WriteLine(tab + tab + tab + "#endregion"); //Escribimos el último endregion.
            file.WriteLine();

            file.WriteLine(tab + tab + "}"); //Cerramos Metodo

            file.WriteLine(tab + tab + "[DllImport(\"opengl32.dll\")]");
            file.WriteLine(tab + tab + "private static extern IntPtr glGetString(StringName name);");
            file.WriteLine();
            file.WriteLine(tab + tab + "private static string oglGetString(" + NameSpace + ".OpenGL.StringName name)");
            file.WriteLine(tab + tab + "{");
            file.WriteLine(tab + tab + tab + "return Marshal.PtrToStringAnsi(glGetString(name));");
            file.WriteLine(tab + tab + "}");
            file.WriteLine();

            //file.WriteLine(tab+tab+"[DllImport(\"opengl32.dll\")]");
            file.WriteLine(tab + tab + "private unsafe delegate void dglGetIntegerv(" + NameSpace + ".OpenGL.GetPName pname, out int* @params);");
            file.WriteLine(tab + tab + "private static dglGetIntegerv glGetIntegerv;");
            file.WriteLine();
            file.WriteLine(tab + tab + "private static unsafe int oglGetIntegerv(" + NameSpace + ".OpenGL.GetPName pname)");
            file.WriteLine(tab + tab + "{");
            file.WriteLine(tab + tab + tab + "int* pdata;");
            file.WriteLine(tab + tab + tab + "glGetIntegerv(pname, out pdata);");
            file.WriteLine(tab + tab + tab + "return (int)pdata;");
            file.WriteLine(tab + tab + "}");
            file.WriteLine();

            file.WriteLine(tab + tab + "private delegate IntPtr dglGetStringi(" + NameSpace + ".OpenGL.StringName name, int num);");
            file.WriteLine(tab + tab + "private static dglGetStringi glGetStringi;");
            file.WriteLine();
            file.WriteLine(tab + tab + "private static string oglGetStringi(" + NameSpace + ".OpenGL.StringName name, int num)");
            file.WriteLine(tab + tab + "{");
            file.WriteLine(tab + tab + tab + "return Marshal.PtrToStringAnsi(glGetStringi(name, num));");
            file.WriteLine(tab + tab + "}");
            file.WriteLine();

            file.WriteLine(tab + "}"); //Cerramos Clase
            file.WriteLine("}");       //Cerramos Espacio de Nombres
            file.WriteLine();
            file.Close();              //Cerramos Archivo.

            if (verbose)               //Si Verbose mode mostramos la finalización del proceso.
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Generated File");
                Console.ResetColor();
                Console.WriteLine(": OpenGLesInitDelsExts.cs");
            }
        }
Beispiel #2
0
        private static void WriteGlesCommands(string NameSpace, string outpath, bool verbose)
        {
            if (verbose) //Si Verbose mode mostramos inicio del proceso.
            {
                Console.WriteLine(); Console.WriteLine("Generating File: GLesMethods.cs");
            }
            if (!Directory.Exists(outpath)) // Si la ruta no existe la creamos
            {
                Directory.CreateDirectory(outpath);
            }
            if (File.Exists(outpath + "GLesMethods.cs")) //Si existe algun archivo previo lo eliminamos.
            {
                File.Delete(outpath + "GLesMethods.cs");
            }
            StreamWriter file = File.CreateText(outpath + "GLesMethods.cs"); //Generamos Contenido del archivo.

            file.WriteLine("// OpenGL|ES Methods.");
            file.WriteLine("// File Created with OpenGL Parser 3.");
            file.WriteLine("// Developed by Luis Guijarro Pérez.");
            file.WriteLine();

            file.WriteLine("using System;");
            file.WriteLine("using System.Text;");
            file.WriteLine("using System.Runtime.InteropServices;");
            file.WriteLine();
            file.WriteLine("namespace " + NameSpace + ".OpenGL");
            file.WriteLine("{");

            string tab = "\t";                                                             //Definimos tabulación.

            file.WriteLine(tab + "public static partial class GLES");                      //Declaramos Clase Estatica contenedora de los métodos.
            file.WriteLine(tab + "{");                                                     //Abrimos clase

            List <string> CommandsKeysList = new List <string>(glReader.d_Commandos.Keys); //Creamos lista de nombres de comandos para ordenar.

            CommandsKeysList.Sort();                                                       //Ordenamos lista alfabeticamente.

            char LastFirstLetter = ' ';                                                    // Creamos variable para recoger la ultima primera letra de metodo empleada.

            for (int key = 0; key < CommandsKeysList.Count; key++)                         //Recorremos la lista con los nombres de los Comandos
            {
                bool IsGles = false;
                foreach (glVersion vers in glReader.d_gles_versiones.Values)
                {
                    if (vers.Metodos.Contains(CommandsKeysList[key]))
                    {
                        IsGles = true;
                    }
                }

                if (!IsGles)
                {
                    continue;
                }                          // Si no es de OpenGL|ES nos lo saltamos.

                //Definir Regiones Alfabeticas.
                DataObjects.glCommand commandTemp = glReader.d_Commandos[CommandsKeysList[key]]; //Recuperamos el comando.

                if (commandTemp.FromGlesVersion.Length > 0)                                      //Solo escribimos los que Estan en alguna versión de Gles.
                {
                    char ActualLetter = CommandsKeysList[key].Replace("gl", "").Substring(0, 1).ToCharArray()[0];

                    if (ActualLetter != LastFirstLetter)              //Si la nueva letra no es la ultima
                    {
                        if (LastFirstLetter != ' ')                   //Comprovamos que no es la primera
                        {
                            file.WriteLine(tab + tab + "#endregion"); //Cerramos región
                            file.WriteLine();
                        }
                        LastFirstLetter = ActualLetter;                                                      //Establecemos nueva letra
                        file.WriteLine(tab + tab + "#region " + LastFirstLetter.ToString().ToUpper() + ":"); //Abrimos región
                        file.WriteLine();
                    }

                    //Escribir info de Versión.
                    string s_comentario = tab + tab + "///<sumary> ";
                    if (commandTemp.FromGlesVersion.Length > 0)
                    {
                        s_comentario += "Available from OpenGL|ES version " + commandTemp.FromGlesVersion;
                    }
                    s_comentario += commandTemp.DeprecatedGlesVersion.Length > 0 ? " | Deprecated in OpenGL|ES version " + commandTemp.DeprecatedGlesVersion : "";
                    s_comentario += "</sumary>";

                    //Ahora Escribir el Método.
                    string s_metodo = tab + tab + "public static "; //Iniciamos escritura del método.
                    s_metodo += commandTemp.EsInseguro ? "unsafe " : "";
                    s_metodo += commandTemp.ReturnedType + (commandTemp.ReturnedTypePointer? "* " : " ") + CommandsKeysList[key] + "(";
                    foreach (string keyParam in commandTemp.Parametros.Keys) //Recorremos lista deparametros para añadirlos uno a uno.
                    {
                        glParam param = commandTemp.Parametros[keyParam];    //Obtenemos el parametro.
                        //s_metodo += param.tipo + (param.esArray? "[] ": " ") + keyParam + ", "; //Añadimos tipo, si es array y el nombre del parametro.

                        string s_tipo = param.tipo;
                        string s_ptn  = "";
                        if (param.esPuntero > 0)
                        {
                            if (s_tipo == "char")
                            {
                                if (param.Acces == AccesParam.In)
                                {
                                    s_tipo = "[MarshalAs(UnmanagedType.LPStr)] string" + ((param.esPuntero > 1) ? "[]" : "");
                                }
                                else
                                {
                                    s_tipo = "StringBuilder" + ((param.esPuntero > 1) ? "[]" : "");
                                }
                            }
                            else
                            {
                                for (int ptn = 0; ptn < param.esPuntero; ptn++)
                                {
                                    s_ptn += "*";
                                }
                            }
                        }
                        s_metodo += s_tipo + s_ptn + " " + keyParam + ", "; //Añadimos tipo, si es puntero y numero de asteriscos y el nombre del parametro.
                        //s_metodo += param.tipo + ((param.esPuntero>0) ? "* ": " ") + keyParam + ", "; //Añadimos tipo, si es puntero y el nombre del parametro.
                    }
                    if (commandTemp.Parametros.Count > 0)
                    {
                        s_metodo = s_metodo.Substring(0, s_metodo.Length - 2);
                    }                                //Quitamos última coma y espacio si se han escrito parametros.
                    s_metodo += ")";                 //Cerramos enunciado de método.
                    file.WriteLine(s_comentario);    //Escribimos comentario de versión.
                    file.WriteLine(s_metodo);        //Escribimos enunciado de método en archivo.
                    file.WriteLine(tab + tab + "{"); //Abrimos metodo

                    //Ahora a escribir llamada.
                    string s_llamada = "" + tab + tab + tab + ((commandTemp.ReturnedType != "void") ? "return " : ""); //Definimos si retorna valor.
                    s_llamada += "internalGLES." + CommandsKeysList[key] + "(";                                        //Iniciamos escritura de la llamada a metodo interno delegado.
                    foreach (string keyParam in commandTemp.Parametros.Keys)                                           //Recorremos lista deparametros para añadirlos uno a uno.
                    {
                        s_llamada += keyParam + ", ";
                    }
                    if (commandTemp.Parametros.Count > 0)
                    {
                        s_llamada = s_llamada.Substring(0, s_llamada.Length - 2);
                    }                                //Quitamos última coma y espacio si se han escrito parametros.
                    s_llamada += ");";
                    file.WriteLine(s_llamada);       //Escribimos la llamada la metod interno delegado
                    file.WriteLine(tab + tab + "}"); //Cerramos Método
                    file.WriteLine();
                }
            }

            file.WriteLine(tab + tab + "#endregion"); //Escribimos el último endregion.
            file.WriteLine();

            file.WriteLine(tab + "}"); //Cerramos clase
            file.WriteLine("}");       //Cerramos namespace
            file.WriteLine();
            file.Close();              //Cerramos Archivo.

            if (verbose)               //Si Verbose mode mostramos la finalización del proceso.
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Generated File");
                Console.ResetColor();
                Console.WriteLine(": GLesMethods.cs");
            }
        }
Beispiel #3
0
        private static void WriteDelegateInitializerGles(string NameSpace, string outpath, bool verbose)
        {
            if (verbose) //Si Verbose mode mostramos inicio del proceso.
            {
                Console.WriteLine(); Console.WriteLine("Generating File: OpenGLesInitDels.cs");
            }
            if (!Directory.Exists(outpath)) // Si la ruta no existe la creamos
            {
                Directory.CreateDirectory(outpath);
            }
            if (File.Exists(outpath + "OpenGLesInitDels.cs")) //Si existe algun archivo previo lo eliminamos.
            {
                File.Delete(outpath + "OpenGLesInitDels.cs");
            }
            StreamWriter file = File.CreateText(outpath + "OpenGLesInitDels.cs"); //Generamos Contenido del archivo.

            file.WriteLine("// OpenGL|ES Delegates Initializer.");
            file.WriteLine("// File Created with OpenGL Parser 3.");
            file.WriteLine("// Developed by Luis Guijarro Pérez.");
            file.WriteLine();

            file.WriteLine("using System;");
            file.WriteLine();
            file.WriteLine("namespace " + NameSpace + ".OpenGL");
            file.WriteLine("{");

            string tab = "\t";                                                        //Definimos tabulación.

            file.WriteLine(tab + "internal static partial class DelegastesInitGLes"); //Declaramos Clase Estatica contenedora de los métodos.
            file.WriteLine(tab + "{");                                                //Abrimos clase
            file.WriteLine(tab + tab + "internal static void InitDelegatesGLes()");   //Declaramos Metodo Estatico Iniciador de Delegados..
            file.WriteLine(tab + tab + "{");                                          //Abrimos Metodo


            List <string> CommandsKeysList = new List <string>(glReader.d_Commandos.Keys); //Creamos lista de nombres de comandos para ordenar.

            CommandsKeysList.Sort();                                                       //Ordenamos lista alfabeticamente.


            char LastFirstLetter = ' ';                            // Creamos variable para recoger la ultima primera letra de metodo empleada.

            for (int key = 0; key < CommandsKeysList.Count; key++) //Recorremos la lista de Comandos
            {
                bool IsGles = false;
                foreach (glVersion vers in glReader.d_gles_versiones.Values)
                {
                    if (vers.Metodos.Contains(CommandsKeysList[key]))
                    {
                        IsGles = true;
                    }
                }

                if (!IsGles)
                {
                    continue;
                }                          // Si no es de OpenGL|ES nos lo saltamos.

                //Definir Regiones Alfabeticas.
                DataObjects.glCommand commandTemp = glReader.d_Commandos[CommandsKeysList[key]]; //Recuperamos el comando.

                if (commandTemp.FromVersion.Length > 0)                                          //Solo escribimos los que Estan en el Core de OpenGL.
                {
                    char ActualLetter = CommandsKeysList[key].Replace("gl", "").Substring(0, 1).ToCharArray()[0];

                    if (ActualLetter != LastFirstLetter)                    //Si la nueva letra no es la ultima
                    {
                        if (LastFirstLetter != ' ')                         //Comprovamos que no es la primera
                        {
                            file.WriteLine(tab + tab + tab + "#endregion"); //Cerramos región
                            file.WriteLine();
                        }
                        LastFirstLetter = ActualLetter;                                                            //Establecemos nueva letra
                        file.WriteLine(tab + tab + tab + "#region " + LastFirstLetter.ToString().ToUpper() + ":"); //Abrimos región
                        file.WriteLine();
                    }

                    string s_initDel = tab + tab + tab + NameSpace + ".OpenGL.internalGLES." + CommandsKeysList[key] + " = ";
                    s_initDel += "(" + NameSpace + ".OpenGL.delegatesGLES." + CommandsKeysList[key] + ") ";
                    s_initDel += "InternalGLesTool.GetGLesMethodAdress(\"" + CommandsKeysList[key] + "\", typeof(" + NameSpace + ".OpenGL.delegatesGLES." + CommandsKeysList[key] + "));";
                    file.WriteLine(s_initDel); //Escribimos iniciación de Metodo de OpenGL
                    //file.WriteLine();
                }
            }

            file.WriteLine(tab + tab + tab + "#endregion"); //Escribimos el último endregion.
            file.WriteLine();

            file.WriteLine(tab + tab + "}"); //Cerramos Metodo
            file.WriteLine(tab + "}");       //Cerramos Clase
            file.WriteLine("}");             //Cerramos Espacio de Nombres
            file.WriteLine();
            file.Close();                    //Cerramos Archivo.

            if (verbose)                     //Si Verbose mode mostramos la finalización del proceso.
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Generated File");
                Console.ResetColor();
                Console.WriteLine(": OpenGLesInitDels.cs");
            }
        }
Beispiel #4
0
        private static void WriteGlesEXTCommands(string NameSpace, string outpath, bool verbose)
        {
            if (verbose) //Si Verbose mode mostramos inicio del proceso.
            {
                Console.WriteLine(); Console.WriteLine("Generating File: GlesExtMethods.cs");
            }
            if (!Directory.Exists(outpath)) // Si la ruta no existe la creamos
            {
                Directory.CreateDirectory(outpath);
            }
            if (File.Exists(outpath + "GlesExtMethods.cs")) //Si existe algun archivo previo lo eliminamos.
            {
                File.Delete(outpath + "GlesExtMethods.cs");
            }
            StreamWriter file = File.CreateText(outpath + "GlesExtMethods.cs"); //Generamos Contenido del archivo.

            file.WriteLine("// OpenGL|ES Extension's Methods.");
            file.WriteLine("// File Created with OpenGL Parser 3.");
            file.WriteLine("// Developed by Luis Guijarro Pérez.");
            file.WriteLine();

            file.WriteLine("using System;");
            file.WriteLine("using System.Text;");
            file.WriteLine("using System.Runtime.InteropServices;");
            file.WriteLine();
            file.WriteLine("namespace " + NameSpace + ".OpenGL");
            file.WriteLine("{");

            string tab = "\t";                                                                     //Definimos tabulación.

            file.WriteLine(tab + "public static partial class GLES");                              //Declaramos Clase Estatica contenedora de los métodos.
            file.WriteLine(tab + "{");                                                             //Abrimos clase

            List <string> ExtensionsKeysList = new List <string>(glReader.d_Gles_Extensions.Keys); //Creamos lista de nombres de las Extensiones para ordenar.

            ExtensionsKeysList.Sort();
            for (int ext = 0; ext < ExtensionsKeysList.Count; ext++)
            {
                bool IsGles = false;
                foreach (glExtension vers in glReader.d_Gles_Extensions.Values)
                {
                    if (vers.Metodos.Contains(ExtensionsKeysList[ext]))
                    {
                        IsGles = true;
                    }
                }

                if (!IsGles)
                {
                    continue;
                }                                                                             // Si no es de OpenGL|ES nos lo saltamos.

                file.WriteLine(tab + tab + "public static class " + ExtensionsKeysList[ext]); //Declaramos Clase Estatica contenedora de los métodos.
                file.WriteLine(tab + tab + "{");                                              //Abrimos clase EXT

                glReader.d_Extensions[ExtensionsKeysList[ext]].Metodos.Sort();                //Ordenamos lista alfabeticamente.

                for (int i = 0; i < glReader.d_Extensions[ExtensionsKeysList[ext]].Metodos.Count; i++)
                {
                    string key = glReader.d_Extensions[ExtensionsKeysList[ext]].Metodos[i];

                    if (glReader.d_Commandos.ContainsKey(key))
                    {
                        DataObjects.glCommand commandTemp = glReader.d_Commandos[key]; //Recuperamos el comando.

                        //Ahora Escribir Método.
                        string s_metodo = tab + tab + tab + "public static "; //Iniciamos escritura del método.
                        s_metodo += commandTemp.EsInseguro ? "unsafe " : "";
                        s_metodo += commandTemp.ReturnedType + (commandTemp.ReturnedTypePointer? "* " : " ") + key + "(";
                        foreach (string keyParam in commandTemp.Parametros.Keys) //Recorremos lista deparametros para añadirlos uno a uno.
                        {
                            glParam param = commandTemp.Parametros[keyParam];    //Obtenemos el parametro.
                            //s_metodo += param.tipo + (param.esArray? "[] ": " ") + keyParam + ", "; //Añadimos tipo, si es array y el nombre del parametro.
                            string s_ptn  = "";
                            string s_tipo = param.tipo;
                            if (param.esPuntero > 0)
                            {
                                if (s_tipo == "char")
                                {
                                    if (param.Acces == AccesParam.In)
                                    {
                                        //s_tipo = "[MarshalAs(UnmanagedType.LPStr)] string" + ((param.esPuntero>1) ? "[]" : "");
                                        s_tipo = "string" + ((param.esPuntero > 1) ? "[]" : "");
                                    }
                                    else
                                    {
                                        s_tipo = "StringBuilder" + ((param.esPuntero > 1) ? "[]" : "");
                                    }
                                }
                                else
                                {
                                    for (int ptn = 0; ptn < param.esPuntero; ptn++)
                                    {
                                        s_ptn += "*";
                                    }
                                }
                            }
                            s_metodo += s_tipo + s_ptn + " " + keyParam + ", ";

                            //s_metodo += param.tipo + (param.esPuntero? "* ": " ") + keyParam + ", "; //Añadimos tipo, si es puntero y el nombre del parametro.
                        }

                        if (commandTemp.Parametros.Count > 0)
                        {
                            s_metodo = s_metodo.Substring(0, s_metodo.Length - 2);
                        }                                      //Quitamos última coma y espacio si se han escrito parametros.
                        s_metodo += ")";                       //Cerramos enunciado de método.

                        file.WriteLine(s_metodo);              //Escribimos enunciado de método en archivo.
                        file.WriteLine(tab + tab + tab + "{"); //Abrimos metodo

                        //Ahora a escribir llamada.
                        string s_llamada = "" + tab + tab + tab + tab + ((commandTemp.ReturnedType != "void") ? "return " : ""); //Definimos si retorna valor.
                        s_llamada += "internalGLES." + key + "(";                                                                //Iniciamos escritura de la llamada a metodo interno delegado.
                        foreach (string keyParam in commandTemp.Parametros.Keys)                                                 //Recorremos lista deparametros para añadirlos uno a uno.
                        {
                            s_llamada += keyParam + ", ";
                        }
                        if (commandTemp.Parametros.Count > 0)
                        {
                            s_llamada = s_llamada.Substring(0, s_llamada.Length - 2);
                        }                                      //Quitamos última coma y espacio si se han escrito parametros.
                        s_llamada += ");";
                        file.WriteLine(s_llamada);             //Escribimos la llamada la metod interno delegado
                        file.WriteLine(tab + tab + tab + "}"); //Cerramos Método
                        if (i < glReader.d_Extensions[ExtensionsKeysList[ext]].Metodos.Count - 1)
                        {
                            file.WriteLine();
                        }
                    }
                }

                file.WriteLine(tab + tab + "}"); //Cerramos Clase EXT
                if (ext < ExtensionsKeysList.Count - 1)
                {
                    file.WriteLine();
                }
            }

            file.WriteLine(tab + "}"); //Cerramos Clase GL
            file.WriteLine("}");       //Cerramos Espacio de Nombres
            file.WriteLine();
            file.Close();              //Cerramos Archivo.

            if (verbose)               //Si Verbose mode mostramos la finalización del proceso.
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Generated File");
                Console.ResetColor();
                Console.WriteLine(": GlesExtMethods.cs");
            }
        }
Beispiel #5
0
        private static void WriteInternals(string NameSpace, string outpath, bool verbose)
        {
            if (verbose) //Si Verbose mode mostramos inicio del proceso.
            {
                Console.WriteLine(); Console.WriteLine("Generating File: OpenGLInternals.cs");
            }
            if (!Directory.Exists(outpath)) // Si la ruta no existe la creamos
            {
                Directory.CreateDirectory(outpath);
            }
            if (File.Exists(outpath + "OpenGLInternals.cs")) //Si existe algun archivo previo lo eliminamos.
            {
                File.Delete(outpath + "OpenGLInternals.cs");
            }
            StreamWriter file = File.CreateText(outpath + "OpenGLInternals.cs"); //Generamos Contenido del archivo.

            file.WriteLine("// OpenGL Internals.");
            file.WriteLine("// File Created with OpenGL Parser 3.");
            file.WriteLine("// Developed by Luis Guijarro Pérez.");
            file.WriteLine();

            file.WriteLine("using System;");
            file.WriteLine();
            file.WriteLine("namespace " + NameSpace + ".OpenGL");
            file.WriteLine("{");

            string tab = "\t";                                        //Definimos tabulación.

            file.WriteLine(tab + "internal static class internalGL"); //Declaramos Clase Estatica contenedora de los métodos.
            file.WriteLine(tab + "{");                                //Abrimos clase


            List <string> CommandsKeysList = new List <string>(glReader.d_Commandos.Keys); //Creamos lista de nombres de comandos para ordenar.

            CommandsKeysList.Sort();                                                       //Ordenamos lista alfabeticamente.


            char LastFirstLetter = ' ';                            // Creamos variable para recoger la ultima primera letra de metodo empleada.

            for (int key = 0; key < CommandsKeysList.Count; key++) //Recorremos la lista de Comandos
            {
                //Definir Regiones Alfabeticas.
                DataObjects.glCommand commandTemp = glReader.d_Commandos[CommandsKeysList[key]]; //Recuperamos el comando.
                char ActualLetter = CommandsKeysList[key].Replace("gl", "").Substring(0, 1).ToCharArray()[0];

                if (ActualLetter != LastFirstLetter)              //Si la nueva letra no es la ultima
                {
                    if (LastFirstLetter != ' ')                   //Comprovamos que no es la primera
                    {
                        file.WriteLine(tab + tab + "#endregion"); //Cerramos región
                        file.WriteLine();
                    }
                    LastFirstLetter = ActualLetter;                                                      //Establecemos nueva letra
                    file.WriteLine(tab + tab + "#region " + LastFirstLetter.ToString().ToUpper() + ":"); //Abrimos región
                    file.WriteLine();
                }

                file.WriteLine(tab + tab + "internal static delegatesGL." + CommandsKeysList[key] + " " + CommandsKeysList[key] + ";");
                file.WriteLine();
            }

            file.WriteLine(tab + tab + "#endregion"); //Escribimos el último endregion.
            file.WriteLine();

            file.WriteLine(tab + "}"); //Cerramos Clase
            file.WriteLine("}");       //Cerramos Espacio de Nombres
            file.WriteLine();
            file.Close();              //Cerramos Archivo.

            if (verbose)               //Si Verbose mode mostramos la finalización del proceso.
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Generated File");
                Console.ResetColor();
                Console.WriteLine(": OpenGLInternals.cs");
            }
        }
Beispiel #6
0
        private static void WriteDelegates(string NameSpace, string outpath, bool verbose)
        {
            if (verbose) //Si Verbose mode mostramos inicio del proceso.
            {
                Console.WriteLine(); Console.WriteLine("Generating File: OpenGLDelegates.cs");
            }
            if (!Directory.Exists(outpath)) // Si la ruta no existe la creamos
            {
                Directory.CreateDirectory(outpath);
            }
            if (File.Exists(outpath + "OpenGLDelegates.cs")) //Si existe algun archivo previo lo eliminamos.
            {
                File.Delete(outpath + "OpenGLDelegates.cs");
            }
            StreamWriter file = File.CreateText(outpath + "OpenGLDelegates.cs"); //Generamos Contenido del archivo.

            file.WriteLine("// OpenGL Delegates.");
            file.WriteLine("// File Created with OpenGL Parser 3.");
            file.WriteLine("// Developed by Luis Guijarro Pérez.");
            file.WriteLine();

            file.WriteLine("using System;");
            file.WriteLine("using System.Text;");
            file.WriteLine("using System.Runtime.InteropServices;");
            file.WriteLine();
            file.WriteLine("namespace " + NameSpace + ".OpenGL");
            file.WriteLine("{");

            string tab = "\t";                                         //Definimos tabulación.

            file.WriteLine(tab + "internal static class delegatesGL"); //Declaramos Clase Estatica contenedora de los métodos.
            file.WriteLine(tab + "{");                                 //Abrimos clase



            List <string> CommandsKeysList = new List <string>(glReader.d_Commandos.Keys); //Creamos lista de nombres de comandos para ordenar.

            CommandsKeysList.Sort();                                                       //Ordenamos lista alfabeticamente.


            char LastFirstLetter = ' ';                            // Creamos variable para recoger la ultima primera letra de metodo empleada.

            for (int key = 0; key < CommandsKeysList.Count; key++) //Recorremos la lista de Comandos
            {
                //Definir Regiones Alfabeticas.
                DataObjects.glCommand commandTemp = glReader.d_Commandos[CommandsKeysList[key]]; //Recuperamos el comando.
                char ActualLetter = CommandsKeysList[key].Replace("gl", "").Substring(0, 1).ToCharArray()[0];

                if (ActualLetter != LastFirstLetter)              //Si la nueva letra no es la ultima
                {
                    if (LastFirstLetter != ' ')                   //Comprovamos que no es la primera
                    {
                        file.WriteLine(tab + tab + "#endregion"); //Cerramos región
                        file.WriteLine();
                    }
                    LastFirstLetter = ActualLetter;                                                      //Establecemos nueva letra
                    file.WriteLine(tab + tab + "#region " + LastFirstLetter.ToString().ToUpper() + ":"); //Abrimos región
                    file.WriteLine();
                }

                //Crear Delegados.
                string s_delegate = tab + tab + "internal" + (commandTemp.EsInseguro? " unsafe " : " ") + "delegate ";
                s_delegate += commandTemp.ReturnedType + (commandTemp.ReturnedTypePointer? "* " : " ") + CommandsKeysList[key] + "(";
                foreach (string keyParam in commandTemp.Parametros.Keys) //Recorremos lista deparametros para añadirlos uno a uno.
                {
                    glParam param = commandTemp.Parametros[keyParam];    //Obtenemos el parametro.
                    //s_delegate += param.tipo + (param.esArray? "[] ": " ") + keyParam + ", "; //Añadimos tipo, si es array y el nombre del parametro.
                    string s_ptn  = "";
                    string s_tipo = param.tipo;
                    if (param.esPuntero > 0) // Es punter?
                    {
                        if (s_tipo == "char")
                        {
                            if (param.Acces == AccesParam.In)
                            {
                                //s_tipo = "[MarshalAs(UnmanagedType.LPStr)] string" + ((param.esPuntero>1) ? "[]" : "");
                                s_tipo = "string" + ((param.esPuntero > 1) ? "[]" : "");
                            }
                            else
                            {
                                s_tipo = "StringBuilder" + ((param.esPuntero > 1) ? "[]" : "");
                            }
                        }
                        else
                        {
                            for (int ptn = 0; ptn < param.esPuntero; ptn++)
                            {
                                s_ptn += "*";
                            }
                        }
                    }
                    s_delegate += s_tipo + s_ptn + " " + keyParam + ", "; //Añadimos tipo, si es puntero y numero de asteriscos y el nombre del parametro.

                    // s_delegate += param.tipo + ((param.esPuntero>0)? "* ": " ") + keyParam + ", "; //Añadimos tipo, si es array y el nombre del parametro.
                }
                if (commandTemp.Parametros.Count > 0)
                {
                    s_delegate = s_delegate.Substring(0, s_delegate.Length - 2);
                }                           //Quitamos última coma y espacio si se han escrito parametros.
                s_delegate += ");";         //Cerramos enunciado de método.
                file.WriteLine(s_delegate); //Escribimos enunciado de método en archivo.
            }

            file.WriteLine(tab + tab + "#endregion"); //Escribimos el último endregion.
            file.WriteLine();

            file.WriteLine(tab + "}"); //Cerramos Clase
            file.WriteLine("}");       //Cerramos Espacio de Nombres
            file.WriteLine();
            file.Close();              //Cerramos Archivo.

            if (verbose)               //Si Verbose mode mostramos la finalización del proceso.
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Generated File");
                Console.ResetColor();
                Console.WriteLine(": OpenGLDelegates.cs");
            }
        }