Exemplo n.º 1
0
		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);
			}
		}
Exemplo n.º 2
0
		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);
		}
Exemplo n.º 3
0
		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);
		}
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
		public void EmptyLog()
		{
			var input = @"";
			var parser = new ShaderLogParser(input);
			Assert.IsTrue(parser.Lines.Count() == 0);
		}