private DumpedShaderInfo DumpShader() { DumpedShaderInfo result = new DumpedShaderInfo(); string text = Span.ToString(); var lines = text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); var lineCount = lines.Length; var sparkLineRanges = new SourceRange[lineCount]; var lineErrorMasks = new string[lineCount][]; var hlslLineRemap = new int[lineCount]; var rangeStack = new Stack<SourceRange>(); rangeStack.Push(_defaultRange); var writer = new System.IO.StringWriter(); var maskedErrors = new Stack<string>(); int remapLineNumber = 1; for (int ii = 0; ii < lineCount; ++ii) { var line = lines[ii]; var lineNumber = ii + 1; hlslLineRemap[ii] = remapLineNumber; if (line.StartsWith(startSourceRange)) { var rangeStr = line.Substring(startSourceRange.Length); SourceRange range = SourceRange.Parse(rangeStr); rangeStack.Push(range); } else if (line.StartsWith(endSourceRange)) { rangeStack.Pop(); } else if (line.StartsWith(PushErrorMaskString)) { var errorStr = line.Substring(PushErrorMaskString.Length); maskedErrors.Push(errorStr.Trim()); } else if (line.StartsWith(PopErrorMaskString)) { maskedErrors.Pop(); } else { if (writer != null) writer.WriteLine(lines[ii]); remapLineNumber++; } sparkLineRanges[ii] = rangeStack.Peek(); lineErrorMasks[ii] = maskedErrors.ToArray(); } result.hlslLineRemap = hlslLineRemap; result.sparkLineRanges = sparkLineRanges; result.strippedText = writer.ToString(); result.lineErrorMasks = lineErrorMasks; return result; }
private DumpedFileInfo DumpFile(DumpedShaderInfo shader, string profile) { DumpedFileInfo result = new DumpedFileInfo(); var baseName = string.Format( "{0}_{1}_{2}", _defaultRange.fileName, _shaderClassName, profile); baseName = baseName.Replace('.', '_'); var path = baseName + ".hlsl"; var writer = new System.IO.StreamWriter(path); writer.Write(shader.strippedText); writer.Close(); result.path = path; return result; }