Пример #1
0
        public void ChangeBufferTarget(ImageMeta newTarget, MaterialMeta mat, ShaderProperty.TextureValue parameter, PlaytimePainter painter)
        {
            if (newTarget != imgMetaUsingRendTex)
            {
                if (materialsUsingRenderTexture.Count > 0)
                {
                    PlaytimePainter.SetOriginalShader();
                }

                if (imgMetaUsingRendTex != null)
                {
                    if (imgMetaUsingRendTex.texture2D)
                    {
                        imgMetaUsingRendTex.RenderTexture_To_Texture2D();
                    }

                    imgMetaUsingRendTex.destination = TexTarget.Texture2D;

                    foreach (var m in materialsUsingRenderTexture)
                    {
                        m.SetTextureOnLastTarget(imgMetaUsingRendTex);
                    }
                }

                materialsUsingRenderTexture.Clear();
                autodisabledBufferTarget = null;
                imgMetaUsingRendTex      = newTarget;
            }

            mat.bufferParameterTarget = parameter;
            mat.painterTarget         = painter;
            materialsUsingRenderTexture.Add(mat);
        }
Пример #2
0
        public MaterialMeta GetMaterialDataFor(Material mat)
        {
            if (!mat)
            {
                return(null);
            }

            MaterialMeta meta = null;

            for (var i = 0; i < matMetas.Count; i++)
            {
                var md = matMetas[i];

                if (md != null && md.material)
                {
                    if (md.material != mat)
                    {
                        continue;
                    }

                    meta = md;

                    if (i > 3)
                    {
                        matMetas.Move(i, 0);
                    }

                    break;
                }
                else
                {
                    matMetas.RemoveAt(i); i--;
                }
            }

            if (meta != null)
            {
                return(meta);
            }

            meta = new MaterialMeta(mat);
            matMetas.Add(meta);

            return(meta);
        }
Пример #3
0
        public void ChangeDestination(TexTarget changeTo, MaterialMeta mat, ShaderProperty.TextureValue parameter, PlaytimePainter painter)
        {
            if (changeTo != destination)
            {
                if (changeTo == TexTarget.RenderTexture)
                {
                    if (!renderTexture)
                    {
                        PainterCamera.Inst.ChangeBufferTarget(this, mat, parameter, painter);
                    }
                    TextureToRenderTexture(texture2D);
                }
                else
                {
                    if (!texture2D)
                    {
                        return;
                    }

                    if (!renderTexture)
                    {
                        PainterCamera.Inst.EmptyBufferTarget();
                        PainterCamera.Inst.DiscardAlphaBuffer();
                    }
                    else if (painter.initialized && !painter.isBeingDisabled)
                    {
                        // To avoid Clear to black when exiting playmode
                        RenderTexture_To_Texture2D();
                        Debug.Log("Is being switched to Tex2D");
                    }
                }
                destination = changeTo;
                painter.SetTextureOnMaterial(this);
            }
            else
            {
                Debug.Log("Destination already Set");
            }
        }