Пример #1
0
        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);
        }
Пример #2
0
        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>);
        }