/// <summary> /// Shows the modal. /// </summary> /// <param name="e">The e.</param> /// <returns></returns> public string ShowModal(ShaderException e) { form = new FormShaderException { Text = e.Message }; var compileException = e as ShaderCompileException; if (compileException is null) { form.ShaderSourceCode = string.Empty; } else { form.ShaderSourceCode = compileException.ShaderCode; } //load error list after source code is loaded for highlighting of error to work form.Errors.Clear(); var log = new ShaderLog(e.ShaderLog); foreach (var logLine in log.Lines) { form.Errors.Add(logLine); } var shaderFileName = e.ExtractFileName(); if (string.IsNullOrEmpty(shaderFileName)) { foreach (var logLine in log.Lines) { Debug.Print(shaderFileName + "(" + logLine.LineNumber + "): " + logLine.Message); } } form.Select(0); form.TopMost = true; var oldSource = form.ShaderSourceCode; closeOnFileChange = true; var result = form.ShowDialog(); closeOnFileChange = false; var newShaderSourceCode = DialogResult.OK == result ? form.ShaderSourceCode : oldSource; form = null; if (compileException is null) { return(newShaderSourceCode); } if (newShaderSourceCode != compileException.ShaderCode && !string.IsNullOrEmpty(shaderFileName)) { //save changed code to shader file File.WriteAllText(shaderFileName, newShaderSourceCode); } return(newShaderSourceCode); }
/// <summary> /// Shows the modal. /// </summary> /// <param name="exception">The exception.</param> /// <param name="name">Name or file name of the shader</param> public void ShowModal(ShaderException exception, string name) { form = new FormShaderException { Text = $"'{name}': {exception.GetType()}" }; var compileException = exception as ShaderCompileException; if (compileException is null) { form.ShaderSourceCode = string.Empty; } else { form.Text += " for shader type " + compileException.ShaderType; form.ShaderSourceCode = compileException.ShaderSourceCode; } //load error list after source code is loaded for highlighting of error to work form.Errors.Clear(); var log = new ShaderLogParser(exception.Message); foreach (var logLine in log.Lines) { form.Errors.Add(logLine); } foreach (var logLine in log.Lines) { Debug.Print(name + "(" + logLine.LineNumber + "): " + logLine.Message); } form.Select(0); form.TopMost = true; var oldSource = form.ShaderSourceCode; closeOnFileChange = true; var result = form.ShowDialog(); closeOnFileChange = false; var newShaderSourceCode = DialogResult.OK == result ? form.ShaderSourceCode : oldSource; form = null; if (compileException is null) { return; } if (newShaderSourceCode != compileException.ShaderSourceCode && File.Exists(name)) { //save changed code to shader file File.WriteAllText(name, newShaderSourceCode); } }