public static int Main(string[] args) { try { Trace.Listeners.Add(new ConsoleTraceListener()); FileUtils.TryToDelete(Path.Combine(MainExecutingFile.Directory, "Log.txt")); Trace.Listeners.Add(new DefaultTraceListener { LogFileName = Path.Combine(MainExecutingFile.Directory, "Log.txt") }); var argsLoaded = false; if (args.Length > 0) { try { if (File.Exists(args[0])) { var extraFileArgs = Path.Combine(Path.GetDirectoryName(args[0]) ?? ".", "Baked Shadows Params.txt"); if (File.Exists(extraFileArgs)) { args = File.ReadAllLines(extraFileArgs).Where(x => !string.IsNullOrWhiteSpace(x) && !x.TrimStart().StartsWith("#")) .Union(args).ToArray(); argsLoaded = true; } else { extraFileArgs = Path.Combine(Path.GetDirectoryName(args[0]) ?? ".", "Baked_Shadows_Params.txt"); if (File.Exists(extraFileArgs)) { args = File.ReadAllLines(extraFileArgs).Where(x => !string.IsNullOrWhiteSpace(x) && !x.TrimStart().StartsWith("#")) .Union(args).ToArray(); argsLoaded = true; } } } } catch { // ignored } } if (!argsLoaded) { var extraArgs = Path.Combine(MainExecutingFile.Directory, "Arguments.txt"); if (File.Exists(extraArgs)) { args = File.ReadAllLines(extraArgs).Where(x => !string.IsNullOrWhiteSpace(x) && !x.TrimStart().StartsWith("#")) .Union(args).ToArray(); } } var options = new Options(); if (!Parser.Default.ParseArguments(args, options) || options.Items.Count == 0 || options.Help) { Trace.WriteLine(options.GetUsage()); return(options.Help ? 0 : 1); } string mainKn5 = null; string destination; var includeKn5 = new List <string>(); var occludersKn5 = new List <string>(); if (options.Items[0].EndsWith(".ini")) { var ini = new IniFile(options.Items[0]); var trackDirectory = Path.GetDirectoryName(ini.Filename) ?? "."; var first = true; includeKn5.Clear(); occludersKn5.Clear(); foreach (var model in ini.GetSections("MODEL").Select(x => x.GetNonEmpty("FILE")).NonNull() .Select(x => Path.Combine(trackDirectory, x)).Where(File.Exists)) { if (first) { first = false; mainKn5 = model; } else { includeKn5.Add(model); } } destination = Path.Combine(trackDirectory, Path.GetFileNameWithoutExtension(ini.Filename) + ".vao-patch"); } else { mainKn5 = options.Items[0]; destination = options.Destination ?? options.Items[0]; var trackDirectory = Path.GetDirectoryName(mainKn5) ?? "."; if (!options.ModifyKn5Directly) { if (!string.IsNullOrWhiteSpace(options.IncludeKn5Filter)) { var includeFilter = Filter.Create(StringTester.Instance, options.IncludeKn5Filter, new FilterParams { StringMatchMode = StringMatchMode.CompleteMatch }); foreach (var file in Directory.GetFiles(trackDirectory, "*.kn5").Where(x => includeFilter.Test(Path.GetFileName(x)) && !FileUtils.ArePathsEqual(x, mainKn5))) { includeKn5.Add(file); destination = Path.Combine(trackDirectory, Path.GetFileName(trackDirectory)) + ".kn5"; } } } if (!string.IsNullOrWhiteSpace(options.OccludersKn5Filter ?? options.CommonKn5Filter)) { var occludersFilter = Filter.Create(StringTester.Instance, options.OccludersKn5Filter ?? options.CommonKn5Filter, new FilterParams { StringMatchMode = StringMatchMode.CompleteMatch }); foreach (var file in Directory.GetFiles(trackDirectory, "*.kn5").Where(x => occludersFilter.Test(Path.GetFileName(x)) && !FileUtils.ArePathsEqual(x, mainKn5))) { occludersKn5.Add(file); } } } if (mainKn5 == null) { throw new Exception("Main KN5 not found"); } using (var bakery = new MainBakery(mainKn5, options.Filter, options.IgnoreFilter, !options.ModifyKn5Directly) { AoOpacity = options.AoOpacity, AoMultiplier = options.AoMultiplier, SaturationGain = options.SaturationGain, SaturationInputMultiplier = options.SaturationInputMultiplier, CameraFov = options.CameraFov, CameraNear = options.CameraNear, CameraFar = options.CameraFar, CameraNormalOffsetUp = options.CameraNormalOffsetUp, CameraOffsetAway = options.CameraOffsetAway, CameraOffsetUp = options.CameraOffsetUp, OccludersDistanceThreshold = options.OccludersDistanceThreshold, MergeVertices = options.MergeVertices, MergeThreshold = options.MergeThreshold, OccludersSplitThreshold = options.OccludersSplitThreshold, QueueSize = options.QueueSize, SampleResolution = options.SampleResolution, ExtraPassBrightnessGain = options.ExtraPassBrightnessGain, HdrSamples = options.HdrSamples, Ground = !options.NoGround, SyncNormalsFilter = options.SyncNormals, SyncNormalsPartiallyFilter = options.SyncNormalsPartially, SyncNormalsPartiallyValue = options.SyncNormalsPartiallyValue, ExtraPass = options.ExtraPass, TreeFilter = options.TreeFilter, GrassFilter = options.GrassFilter, RegularObjectsFilter = options.RegularObjectsFilter, SkipOccludersFilter = options.SkipOccludersFilter, SpecialGrassAmbient = !options.NoSpecialGrassAmbient, SurfacesFilter = options.Surfaces, SurfacesAoOpacity = options.SurfacesAoOpacity, SetMiltiplierForSkipped = options.SetMiltiplierForSkipped, }) { if (!string.IsNullOrWhiteSpace(options.DebugPos)) { bakery.DebugMode = true; bakery.DebugPoint = options.DebugPos.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries) .Select(x => (float)FlexibleParser.ParseDouble(x)) .ToArray().ToVector3(); bakery.DebugRadius = options.DebugRange; Console.WriteLine("Debug mode: " + bakery.DebugPoint); } bakery.LoadExtraKn5(includeKn5, occludersKn5).Work(destination); } Trace.Listeners.Clear(); return(0); } catch (Exception e) { Trace.WriteLine(e.ToString()); return(2); } finally { if (ParentProcessUtilities.GetParentProcess().ProcessName == "explorer") { Console.ReadLine(); } } }
private static extern int NtQueryInformationProcess(IntPtr processHandle, int processInformationClass, ref ParentProcessUtilities processInformation, int processInformationLength, out int returnLength);