public void AlphaBufferSetDirtyBeforeRender(ImageMeta id, Shader shade) { if (alphaBufferDataTarget != null && (alphaBufferDataTarget != id || alphaBufferDataShader != shade)) { UpdateFromAlphaBuffer(alphaBufferDataTarget.CurrentRenderTexture(), alphaBufferDataShader); } alphaBufferDataTarget = id; alphaBufferDataShader = shade; }
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); } }
public void Set(ImageMeta from, int globalOrder) { RenderTextureBuffersManager.Blit(from.CurrentRenderTexture(), rt); SetB(from, globalOrder); exclusive = from.renderTexture != null; }
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); }
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); }
public RenderTexture Render(Texture from, ImageMeta to) => Render(from, to.CurrentRenderTexture(), Data.brushBufferCopy);
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; }