public override bool PaintRenderTexture(StrokeVector stroke, ImageData image, BrushConfig bc, PlaytimePainter pntr) { var vt = pntr.GetVolumeTexture(); if (vt != null) { BrushTypeSphere.Inst.BeforeStroke(pntr, bc, stroke); Shader.SetGlobalVector(VOLUME_POSITION_N_SIZE + "_BRUSH", vt.PosNsize4Shader); Shader.SetGlobalVector(VOLUME_H_SLICES + "_BRUSH", vt.Slices4Shader); if (stroke.mouseDwn) { stroke.posFrom = stroke.posTo; } stroke.useTexcoord2 = false; TexMGMT.ShaderPrepareStroke(bc, bc.speed * 0.05f, image, stroke, pntr); stroke.SetWorldPosInShader(); TexMGMT.brushRendy.FullScreenQuad(); TexMGMT.Render(); BrushTypeSphere.Inst.AfterStroke(pntr, bc, stroke); return(true); } return(false); }
static void PrepareSphereBrush(ImageData id, BrushConfig br, StrokeVector stroke, PlaytimePainter pntr) { if (TexMGMT.BigRT_pair == null) { TexMGMT.UpdateBuffersState(); } if (stroke.mouseDwn) { stroke.posFrom = stroke.posTo; } TexMGMT.ShaderPrepareStroke(br, br.speed * 0.05f, id, stroke, null); Vector2 offset = id.offset - stroke.unRepeatedUV.Floor(); stroke.SetWorldPosInShader(); Shader.SetGlobalVector(PainterDataAndConfig.BRUSH_EDITED_UV_OFFSET, new Vector4(id.tiling.x, id.tiling.y, offset.x, offset.y)); Shader.SetGlobalVector(PainterDataAndConfig.BRUSH_ATLAS_SECTION_AND_ROWS, new Vector4(0, 0, 1, 0)); }