public bool IsEnabledFor(PlaytimePainter painter, ImageMeta id, BrushConfig cfg) => painter.IsAtlased() && !id.TargetIsRenderTexture();
public void SHADER_BRUSH_UPDATE(BrushConfig brush = null, float brushAlpha = 1, ImageMeta id = null, PlaytimePainter painter = null) { if (brush == null) { brush = GlobalBrush; } if (!painter) { painter = PlaytimePainter.selectedInPlaytime; } if (id == null && painter) { id = painter.ImgMeta; } brush.previewDirty = false; if (id == null) { return; } float textureWidth = id.width; var rendTex = id.TargetIsRenderTexture(); var brushType = brush.GetBrushType(!rendTex); var blitMode = brush.GetBlitMode(!rendTex); var is3DBrush = brush.IsA3DBrush(painter); //var isDecal = rendTex && brushType.IsUsingDecals; var useAlphaBuffer = (brush.useAlphaBuffer && blitMode.SupportsAlphaBufferPainting && rendTex); BrushColorProperty.GlobalValue = brush.Color; BrushMaskProperty.GlobalValue = new Vector4( BrushExtensions.HasFlag(brush.mask, BrushMask.R) ? 1 : 0, BrushExtensions.HasFlag(brush.mask, BrushMask.G) ? 1 : 0, BrushExtensions.HasFlag(brush.mask, BrushMask.B) ? 1 : 0, BrushExtensions.HasFlag(brush.mask, BrushMask.A) ? 1 : 0); float useTransparentLayerBackground = 0; if (id.isATransparentLayer) { var md = painter.MatDta; if (md != null && md.usePreviewShader && md.material) { var mt = md.material.mainTexture; TransparentLayerUnderProperty.GlobalValue = mt; useTransparentLayerBackground = (mt && (id != mt.GetImgDataIfExists())) ? 1 : 0; } } brushType.OnShaderBrushUpdate(brush); //if (isDecal) // SHADER_DECAL_UPDATE(brush); if (rendTex) { SourceMaskProperty.GlobalValue = brush.useMask ? Data.masks.TryGet(brush.selectedSourceMask) : null; } MaskDynamicsProperty.GlobalValue = new Vector4( brush.maskTiling, rendTex ? brush.hardness * brush.hardness : 0, // y - Hardness is 0 to do correct preview for Texture2D brush ((brush.flipMaskAlpha || brush.useMask) ? 0 : 1), (brush.maskFromGreyscale && brush.useMask) ? 1 : 0); MaskOffsetProperty.GlobalValue = brush.maskOffset.ToVector4(); BrushFormProperty.GlobalValue = new Vector4( brushAlpha, // x - transparency brush.Size(is3DBrush), // y - scale for sphere brush.Size(is3DBrush) / textureWidth, // z - scale for uv space brush.blurAmount); // w - blur amount AlphaBufferConfigProperty.GlobalValue = new Vector4( brush.alphaLimitForAlphaBuffer, brush.worldSpaceBrushPixelJitter ? 1 : 0, useAlphaBuffer ? 1 : 0, 0); AlphaPaintingBuffer.GlobalValue = AlphaBuffer; brushType.SetKeyword(id.useTexCoord2); UnityUtils.SetShaderKeyword(PainterDataAndConfig.BRUSH_TEXCOORD_2, id.useTexCoord2); if (blitMode.SupportsTransparentLayer) { UnityUtils.SetShaderKeyword(PainterDataAndConfig.TARGET_TRANSPARENT_LAYER, id.isATransparentLayer); } blitMode.SetKeyword(id).SetGlobalShaderParameters(); if (rendTex && blitMode.UsingSourceTexture) { SourceTextureProperty.GlobalValue = Data.sourceTextures.TryGet(brush.selectedSourceTexture); TextureSourceParameters.GlobalValue = new Vector4( (float)brush.srcColorUsage, brush.clampSourceTexture ? 1f : 0f, useTransparentLayerBackground, brush.ignoreSrcTextureTransparency ? 1f : 0f ); } }