Ejemplo n.º 1
0
        /////////////////////////////////////////

        Component_Image DynamicTexture_GetFree(DynamicTextureType type, Component_Image.TypeEnum imageType, Vector2I size, PixelFormat format, int fsaaLevel, bool mipmaps, int arrayLayers, bool createSimple3DRenderer, bool createCanvasRenderer)
        {
            //var item = renderTargetsFree.Find( i => i.type == type && i.size == size && i.format == format && i.fsaaLevel == fsaaLevel );
            DynamicTextureItem item = null;

            foreach (var i in dynamicTexturesFree)
            {
                if (i.type == type && i.imageType == imageType && i.size == size && i.format == format && i.fsaaLevel == fsaaLevel && i.mipmaps == mipmaps && i.arrayLayers == arrayLayers && i.createSimple3DRenderer == createSimple3DRenderer && i.createCanvasRenderer == createCanvasRenderer)
                {
                    item = i;
                    break;
                }
            }

            if (item != null)
            {
                dynamicTexturesFree.Remove(item);
                item.usedLastUpdate = true;
                return(item.image);
            }
            return(null);
        }
Ejemplo n.º 2
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);
        }