op/clip,gpu,internal/opconst: remove quad count from Path op

The check for path segments in gpu is redundant; clip.Op.Add doesn't add
the Path op if there were no segments.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-11 18:11:28 +01:00
parent 2328ddfeca
commit b8bdb96d35
3 changed files with 23 additions and 37 deletions
+7 -20
View File
@@ -168,18 +168,8 @@ func decodeStrokeOp(data []byte) clip.StrokeStyle {
}
type quadsOp struct {
quads uint32
key ops.Key
aux []byte
}
func decodeQuadsOp(data []byte) uint32 {
_ = data[:1+4]
if opconst.OpType(data[0]) != opconst.TypePath {
panic("invalid op")
}
bo := binary.LittleEndian
return bo.Uint32(data[1:])
key ops.Key
aux []byte
}
type material struct {
@@ -922,15 +912,12 @@ loop:
stroke = decodeStrokeOp(encOp.Data)
case opconst.TypePath:
quads.quads = decodeQuadsOp(encOp.Data)
if quads.quads > 0 {
encOp, ok = r.Decode()
if !ok {
break loop
}
quads.aux = encOp.Data[opconst.TypeAuxLen:]
quads.key = encOp.Key
encOp, ok = r.Decode()
if !ok {
break loop
}
quads.aux = encOp.Data[opconst.TypeAuxLen:]
quads.key = encOp.Key
case opconst.TypeClip:
var op clipOp
+1 -1
View File
@@ -60,7 +60,7 @@ const (
TypeClipLen = 1 + 4*4 + 1
TypeProfileLen = 1
TypeCursorLen = 1 + 1
TypePathLen = 1 + 4
TypePathLen = 1
TypeStrokeLen = 1 + 4 + 4 + 1 + 1
TypeDashLen = 1 + 4 + 1
)
+15 -16
View File
@@ -25,11 +25,9 @@ type Op struct {
}
func (p Op) Add(o *op.Ops) {
if p.path.quads > 0 {
if p.path.hasSegments {
data := o.Write(opconst.TypePathLen)
data[0] = byte(opconst.TypePath)
bo := binary.LittleEndian
bo.PutUint32(data[1:], p.path.quads)
p.path.spec.Add(o)
}
@@ -68,8 +66,9 @@ type PathSpec struct {
spec op.CallOp
// open is true if any path contour is not closed. A closed contour starts
// and ends in the same point.
open bool
quads uint32 // quads is the number Bézier segments in the path.
open bool
// hasSegments tracks whether there is more than one path segment in the path.
hasSegments bool
}
// Path constructs a Op clip path described by lines and
@@ -80,13 +79,13 @@ type PathSpec struct {
// Path generates no garbage and can be used for dynamic paths; path
// data is stored directly in the Ops list supplied to Begin.
type Path struct {
ops *op.Ops
open bool
contour int
pen f32.Point
macro op.MacroOp
start f32.Point
quads uint32
ops *op.Ops
open bool
contour int
pen f32.Point
macro op.MacroOp
start f32.Point
hasSegments bool
}
// Pos returns the current pen position.
@@ -105,9 +104,9 @@ func (p *Path) Begin(ops *op.Ops) {
func (p *Path) End() PathSpec {
c := p.macro.Stop()
return PathSpec{
spec: c,
open: p.open || p.pen != p.start,
quads: p.quads,
spec: c,
open: p.open || p.pen != p.start,
hasSegments: p.hasSegments,
}
}
@@ -162,7 +161,7 @@ func (p *Path) QuadTo(ctrl, to f32.Point) {
To: to,
})
p.pen = to
p.quads++
p.hasSegments = true
}
// Arc adds an elliptical arc to the path. The implied ellipse is defined