private void RequestCompileShader(SquiggleTagger tagger, string shaderCode, string shaderType, string documentDir) { if (shaderCompiler is null) { return; } //if not currently compiling then compile shader from changed text otherwise add to the "to be compiled" list var options = OptionsPagePackage.Options; if (!options.LiveCompiling) { tagger.UpdateErrors(new List <ShaderLogLine>()); return; } shaderCompiler.RequestCompile(shaderCode, shaderType, tagger.UpdateErrors, documentDir); }
public ITagger <T> CreateTagger <T>(ITextView textView, ITextBuffer buffer) where T : ITag { //Debug.WriteLine($"CreateTagger: textView={textView}, buffer={buffer}"); // Make sure we are only tagging the top buffer if (!ReferenceEquals(buffer, textView.TextBuffer)) { return(null); } return(buffer.Properties.GetOrCreateSingletonProperty(() => { var tagger = new SquiggleTagger(buffer); var shaderType = buffer.ContentType.TypeName; var observableSourceCode = Observable.Return(buffer.CurrentSnapshot.GetText()).Concat( Observable.FromEventPattern <TextContentChangedEventArgs>(h => buffer.Changed += h, h => buffer.Changed -= h) .Select(e => e.EventArgs.After.GetText())); void RequestCompileShader(string shaderCode) { //if not currently compiling then compile shader from changed text otherwise add to the "to be compiled" list if (settings.LiveCompiling) { shaderCompiler.RequestCompile(shaderCode, shaderType, tagger.UpdateErrors, GetDocumentDir(buffer)); } else { tagger.UpdateErrors(new List <ShaderLogLine>()); } } observableSourceCode .Throttle(TimeSpan.FromSeconds(settings.CompileDelay * 0.001f)) .Subscribe(sourceCode => RequestCompileShader(sourceCode)); return tagger; }) as ITagger <T>); }