store winding as int directly
This commit is contained in:
parent
eb360887ab
commit
bb7ec44fce
1 changed files with 8 additions and 9 deletions
|
@ -724,7 +724,7 @@ iterator segments*(s: seq[Vec2]): Segment =
|
||||||
for i in 0 ..< s.len - 1:
|
for i in 0 ..< s.len - 1:
|
||||||
yield(segment(s[i], s[i + 1]))
|
yield(segment(s[i], s[i + 1]))
|
||||||
|
|
||||||
proc quickSort(a: var seq[(float32, bool)], inl, inr: int) =
|
proc quickSort(a: var seq[(float32, int16)], inl, inr: int) =
|
||||||
var
|
var
|
||||||
r = inr
|
r = inr
|
||||||
l = inl
|
l = inl
|
||||||
|
@ -744,7 +744,7 @@ proc quickSort(a: var seq[(float32, bool)], inl, inr: int) =
|
||||||
quickSort(a, inl, r)
|
quickSort(a, inl, r)
|
||||||
quickSort(a, l, inr)
|
quickSort(a, l, inr)
|
||||||
|
|
||||||
proc computeBounds(segments: seq[(Segment, bool)]): Rect =
|
proc computeBounds(segments: seq[(Segment, int16)]): Rect =
|
||||||
var
|
var
|
||||||
xMin = float32.high
|
xMin = float32.high
|
||||||
xMax = float32.low
|
xMax = float32.low
|
||||||
|
@ -772,18 +772,17 @@ proc fillShapes(
|
||||||
color: ColorRGBA,
|
color: ColorRGBA,
|
||||||
windingRule: WindingRule
|
windingRule: WindingRule
|
||||||
) =
|
) =
|
||||||
var sortedSegments: seq[(Segment, bool)]
|
var sortedSegments: seq[(Segment, int16)]
|
||||||
for shape in shapes:
|
for shape in shapes:
|
||||||
for segment in shape.segments:
|
for segment in shape.segments:
|
||||||
if segment.at.y == segment.to.y: # Skip horizontal
|
if segment.at.y == segment.to.y: # Skip horizontal
|
||||||
continue
|
continue
|
||||||
let winding = segment.at.y > segment.to.y
|
if segment.at.y > segment.to.y:
|
||||||
if winding:
|
|
||||||
var segment = segment
|
var segment = segment
|
||||||
swap(segment.at, segment.to)
|
swap(segment.at, segment.to)
|
||||||
sortedSegments.add((segment, winding))
|
sortedSegments.add((segment, -1.int16))
|
||||||
else:
|
else:
|
||||||
sortedSegments.add((segment, winding))
|
sortedSegments.add((segment, 1.int16))
|
||||||
|
|
||||||
# Figure out the total bounds of all the shapes,
|
# Figure out the total bounds of all the shapes,
|
||||||
# rasterize only within the total bounds
|
# rasterize only within the total bounds
|
||||||
|
@ -801,7 +800,7 @@ proc fillShapes(
|
||||||
initialOffset = offset / 2
|
initialOffset = offset / 2
|
||||||
|
|
||||||
var
|
var
|
||||||
hits = newSeq[(float32, bool)](4)
|
hits = newSeq[(float32, int16)](4)
|
||||||
coverages = newSeq[uint8](image.width)
|
coverages = newSeq[uint8](image.width)
|
||||||
numHits: int
|
numHits: int
|
||||||
|
|
||||||
|
@ -868,7 +867,7 @@ proc fillShapes(
|
||||||
for j in i ..< fillStart + fillLen:
|
for j in i ..< fillStart + fillLen:
|
||||||
coverages[j] += sampleCoverage
|
coverages[j] += sampleCoverage
|
||||||
|
|
||||||
count += (if winding: -1 else: 1)
|
count += winding
|
||||||
x = at
|
x = at
|
||||||
|
|
||||||
# Apply the coverage and blend
|
# Apply the coverage and blend
|
||||||
|
|
Loading…
Reference in a new issue