public void StartTask(ImageToProcessItem imageToProcess)
            {
                currentTask = imageToProcess;

                try
                {
                    CreatePreviewGeneratorForResource(imageToProcess.virtualFileName, out var objectOfPreview, out generator);

                    if (generator != null)
                    {
                        generator.Init(viewport, objectOfPreview);

                        viewport.Update(true);

                        //clear temp data
                        viewport.RenderingContext.MultiRenderTarget_DestroyAll();
                        viewport.RenderingContext.DynamicTexture_DestroyAll();

                        texture.Result.GetRealObject(true).BlitTo(viewport.RenderingContext.CurrentViewNumber, textureRead.Result.GetRealObject(true), 0, 0);

                        demandedFrame = textureRead.Result.GetRealObject(true).Read(imageData, 0);
                    }
                    else
                    {
                        ClearTask();
                    }
                }
                catch (Exception e)
                {
                    Log.Warning(e.Message);
                }
            }
            public void ClearTask()
            {
                if (viewport != null)
                {
                    viewport.AttachedScene = null;
                }

                generator?.DetachAndOrDestroyScene();

                currentTask   = null;
                generator     = null;
                demandedFrame = -1;
            }
        public static void AddResourceToProcess(string realFileName)
        {
            try
            {
                var resourceType = ResourceManager.GetTypeByFileExtension(Path.GetExtension(realFileName));
                if (resourceType != null && IsResourceTypeSupported(resourceType))
                {
                    var virtualFileName = VirtualPathUtility.GetVirtualPathByReal(realFileName);
                    if (!string.IsNullOrEmpty(virtualFileName))
                    {
                        //reload already loaded preview
                        var loadedItem = GetLoadedPreview(virtualFileName);
                        if (loadedItem != null)
                        {
                            loadedItem.needReload = true;
                        }

                        //check already added
                        if (GetImageToProcessItemInQueue(virtualFileName) == null)
                        {
                            //too much in queue
                            if (imagesToProcess.Count < maxQueueOfImagesToProcess)
                            {
                                //was added
                                var item = new ImageToProcessItem();
                                item.virtualFileName = virtualFileName;
                                imagesToProcess.Enqueue(item);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.Warning("PreviewImagesManager: NeedRefreshResource: " + e.Message);
            }
        }