public static void SaveToFile(DemoModel demo, string fileName) { var data = new DemoData2.DemoData2(); Save(demo, data); data.ConvertToRelativePath(Path.GetDirectoryName(Path.GetFullPath(fileName))); data.ObjIntoXMLFile(fileName); }
private MyApplication() { gameWindow.KeyDown += GameWindow_KeyDown; gameWindow.RenderFrame += game_RenderFrame; visualContext = new VisualContext(); var textures = new Textures(visualContext); var shaders = new Shaders(visualContext, NewShaderFile); demo = new DemoModel(visualContext, shaders, textures, false); demo.TimeSource.OnTimeFinished += () => gameWindow.Close(); var arguments = Environment.GetCommandLineArgs(); if (3 > arguments.Length) { MessageBox.Show("DemoRecorder <configfile> <saveDirectory> [<resX> <resY> <frameRate>]" + Environment.NewLine + " Please give the demo config file name as application parameter followed by the render buffer resolution."); gameWindow.Close(); } bufferWidth = gameWindow.Width; bufferHeight = gameWindow.Height; try { bufferWidth = int.Parse(arguments.ElementAt(3)); bufferHeight = int.Parse(arguments.ElementAt(4)); } catch { bufferWidth = gameWindow.Width; bufferHeight = gameWindow.Height; } try { frameRate = int.Parse(arguments.ElementAt(5)); } catch { frameRate = 25; } try { DemoLoader.LoadFromFile(demo, arguments.ElementAt(1)); saveDirectory = Directory.CreateDirectory(arguments.ElementAt(2)).FullName; saveDirectory += Path.DirectorySeparatorChar; saveDirectory += DateTime.Now.ToString("yyyyMMdd HHmmss"); saveDirectory += Path.DirectorySeparatorChar; Directory.CreateDirectory(saveDirectory); fileNumber = 0; } catch (Exception e) { MessageBox.Show("Error loading demo '" + arguments.ElementAt(1) + '"' + Environment.NewLine + e.Message); gameWindow.Close(); } }
private static bool LoadTextures(IEnumerable<string> textures, DemoModel demo, ErrorEventHandler progressHandler) { foreach (var tex in textures) { bool success = demo.Textures.AddUpdate(tex); if(null != progressHandler) { var msg = success ? "Texture file '" + tex + "' loaded" : "Could not load texture file '" + tex + "'"; var args = new ProgressEventArgs(msg); progressHandler(demo, args); if (args.Cancel) return false; } } return true; }
public static void LoadFromFile(DemoModel demo, string fileName, ErrorEventHandler progressHandler = null) { var data = Serialize.ObjFromXMLFile(fileName, typeof(DemoData2.DemoData2)) as DemoData2.DemoData2; data.ConvertToAbsolutePath(Path.GetDirectoryName(Path.GetFullPath(fileName))); demo.Clear(); if (!LoadSound(data.SoundFileName, demo, progressHandler)) return; foreach (var track in data.Tracks) { //todo1: load track.Name; foreach (var shaderKeyframe in track.ShaderKeyframes) { demo.Shaders.AddUpdateShader(shaderKeyframe.ShaderPath); demo.ShaderKeyframes.AddUpdate(shaderKeyframe.Time, shaderKeyframe.ShaderPath); } } if (!LoadTextures(data.Textures, demo, progressHandler)) return; LoadUniforms(data.Uniforms, demo); }
private MyApplication() { gameWindow.Load += GameWindow_Load; gameWindow.KeyDown += GameWindow_KeyDown; gameWindow.RenderFrame += game_RenderFrame; visualContext = new VisualContext(); var textures = new Textures(visualContext); var shaders = new Shaders(visualContext, NewShaderFile); demo = new DemoModel(visualContext, shaders, textures, false); demo.TimeSource.OnTimeFinished += () => gameWindow.Close(); var arguments = Environment.GetCommandLineArgs(); if (1 == arguments.Length) { MessageBox.Show("DemoPlayer <configfile> [<resX> <resY>]" + Environment.NewLine + " Please give the demo config file name you wish to play as application parameter followed by the render buffer resolution."); gameWindow.Close(); } bufferWidth = gameWindow.Width; bufferHeight = gameWindow.Height; try { bufferWidth = int.Parse(arguments.ElementAt(2)); bufferHeight = int.Parse(arguments.ElementAt(3)); } catch { bufferWidth = gameWindow.Width; bufferHeight = gameWindow.Height; } try { DemoLoader.LoadFromFile(demo, arguments.ElementAt(1)); } catch (Exception e) { MessageBox.Show("Error loading demo '" + arguments.ElementAt(1) + '"' + Environment.NewLine + e.Message); gameWindow.Close(); } }
private static bool LoadSound(string soundFileName, DemoModel demo, ErrorEventHandler progressHandler) { if (!string.IsNullOrWhiteSpace(soundFileName)) { var sound = DemoTimeSource.FromMediaFile(soundFileName); if (null == sound && null != progressHandler) { var args = new ProgressEventArgs("Could not load sound file '" + soundFileName + "'"); progressHandler(demo, args); if (args.Cancel) return false; } demo.TimeSource.Load(sound); if (null != sound && null != progressHandler) { var args = new ProgressEventArgs("Sound file '" + soundFileName + "' loaded"); progressHandler(demo, args); if (args.Cancel) return false; } } return true; }
private void GlControl_Load(object sender, EventArgs eArgs) { try { demo = DemoModelFactory.Create(this); //make for valid time source even if no new demo is loaded afterwards (when starting with shader cmd line argument) Demo_OnTimeSourceLoaded(null, EventArgs.Empty); demo.OnSetCustomUniforms += Demo_OnSetCustomUniforms; demo.TimeSource.OnLoaded += Demo_OnTimeSourceLoaded; demo.Uniforms.OnAdd += Uniforms_OnAdd; demo.Uniforms.OnRemove += Uniforms_OnRemove; demo.Uniforms.OnAdd += multiGraph.Uniforms_OnAdd; demo.Uniforms.OnRemove += multiGraph.Uniforms_OnRemove; demo.Uniforms.OnChangeKeyframes += multiGraph.Uniforms_OnChange; demo.Uniforms.OnChangeKeyframes += (s, a) => camera.UpdateFromUniforms(demo.Uniforms, demo.TimeSource.Position); demo.Uniforms.OnChangeKeyframes += (s, a) => glControl.Invalidate(); demo.Shaders.OnChange += Shaders_OnChange; demo.ShaderKeyframes.OnChange += ShaderKeframes_OnChange; demo.Textures.OnChange += Textures_OnChange; } catch (Exception e) { log.Append(e.Message); } }
private static void LoadUniforms(IEnumerable<Uniform> uniforms, DemoModel demo) { foreach (var uniform in uniforms) { demo.Uniforms.Add(uniform.UniformName); var kfs = demo.Uniforms.GetKeyFrames(uniform.UniformName); foreach (var kf in uniform.Keyframes) { kfs.AddUpdate(kf.Time, kf.Value); } } }
private static void Save(DemoModel demo, DemoData2.DemoData2 data) { data.SoundFileName = demo.TimeSource.SoundFileName; data.Textures = demo.Textures.ToList(); var track = new Track(); track.Name = "sum"; data.Tracks.Add(track); foreach (var element in demo.ShaderKeyframes.Items) { track.ShaderKeyframes.Add(new ShaderKeyframe(element.Key, element.Value)); } foreach (var uniform in demo.Uniforms.Names) { var un = new Uniform(uniform, demo.Uniforms.GetKeyFrames(uniform)); data.Uniforms.Add(un); } }