private void StartRendering(string pbrtCode)
        {
            _cancellationTokenSource = new CancellationTokenSource();
            var token = _cancellationTokenSource.Token;

            Scene    scene;
            Renderer renderer;

            try
            {
                SceneReader.Read(new StringReader(pbrtCode), out scene, out renderer);
            }
            catch (Exception ex)
            {
                _errorList.AddItem(ErrorListItemType.Error, ex.Message, Path);
                _shell.ShowTool(_errorList);
                return;
            }

            OutputBitmap = renderer.Output;

            Task.Factory.StartNew(() => renderer.Render(scene, token), token)
            .ContinueWith(t =>
            {
                switch (t.Status)
                {
                case TaskStatus.Faulted:
                    _errorList.AddItem(ErrorListItemType.Error, t.Exception.Message);
                    break;
                }
            });
        }
Beispiel #2
0
        private void ProcessResult(ReflectionEmitResult result)
        {
            _errorList.Items.Clear();

            if (!result.Success)
            {
                foreach (var diagnostic in result.Diagnostics)
                {
                    if (!diagnostic.Location.IsInSource)
                    {
                        throw new NotSupportedException("Only support source file locations.");
                    }

                    var itemType    = GetItemType(diagnostic.Info.Severity);
                    var description = diagnostic.Info.GetMessage();
                    var lineSpan    = diagnostic.Location.GetLineSpan(false);

                    _errorList.AddItem(itemType, description,
                                       lineSpan.Path,
                                       lineSpan.StartLinePosition.Line,
                                       lineSpan.StartLinePosition.Character,
                                       () =>
                    {
                        var openDocumentResult = new OpenDocumentResult(lineSpan.Path);
                        IoC.BuildUp(openDocumentResult);
                        openDocumentResult.Execute(null);
                    });
                }
            }

            if (result.IsUncollectible)
            {
                _errorList.AddItem(ErrorListItemType.Message, "The compiled assembly is not garbage collectible.");
            }
        }
Beispiel #3
0
 protected override void WriteInternal(LogLevel level, object message, Exception exception)
 {
     if (message != null)
     {
         _display.AddItem(ErrorListItemType.Message, message.ToString());
     }
     if (exception != null)
     {
         _display.AddItem(ErrorListItemType.Error, exception.ToString());
     }
 }
 private void ProcessResult(EmitResult result)
 {
     foreach (var diagnostic in result.Diagnostics)
     {
         if (!diagnostic.Location.IsInSource)
         {
             throw new NotSupportedException("Only support source file locations.");
         }
         var itemType    = GetItemType(diagnostic.Severity);
         var description = diagnostic.GetMessage();
         var lineSpan    = diagnostic.Location.GetLineSpan();
         _errorList.AddItem(itemType, description,
                            lineSpan.Path,
                            lineSpan.StartLinePosition.Line,
                            lineSpan.StartLinePosition.Character,
                            () =>
         {
             var openDocumentResult = new OpenDocumentResult(lineSpan.Path);
             IoC.BuildUp(openDocumentResult);
             openDocumentResult.Execute(null);
         });
     }
 }