Beispiel #1
0
        public void ShaderPrepareStroke(BrushConfig bc, float brushAlpha, ImageData id, StrokeVector stroke, PlaytimePainter pntr)
        {
            if (BigRT_pair == null)
            {
                UpdateBuffersState();
            }

            bool isDoubleBuffer = (id.renderTexture == null);

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

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

            if (stroke.firstStroke)
            {
                Shader_BrushCFG_Update(bc, brushAlpha, id.width, id.TargetIsRenderTexture(), stroke.useTexcoord2, pntr);
            }

            rtcam.targetTexture = id.CurrentRenderTexture();

            if (isDoubleBuffer)
            {
                Shader.SetGlobalTexture(PainterDataAndConfig.DESTINATION_BUFFER, BigRT_pair[1]);
            }

            Shader shd = null;

            if (pntr != null)
            {
                foreach (var pl in Plugins)
                {
                    Shader bs = useSingle ? pl.GetBrushShaderSingleBuffer(pntr) : pl.GetBrushShaderDoubleBuffer(pntr);
                    if (bs != null)
                    {
                        shd = bs;
                        break;
                    }
                }
            }

            if (shd == null)
            {
                shd = useSingle ? bc.BlitMode.ShaderForSingleBuffer : bc.BlitMode.ShaderForDoubleBuffer;
            }

            brushRendy.Set(shd);
        }
Beispiel #2
0
        public virtual void AfterStroke(PlaytimePainter pntr, BrushConfig br, StrokeVector st)
        {
            pntr.AfterStroke(st);

            if (!br.IsSingleBufferBrush() && !br.IsA3Dbrush(pntr))
            {
                TexMGMT.UpdateBufferSegment();
            }

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

            foreach (var p in pntr.plugins)
            {
                p.AfterGPUStroke(pntr, br, st, this);
            }
        }