/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        public static Resource.Instance CreateResource(ResourceType resourceType, Resource.InstanceType instanceType, string name, bool wait,
                                                       Metadata.TypeInfo createResultObjectWithType, bool componentCreateHierarchyController, bool?componentSetEnabled, out string error)
        {
            //!!!!
            if (!wait)
            {
                Log.Fatal("ResourceManager: CreateResource: wait == false. Background loading is not implemented.");
            }

            error = "";

            //!!!!!threading

            if (string.IsNullOrEmpty(name))
            {
                Log.Fatal("ResourceManager: CreateResource: The name can't be empty.");
                return(null);
            }

            Resource res;

            Resource.Instance ins;
            bool insCreated = false;

            lock ( lockObject )
            {
                //get or create resource
                res = GetByName(name);
                if (res == null)
                {
                    //!!!!override loader

                    ConstructorInfo constructor = resourceType.resourceClass.GetConstructor(new Type[0]);
                    res = (Resource)constructor.Invoke(new object[0]);
                    res.resourceType = resourceType;
                    res.name         = name;
                    res.loadFromFile = true;

                    //add to the list
                    resources.Add(GetKey(name), res);
                }

                //create instance
                if (instanceType == Resource.InstanceType.Resource)
                {
                    //as Resource
                    if (res.PrimaryInstance == null)
                    {
                        ins = res.CreateInstanceClassObject(instanceType, componentCreateHierarchyController, componentSetEnabled);
                        res.PrimaryInstance = ins;
                        insCreated          = true;
                    }
                    else
                    {
                        ins = res.PrimaryInstance;
                    }
                }
                else
                {
                    //as Separate instance
                    ins        = res.CreateInstanceClassObject(instanceType, componentCreateHierarchyController, componentSetEnabled);
                    insCreated = true;
                }
            }

            if (insCreated)
            {
                if (createResultObjectWithType != null)
                {
                    object obj = createResultObjectWithType.InvokeInstance(null);

                    var component = obj as Component;
                    if (component != null)
                    {
                        if (componentSetEnabled != null)
                        {
                            component.Enabled = componentSetEnabled.Value;
                        }
                        if (componentCreateHierarchyController)
                        {
                            ComponentUtility.CreateHierarchyControllerForRootComponent(component, ins, true);                              //, true );
                        }
                    }

                    ins.ResultObject = obj;
                }

                //resource is ready
                ins.Status = Resource.Instance.StatusEnum.Ready;
            }
            ////_Load function
            //if( insCreated )
            //{
            //	//load

            //	if( wait )
            //	{
            //		LoadTaskFunction( ins );
            //	}
            //	else
            //	{
            //		Task task = new Task( LoadTaskFunction, ins );
            //		task.Start();
            //	}
            //}

            //wait
            if (wait)
            {
                //wait end of creation
                while (ins.Status == Resource.Instance.StatusEnum.CreationProcess)
                {
                    //!!!!slow? maybe we can increase priority for this instance or something like this?

                    if (VirtualFileSystem.MainThread == Thread.CurrentThread)
                    {
                        //process main thread tasks
                        EngineThreading.ExecuteQueuedActionsFromMainThread();
                    }

                    //!!!!?
                    Thread.Sleep(0);
                }
            }

            //!!!!так?
            if (wait && ins.Status == Resource.Instance.StatusEnum.Error)
            {
                error = ins.StatusError;
                ins.Dispose();
                return(null);
            }

            return(ins);
        }
Exemple #2
0
            protected virtual void Load()
            {
                //override behavior by event
                if (ResultObject == null)
                {
                    bool handled = false;
                    LoadOverride?.Invoke(this, ref handled);
                    if (handled)
                    {
                        return;
                    }
                }

                //default behavior
                if (ResultObject == null)
                {
                    //load block
                    if (Owner.LoadedBlock == null)
                    {
                        string error;
                        Owner.LoadedBlock = TextBlockUtility.LoadFromVirtualFile(Owner.Name, out error);
                        if (Owner.LoadedBlock == null)
                        {
                            //!!!!
                            // comment this fatal !
                            //Log.Fatal( error );

                            //TODO: also we can use exceptions!
                            //throw new Exception( error );

                            StatusError = error;
                            Status      = StatusEnum.Error;

                            return;
                        }
                    }

                    //parse text block
                    string error2;
                    var    component = ComponentUtility.LoadComponentFromTextBlock(null, Owner.LoadedBlock, Owner.Name, this, componentSetEnabled,
                                                                                   componentCreateHierarchyController, out error2);
                    //var component = ComponentUtils.LoadComponentFromTextBlock( Owner.LoadedBlock, Owner.Name, null, out error2 );
                    if (component == null)
                    {
                        ////!!!!!!!
                        //Log.Fatal( "impl" );
                        //!!!!!
                        StatusError = error2;
                        Status      = StatusEnum.Error;
                        return;
                    }

                    //!!!!

                    //if( componentSetEnabled != null )
                    //	component.Enabled = componentSetEnabled.Value;

                    //xx xx;
                    //xx xx;//сначала выключить иерархию? потом всем разом включится?

                    ////!!!!возможно это раньше нужно делать, т.к. в GetProvidedType() что-то там надо
                    //if( componentCreateHierarchyController )
                    //	ComponentUtils.CreateHierarchyControllerForRootComponent( component, this, true );//, true );

                    //resource is ready
                    //ResultObject = component;
                    Status = StatusEnum.Ready;
                }
            }
Exemple #3
0
        protected override void OnRenderUI(CanvasRenderer renderer)
        {
            base.OnRenderUI(renderer);

            Vector2I size = GetNeededSize();

            if (browser == null)
            {
                CreateBrowser();
            }

            //update brower engine and texture
            if (browser != null)
            {
                if (viewSize != size /*&& !browser.IsResizing */)
                {
                    var oldSize = viewSize;
                    viewSize = size;
                    OnResized(oldSize, viewSize);
                }

                //create texture
                if (texture == null || textureSize != size || needRecreateTexture)
                {
                    if (texture != null)
                    {
                        texture.Dispose();
                        texture = null;
                    }

                    textureSize = size;

                    bool mipmaps = false;
                    //!!!!
                    //if( ControlManager != null && ControlManager is UI3DControlContainer )
                    //	mipmaps = renderingIn3DMipmaps;

                    var usage = Component_Image.Usages.WriteOnly;
                    if (mipmaps)
                    {
                        usage |= Component_Image.Usages.AutoMipmaps;
                    }

                    texture               = ComponentUtility.CreateComponent <Component_Image>(null, true, false);
                    texture.CreateType    = Component_Image.TypeEnum._2D;
                    texture.CreateSize    = textureSize;
                    texture.CreateMipmaps = mipmaps;                    // ? -1 : 0;
                    texture.CreateFormat  = PixelFormat.A8R8G8B8;
                    texture.CreateUsage   = usage;
                    texture.Enabled       = true;

                    //Log.Info( textureSize.ToString() );

                    //if( mipmaps )
                    //{
                    //	texture = TextureManager.Instance.Create( textureName, Texture.Type.Type2D, textureSize,
                    //		1, -1, PixelFormat.A8R8G8B8, Texture.Usage.DynamicWriteOnlyDiscardable | Texture.Usage.AutoMipmap );
                    //}
                    //else
                    //{
                    //	texture = TextureManager.Instance.Create( textureName, Texture.Type.Type2D, textureSize,
                    //		1, 0, PixelFormat.A8R8G8B8, Texture.Usage.DynamicWriteOnlyDiscardable );
                    //}

                    needUpdateTexture   = true;
                    needRecreateTexture = false;
                }

                if (needInvalidate)
                {
                    browserHost.SetZoomLevel(Zoom);
                    browserHost.Invalidate(new CefRectangle(0, 0, 100000, 100000), CefPaintElementType.View);
                    needInvalidate = false;
                }

                //update texture
                if (/*browser.IsDirty ||*/ needUpdateTexture)
                {
                    if (texture != null)
                    {
                        UpdateTexture();
                    }
                    needUpdateTexture = false;
                }
            }

            //draw texture
            {
                //bool backColorZero = BackColor == new ColorValue( 0, 0, 0, 0 );

                //ColorValue color = new ColorValue( 1, 1, 1 );
                ////ColorValue color = backColorZero ? new ColorValue( 1, 1, 1 ) : BackColor;
                //if( texture == null )
                //	color = new ColorValue( 0, 0, 0, color.Alpha );
                //color *= GetTotalColorMultiplier();

                //var color = GetTotalColorMultiplier();
                //if( color.Alpha > 0 )
                //{
                var color = new ColorValue(1, 1, 1);
                //color.Saturate();

                GetScreenRectangle(out var rect);

                Component_Image tex = null;
                if (renderBuffer != null && renderBufferForSize == ViewSize && renderBuffer.Length == ViewSize.X * ViewSize.Y * 4)
                {
                    tex = texture;
                }
                if (tex == null)
                {
                    tex = ResourceUtility.WhiteTexture2D;
                }

                if (renderer.IsScreen)                 //&& !renderer._OutGeometryTransformEnabled )
                {
                    ////screen per pixel accuracy

                    Vector2   viewportSize = renderer.ViewportForScreenCanvasRenderer.SizeInPixels.ToVector2F();
                    var       v            = size.ToVector2() / viewportSize;
                    Rectangle fixedRect    = new Rectangle(rect.LeftTop, rect.LeftTop + v);

                    //Vec2 leftTop = rect.LeftTop;
                    //leftTop *= viewportSize;
                    //leftTop = new Vec2( (int)( leftTop.X + .9999f ), (int)( leftTop.Y + .9999f ) );
                    ////!!!!!
                    ////if( RenderSystem.Instance.IsDirect3D() )
                    ////	leftTop -= new Vec2( .5f, .5f );
                    //leftTop /= viewportSize;

                    //Vec2 rightBottom = rect.RightBottom;
                    //rightBottom *= viewportSize;
                    //rightBottom = new Vec2( (int)( rightBottom.X + .9999f ), (int)( rightBottom.Y + .9999f ) );
                    ////!!!!!
                    ////if( RenderSystem.Instance.IsDirect3D() )
                    ////	rightBottom -= new Vec2( .5f, .5f );
                    //rightBottom /= viewportSize;

                    //Rect fixedRect = new Rect( leftTop, rightBottom );

                    renderer.PushTextureFilteringMode(CanvasRenderer.TextureFilteringMode.Point);
                    renderer.AddQuad(fixedRect, new Rectangle(0, 0, 1, 1), tex, color, true);
                    renderer.PopTextureFilteringMode();
                }
                else
                {
                    renderer.AddQuad(rect, new Rectangle(0, 0, 1, 1), tex, color, true);
                }
                //}
            }

            if (!IsSupportedByThisPlatform())
            {
                var text   = string.Format("UIWebBrowser: {0} is not supported.", SystemSettings.CurrentPlatform);
                var center = GetScreenRectangle().GetCenter();
                renderer.AddText(text, center, EHorizontalAlignment.Center, EVerticalAlignment.Center, new ColorValue(1, 0, 0));
            }
        }
Exemple #4
0
        public void UpdateCaptureCubemap()
        {
            if (Mode.Value != ModeEnum.Capture)
            {
                return;
            }

            Component_Image texture     = null;
            Component_Image textureRead = null;

            try
            {
                //create

                var resolution = Resolution.Value;
                var hdr        = HDR.Value;

                var size = int.Parse(resolution.ToString().Replace("_", ""));
                //!!!!16 бит достаточно, тогда нужно поддержку для Image2D
                PixelFormat format = hdr ? PixelFormat.Float32RGBA : PixelFormat.A8R8G8B8;
                //PixelFormat format = hdr ? PixelFormat.Float16RGBA : PixelFormat.A8R8G8B8;

                texture               = ComponentUtility.CreateComponent <Component_Image>(null, true, false);
                texture.CreateType    = Component_Image.TypeEnum._2D;
                texture.CreateSize    = new Vector2I(size, size);
                texture.CreateMipmaps = false;
                texture.CreateFormat  = format;
                texture.CreateUsage   = Component_Image.Usages.RenderTarget;
                texture.CreateFSAA    = 0;
                texture.Enabled       = true;

                var renderTexture = texture.Result.GetRenderTarget(0, 0);
                //!!!!
                var viewport = renderTexture.AddViewport(true, false);
                //var viewport = renderTexture.AddViewport( false, false );
                viewport.Mode          = Viewport.ModeEnum.ReflectionProbeCubemap;
                viewport.AttachedScene = ParentScene;

                textureRead               = ComponentUtility.CreateComponent <Component_Image>(null, true, false);
                textureRead.CreateType    = Component_Image.TypeEnum._2D;
                textureRead.CreateSize    = new Vector2I(size, size);
                textureRead.CreateMipmaps = false;
                textureRead.CreateFormat  = format;
                textureRead.CreateUsage   = Component_Image.Usages.ReadBack | Component_Image.Usages.BlitDestination;
                textureRead.CreateFSAA    = 0;
                textureRead.Enabled       = true;
                //!!!!
                textureRead.Result.PrepareNativeObject();

                //render
                var image2D = new ImageUtility.Image2D(PixelFormat.Float32RGB, new Vector2I(size * 4, size * 3));

                var position = Transform.Value.Position;

                for (int face = 0; face < 6; face++)
                {
                    Vector3 dir = Vector3.Zero;
                    Vector3 up  = Vector3.Zero;

                    //flipped
                    switch (face)
                    {
                    case 0: dir = -Vector3.YAxis; up = Vector3.ZAxis; break;

                    case 1: dir = Vector3.YAxis; up = Vector3.ZAxis; break;

                    case 2: dir = Vector3.ZAxis; up = -Vector3.XAxis; break;

                    case 3: dir = -Vector3.ZAxis; up = Vector3.XAxis; break;

                    case 4: dir = Vector3.XAxis; up = Vector3.ZAxis; break;

                    case 5: dir = -Vector3.XAxis; up = Vector3.ZAxis; break;
                    }

                    //!!!!renderingPipelineOverride

                    var cameraSettings = new Viewport.CameraSettingsClass(viewport, 1, 90, NearClipPlane.Value, FarClipPlane.Value, position, dir, up, ProjectionType.Perspective, 1, 1, 1);

                    viewport.Update(true, cameraSettings);

                    //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);

                    //get data
                    var totalBytes = PixelFormatUtility.GetNumElemBytes(format) * size * size;
                    var data       = new byte[totalBytes];
                    unsafe
                    {
                        fixed(byte *pBytes = data)
                        {
                            var demandedFrame = textureRead.Result.GetRealObject(true).Read((IntPtr)pBytes, 0);

                            while (RenderingSystem.CallBgfxFrame() < demandedFrame)
                            {
                            }
                        }
                    }

                    Vector2I index = Vector2I.Zero;
                    switch (face)
                    {
                    case 1: index = new Vector2I(2, 1); break;

                    case 0: index = new Vector2I(0, 1); break;

                    case 2: index = new Vector2I(1, 0); break;

                    case 3: index = new Vector2I(1, 2); break;

                    case 4: index = new Vector2I(1, 1); break;

                    case 5: index = new Vector2I(3, 1); break;
                    }
                    //switch( face )
                    //{
                    //case 0: index = new Vector2I( 2, 1 ); break;
                    //case 1: index = new Vector2I( 0, 1 ); break;
                    //case 2: index = new Vector2I( 1, 0 ); break;
                    //case 3: index = new Vector2I( 1, 2 ); break;
                    //case 4: index = new Vector2I( 1, 1 ); break;
                    //case 5: index = new Vector2I( 3, 1 ); break;
                    //}

                    var faceImage = new ImageUtility.Image2D(format, new Vector2I(size, size), data);

                    //flip by X
                    var faceImageFlip = new ImageUtility.Image2D(format, new Vector2I(size, size));
                    for (int y = 0; y < size; y++)
                    {
                        for (int x = 0; x < size; x++)
                        {
                            var pixel = faceImage.GetPixel(new Vector2I(x, y));
                            faceImageFlip.SetPixel(new Vector2I(size - 1 - x, y), pixel);
                        }
                    }

                    image2D.Blit(index * size, faceImageFlip);
                }

                //reset alpha channel
                for (int y = 0; y < image2D.Size.Y; y++)
                {
                    for (int x = 0; x < image2D.Size.X; x++)
                    {
                        var pixel = image2D.GetPixel(new Vector2I(x, y));
                        pixel.W = 1.0f;
                        image2D.SetPixel(new Vector2I(x, y), pixel);
                    }
                }

                var destRealFileName = VirtualPathUtility.GetRealPathByVirtual(GetDestVirtualFileName());

                if (!Directory.Exists(Path.GetDirectoryName(destRealFileName)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(destRealFileName));
                }

                if (!ImageUtility.Save(destRealFileName, image2D.Data, image2D.Size, 1, image2D.Format, 1, 0, out var error))
                {
                    throw new Exception(error);
                }
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
            }
            finally
            {
                texture?.Dispose();
                textureRead?.Dispose();
            }

            processedCubemapNeedUpdate = true;
        }
Exemple #5
0
        public Component_Image GetImage(out long uniqueMaskDataCounter)
        {
            uniqueMaskDataCounter = 0;

            if (MaskImage.Value != null)
            {
                return(MaskImage);
            }
            else if (Mask.Value != null && Mask.Value.Length != 0)
            {
                if (EnabledInHierarchy)
                {
                    if (createdMaskImage == null)
                    {
                        int textureSize = (int)Math.Sqrt(Mask.Value.Length);

                        //need set ShowInEditor = false before AddComponent
                        var texture = ComponentUtility.CreateComponent <Component_Image>(null, false, false);
                        texture.DisplayInEditor = false;
                        AddComponent(texture, -1);
                        //var texture = CreateComponent<Component_Image>( enabled: false );

                        texture.SaveSupport  = false;
                        texture.CloneSupport = false;

                        //!!!!
                        bool mipmaps = false;

                        texture.CreateType    = Component_Image.TypeEnum._2D;
                        texture.CreateSize    = new Vector2I(textureSize, textureSize);
                        texture.CreateMipmaps = mipmaps;
                        texture.CreateFormat  = PixelFormat.L8;

                        var usage = Component_Image.Usages.WriteOnly;
                        if (mipmaps)
                        {
                            usage |= Component_Image.Usages.AutoMipmaps;
                        }
                        texture.CreateUsage = usage;

                        texture.Enabled = true;

                        createdMaskImage           = texture;
                        createdMaskImageNeedUpdate = true;
                    }

                    //update data
                    if (createdMaskImageNeedUpdate)
                    {
                        GpuTexture gpuTexture = createdMaskImage.Result;
                        if (gpuTexture != null)
                        {
                            var d = new GpuTexture.SurfaceData[] { new GpuTexture.SurfaceData(0, 0, Mask.Value) };
                            gpuTexture.SetData(d);
                        }

                        createdMaskImageNeedUpdate = false;
                    }

                    uniqueMaskDataCounter = this.uniqueMaskDataCounter;
                    return(createdMaskImage);
                }
            }
            return(null);
        }
Exemple #6
0
        public Component_Image DynamicTexture_Alloc(DynamicTextureType type, Component_Image.TypeEnum imageType, Vector2I size, PixelFormat format, int fsaaLevel, bool mipmaps, int arrayLayers = 1, bool createSimple3DRenderer = false, bool createCanvasRenderer = false)
        {
            if (type == DynamicTextureType.RenderTarget)
            {
                UpdateStatisticsCurrent.RenderTargets++;
            }
            else
            {
                UpdateStatisticsCurrent.DynamicTextures++;
            }

            //find free
            {
                var target = DynamicTexture_GetFree(type, imageType, size, format, fsaaLevel, mipmaps, arrayLayers, createSimple3DRenderer, createCanvasRenderer);
                if (target != null)
                {
                    return(target);
                }
            }

            //!!!!need hierarchy controller?
            Component_Image texture = ComponentUtility.CreateComponent <Component_Image>(null, true, false);

            texture.CreateType        = imageType;
            texture.CreateSize        = size;
            texture.CreateMipmaps     = mipmaps;
            texture.CreateArrayLayers = arrayLayers;
            texture.CreateFormat      = format;
            if (type == DynamicTextureType.DynamicTexture)
            {
                texture.CreateUsage = Component_Image.Usages.Dynamic | Component_Image.Usages.WriteOnly;
            }
            else
            {
                texture.CreateUsage = Component_Image.Usages.RenderTarget;
            }
            texture.CreateFSAA = fsaaLevel;
            texture.Enabled    = true;

            //!!!!!как проверять ошибки создания текстур? везде так
            //if( texture == null )
            //{
            //	//!!!!!
            //	Log.Fatal( "ViewportRenderingPipeline: RenderTarget_Alloc: Unable to create texture." );
            //	return null;
            //}

            int faces = imageType == Component_Image.TypeEnum.Cube ? 6 : arrayLayers;

            int numMips;

            if (mipmaps)
            {
                int   max         = size.MaxComponent();
                float kInvLogNat2 = 1.4426950408889634073599246810019f;
                numMips = 1 + (int)(Math.Log(size.MaxComponent()) * kInvLogNat2);
            }
            else
            {
                numMips = 1;
            }

            if (type == DynamicTextureType.RenderTarget)
            {
                for (int face = 0; face < faces; face++)
                {
                    for (int mip = 0; mip < numMips; mip++)
                    {
                        RenderTexture renderTexture = texture.Result.GetRenderTarget(mip, face);
                        var           viewport      = renderTexture.AddViewport(createSimple3DRenderer, createCanvasRenderer);

                        viewport.RenderingPipelineCreate();
                        viewport.RenderingPipelineCreated.UseRenderTargets = false;
                    }
                    //!!!!что-то еще?
                }
            }

            //Log.Info( "alloc: " + type.ToString() + " " + size.ToString() );

            //add to list of allocated
            var item = new DynamicTextureItem();

            item.type      = type;
            item.imageType = imageType;
            item.size      = size;
            item.format    = format;
            item.fsaaLevel = fsaaLevel;
            item.mipmaps   = mipmaps;
            //item.num_mipmaps = num_mipmaps;
            item.arrayLayers            = arrayLayers;
            item.createSimple3DRenderer = createSimple3DRenderer;
            item.createCanvasRenderer   = createCanvasRenderer;
            item.image = texture;
            dynamicTexturesAllocated.Add(item);

            item.usedLastUpdate = true;
            return(texture);
        }
        /////////////////////////////////////////

        public void CreateDefaultFlares()
        {
            Component_LensFlare flare;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 0.4980392f, 0.4980392f, 0.05882353f);
            flare.Size     = new Vector2(0.05f, 0.05f);
            flare.Position = -0.1f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(0.4980392f, 1, 0.4980392f, 0.05882353f);
            flare.Size     = new Vector2(0.05f, 0.05f);
            flare.Position = -2;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.08f, 0.08f);
            flare.Position = -1.5f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.1f, 0.1f);
            flare.Position = -1.7f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 0.4980392f, 0.4980392f, 0.05882353f);
            flare.Size     = new Vector2(0.06f, 0.06f);
            flare.Position = -3;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 0.4980392f, 0.05882353f);
            flare.Size     = new Vector2(0.05f, 0.05f);
            flare.Position = -.5f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.09f, 0.09f);
            flare.Position = -2.1f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.08f, 0.08f);
            flare.Position = -.65f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(0.4980392f, 1, 0.4980392f, 0.05882353f);
            flare.Size     = new Vector2(0.05f, 0.05f);
            flare.Position = -.86f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.12f, 0.12f);
            flare.Position = -5;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.04f, 0.04f);
            flare.Position = .3f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(0.4980392f, 1, 0.4980392f, 0.05882353f);
            flare.Size     = new Vector2(0.03f, 0.03f);
            flare.Position = .6f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.06f, 0.06f);
            flare.Position = .1f;

            flare          = CreateComponent <Component_LensFlare>();
            flare.Name     = ComponentUtility.GetNewObjectUniqueName(flare);
            flare.Image    = ReferenceUtility.MakeReference(@"Samples\Starter Content\Textures\Lens flares\hexangle.png");
            flare.Color    = new ColorValue(1, 1, 1, 0.05882353f);
            flare.Size     = new Vector2(0.04f, 0.04f);
            flare.Position = -.35f;
        }