diff --git a/SeeSharp/Experiments/Benchmark.cs b/SeeSharp/Experiments/Benchmark.cs index a9ea24b..0f796f5 100644 --- a/SeeSharp/Experiments/Benchmark.cs +++ b/SeeSharp/Experiments/Benchmark.cs @@ -59,7 +59,9 @@ void RunScene(SceneConfig sceneConfig, string format, bool skipReference) { experiment.OnStartScene(scene, dir, sceneConfig.MinDepth, sceneConfig.MaxDepth); var methods = experiment.MakeMethods(); - foreach (var method in methods) { + for (int i = 0; i < methods.Count; ++i) { + var method = methods[i]; + string path = Path.Join(dir, method.Name); Logger.Log($"Rendering {sceneConfig.Name} with {method.Name}"); @@ -78,6 +80,11 @@ void RunScene(SceneConfig sceneConfig, string format, bool skipReference) { scene.FrameBuffer.MetaData["RayStats"] = scene.Raytracer.Stats; scene.FrameBuffer.MetaData["ShadeStats"] = ShadingStats.Current; scene.FrameBuffer.WriteToFile(); + + if (experiment.DeleteMethodAfterRun) { + methods.RemoveAt(i); + i--; + } } experiment.OnDoneScene(scene, dir, sceneConfig.MinDepth, sceneConfig.MaxDepth); } diff --git a/SeeSharp/Experiments/Experiment.cs b/SeeSharp/Experiments/Experiment.cs index ff822a2..6b51402 100644 --- a/SeeSharp/Experiments/Experiment.cs +++ b/SeeSharp/Experiments/Experiment.cs @@ -29,6 +29,12 @@ public Method(string name, Integrator integrator) { } } + /// + /// If true, the Benchmark will drop the method reference after execution. This allows costly integrator + /// data to be freed as soon as possible. Disadvantage: all integrator state will be lost. The default is false. + /// + public virtual bool DeleteMethodAfterRun => false; + /// /// Factory function for the methods. ///