コード例 #1
0
        public void AlphaBufferSetDirtyBeforeRender(ImageMeta id, Shader shade)
        {
            if (alphaBufferDataTarget != null && (alphaBufferDataTarget != id || alphaBufferDataShader != shade))
            {
                UpdateFromAlphaBuffer(alphaBufferDataTarget.CurrentRenderTexture(), alphaBufferDataShader);
            }

            alphaBufferDataTarget = id;
            alphaBufferDataShader = shade;
        }
コード例 #2
0
ファイル: BrushTypes.cs プロジェクト: Hengle/Tools-3
        public virtual void AfterStroke_Painter(PlaytimePainter painter, BrushConfig br, StrokeVector st, bool alphaBuffer, ImageMeta id)
        {
            painter.AfterStroke(st);

            if (br.useMask && st.mouseUp && br.randomMaskOffset)
            {
                br.maskOffset = new Vector2(Random.Range(0f, 1f), Random.Range(0f, 1f));
            }

            if (alphaBuffer)
            {
                var sh = br.GetBlitMode(false).ShaderForAlphaBufferBlit;
                if (painter.NotUsingPreview)
                {
                    TexMGMT.UpdateFromAlphaBuffer(id.CurrentRenderTexture(), sh);
                }
                else
                {
                    TexMGMT.AlphaBufferSetDirtyBeforeRender(id, sh);
                }
            }
            else if (!br.IsSingleBufferBrush() && !br.IsA3DBrush(painter))
            {
                TexMGMT.UpdateBufferSegment();
            }

            foreach (var p in painter.Modules)
            {
                p.AfterGpuStroke(painter, br, st, this);
            }
        }
コード例 #3
0
        public void Set(ImageMeta from, int globalOrder)
        {
            RenderTextureBuffersManager.Blit(from.CurrentRenderTexture(), rt);

            SetB(from, globalOrder);

            exclusive = from.renderTexture != null;
        }
コード例 #4
0
        public RenderTextureBackup(ImageMeta from, int globalOrder)
        {
            RenderTexture frt = from.CurrentRenderTexture();

            rt = new RenderTexture(from.width, from.height, 0, RenderTextureFormat.ARGB32,
                                   frt.sRGB ? RenderTextureReadWrite.sRGB : RenderTextureReadWrite.Linear)
            {
                filterMode = frt.filterMode
            };
            Set(from, globalOrder);
        }
コード例 #5
0
        public static RenderTexture Blit(Texture tex, ImageMeta id)
        {
            if (!tex || id == null)
            {
                return(null);
            }
            var mat = TempMaterial(Data.pixPerfectCopy);
            var dst = id.CurrentRenderTexture();

            Graphics.Blit(tex, dst, mat);

            AfterBlit(dst);

            return(dst);
        }
コード例 #6
0
 public RenderTexture Render(Texture from, ImageMeta to) => Render(from, to.CurrentRenderTexture(), Data.brushBufferCopy);
コード例 #7
0
        public void SHADER_STROKE_SEGMENT_UPDATE(BrushConfig bc, float brushAlpha, ImageMeta id, StrokeVector stroke, PlaytimePainter pntr, out bool alphaBuffer)
        {
            CheckPaintingBuffers();

            var isDoubleBuffer = !id.renderTexture;

            var useSingle = !isDoubleBuffer || bc.IsSingleBufferBrush();

            var blitMode = bc.GetBlitMode(false);

            alphaBuffer = !useSingle && bc.useAlphaBuffer && bc.GetBrushType(false).SupportsAlphaBufferPainting&& blitMode.SupportsAlphaBufferPainting;

            Shader shd = null;

            if (pntr)
            {
                foreach (var pl in PainterSystemManagerModuleBase.BrushPlugins)
                {
                    var bs = useSingle ? pl.GetBrushShaderSingleBuffer(pntr) : pl.GetBrushShaderDoubleBuffer(pntr);
                    if (!bs)
                    {
                        continue;
                    }
                    shd = bs;
                    break;
                }
            }

            if (!shd)
            {
                if (alphaBuffer)
                {
                    shd = blitMode.ShaderForAlphaOutput;
                    AlphaBufferSetDirtyBeforeRender(id, blitMode.ShaderForAlphaBufferBlit);
                }
                else
                {
                    shd = useSingle ? blitMode.ShaderForSingleBuffer : blitMode.ShaderForDoubleBuffer;
                }
            }


            if (!useSingle && !RenderTextureBuffersManager.secondBufferUpdated)
            {
                RenderTextureBuffersManager.UpdateBufferTwo();
            }

            if (stroke.firstStroke)
            {
                SHADER_BRUSH_UPDATE(bc, brushAlpha, id, pntr);
            }

            TargetTexture = alphaBuffer ? AlphaBuffer : id.CurrentRenderTexture();

            if (isDoubleBuffer)
            {
                PainterDataAndConfig.DESTINATION_BUFFER.GlobalValue = BackBuffer;
            }

            CurrentShader = shd;
        }