Ejemplo n.º 1
0
        static void GenerateVkStructs(IVkEntityInspector inspector)
        {
            if (!Directory.Exists("Structs"))
            {
                Directory.CreateDirectory("Structs");
            }

            foreach (var container in inspector.Structs.Values)
            {
                using (var interfaceFile = new StreamWriter(Path.Combine("Structs", container.Name + ".cs"), false))
                {
                    interfaceFile.WriteLine("using Magnesium;");
                    interfaceFile.WriteLine("using System;");
                    interfaceFile.WriteLine("using System.Runtime.InteropServices;");
                    interfaceFile.WriteLine("");
                    interfaceFile.WriteLine("namespace Magnesium.Vulkan");
                    interfaceFile.WriteLine("{");
                    string tabbedField = "\t";

                    interfaceFile.WriteLine(tabbedField + "[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]");
                    interfaceFile.WriteLine(tabbedField + "internal struct {0}", container.Name);
                    interfaceFile.WriteLine(tabbedField + "{");

                    var methodTabs = tabbedField + "\t";

                    foreach (var member in container.Members)
                    {
                        interfaceFile.WriteLine(methodTabs + member.GetImplementation());
                    }
                    interfaceFile.WriteLine(tabbedField + "}");
                    interfaceFile.WriteLine("}");
                }
            }
        }
Ejemplo n.º 2
0
        static void GenerateImplementation(VkInterfaceCollection implementation, IVkEntityInspector inspector)
        {
            if (!Directory.Exists("Handles"))
            {
                Directory.CreateDirectory("Handles");
            }

            foreach (var container in implementation.Interfaces)
            {
                VkHandleInfo found;
                if (inspector.Handles.TryGetValue(container.Name, out found))
                {
                    container.Handle = found;
                }

                using (var interfaceFile = new StreamWriter(Path.Combine("Handles", container.Name + ".cs"), false))
                {
                    interfaceFile.WriteLine("using Magnesium;");
                    interfaceFile.WriteLine("using System;");
                    interfaceFile.WriteLine("namespace Magnesium.Vulkan");
                    interfaceFile.WriteLine("{");
                    string tabbedField = "\t";

                    interfaceFile.WriteLine(tabbedField + "public class {0} : {1}", container.Name, container.InterfaceName);
                    interfaceFile.WriteLine(tabbedField + "{");

                    var methodTabs = tabbedField + "\t";

                    if (container.Handle != null)
                    {
                        // create internal field
                        interfaceFile.WriteLine(string.Format("{0}internal {1} Handle = {2};", methodTabs, container.Handle.csType, container.Handle.csType == "IntPtr" ? "IntPtr.Zero" : "0L"));

                        // create constructor
                        interfaceFile.WriteLine(string.Format("{0}internal {1}({2} handle)", methodTabs, container.Name, container.Handle.csType));
                        interfaceFile.WriteLine(methodTabs + "{");
                        interfaceFile.WriteLine(methodTabs + "\tHandle = handle;");
                        interfaceFile.WriteLine(methodTabs + "}");
                        interfaceFile.WriteLine("");
                    }

                    foreach (var method in container.Methods)
                    {
                        interfaceFile.WriteLine(methodTabs + method.GetImplementation());
                        interfaceFile.WriteLine(methodTabs + "{");
                        interfaceFile.WriteLine(methodTabs + "}");
                        interfaceFile.WriteLine("");
                    }
                    interfaceFile.WriteLine(tabbedField + "}");
                    interfaceFile.WriteLine("}");
                }
            }
        }
Ejemplo n.º 3
0
 public VkCommandParser(IVkEntityInspector inspector)
 {
     mInspector = inspector;
 }