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