public void ParseTypes(string input, MessageType[] types) { var parser = new ShaderLogParser(input); Assert.AreEqual(types.Length, parser.Lines.Count()); for (int i = 0; i < types.Length; ++i) { Assert.AreEqual(types[i], parser.Lines.ElementAt(i).Type); } }
public void ParseFirstOutputLine(string input, int lineNumber, MessageType type, string fileId) { var parser = new ShaderLogParser(input); Assert.AreEqual(1, parser.Lines.Count()); var line = parser.Lines.First(); Assert.AreEqual(lineNumber, line.LineNumber); Assert.AreEqual(type, line.Type); Assert.AreEqual(fileId, line.FileId); }
public void Parse6Errors() { var input = "\nERROR: 0:9: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON\nERROR: 1 compilation errors. No code generated.\n\n\nERROR: 0:9: 'dist' : undeclared identifier\nERROR: 0:9: 'dist' : redefinition\nERROR: 0:9: '' : compilation terminated\nERROR: 3 compilation errors. No code generated.\n\n"; var parser = new ShaderLogParser(input); Assert.AreEqual(6, parser.Lines.Count()); Assert.AreEqual(9, parser.Lines.First().LineNumber); Assert.AreEqual(9, parser.Lines.ElementAt(1).LineNumber); Assert.AreEqual(9, parser.Lines.ElementAt(2).LineNumber); Assert.AreEqual(9, parser.Lines.ElementAt(3).LineNumber); Assert.AreEqual(MessageType.Error, parser.Lines.ElementAt(3).Type); Assert.AreEqual(MessageType.Message, parser.Lines.Last().Type); }
/// <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); } }
private void TaskGlAction() { //create a game window for rendering context, until run is called it is invisible so no problem var context = new GameWindow(1, 1); while (!compileRequests.IsAddingCompleted) { var compileData = compileRequests.Take(); //block until compile requested var expandedCode = ExpandedCode(compileData.ShaderCode, compileData.DocumentDir); var log = Compile(expandedCode, compileData.ShaderType); var errorLog = new ShaderLogParser(log); compileData.CompilationFinished?.Invoke(errorLog.Lines); } }
private void TaskGlAction() { //create a game window for rendering context, until run is called it is invisible so no problem var context = new GameWindow(1, 1); while (!compileRequests.IsAddingCompleted) { var compileData = compileRequests.Take(); //block until compile requested var expandedCode = ExpandedCode(compileData.ShaderCode, compileData.DocumentDir); var log = Compile(expandedCode, compileData.ShaderType); var errorLog = new ShaderLogParser(log); if (!string.IsNullOrWhiteSpace(log) && OptionsPagePackage.Options.PrintCompilationResult) { OutMessage.OutputWindowPane(log); } compileData.CompilationFinished?.Invoke(errorLog.Lines); } }
public void EmptyLog() { var input = @""; var parser = new ShaderLogParser(input); Assert.IsTrue(parser.Lines.Count() == 0); }