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"); } }
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"); } }
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"); } }
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"); } }
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"); } }
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"); } }