From 41f3a7e74ee6b2fe379ecee37d2842eb11070967 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 24 Sep 2021 15:55:52 +0200 Subject: [PATCH] gpu: [compute] restore relative transformation correctly on state load Fixes gio#277 Signed-off-by: Elias Naur --- gpu/compute.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/gpu/compute.go b/gpu/compute.go index c72773c8..604ca547 100644 --- a/gpu/compute.go +++ b/gpu/compute.go @@ -1818,11 +1818,19 @@ func (c *collector) collect(root *op.Ops, viewport image.Point, texOps *[]textur case opconst.TypeLoad: id, mask := ops.DecodeLoad(encOp.Data) s := c.states[id] - if mask&opconst.TransformState != 0 { - state.t = s.t - } if mask&^opconst.TransformState != 0 { state = s + } else if mask&opconst.TransformState != 0 { + state.t = s.t + state.relTrans = s.t + if cl := state.clip; cl != nil { + var relTrans f32.Affine2D + for cl != nil { + relTrans = cl.relTrans.Mul(relTrans) + cl = cl.parent + } + state.relTrans = relTrans.Invert().Mul(state.relTrans) + } } } }