rm
This commit is contained in:
parent
11749b950b
commit
dd57da9242
1 changed files with 0 additions and 123 deletions
|
@ -1,123 +0,0 @@
|
||||||
import benchy, chroma, pixie, pixie/internal, strformat
|
|
||||||
import benchy, chroma, pixie
|
|
||||||
|
|
||||||
proc newRoundedRectImage1(w, h, r: int, color: Color): Image =
|
|
||||||
result = newImage(w, h)
|
|
||||||
let ctx = newContext(result)
|
|
||||||
ctx.fillStyle = color(0, 1, 0, 1)
|
|
||||||
let
|
|
||||||
pos = vec2(0, 0)
|
|
||||||
wh = vec2(w.float32, h.float32)
|
|
||||||
r = r.float32
|
|
||||||
ctx.fillRoundedRect(rect(pos, wh), r)
|
|
||||||
|
|
||||||
proc newRoundedRectImage15(w, h, r: int, color: Color): Image =
|
|
||||||
let path = newPath()
|
|
||||||
let
|
|
||||||
pos = vec2(0, 0)
|
|
||||||
wh = vec2(w.float32, h.float32)
|
|
||||||
r = r.float32
|
|
||||||
path.roundedRect(rect(pos, wh), r, r, r, r)
|
|
||||||
result = path.fillImage(w, h, color(0, 1, 0, 1))
|
|
||||||
|
|
||||||
proc newRoundedRectImage2(w, h, r: int, color: Color): Image =
|
|
||||||
result = newImage(w, h)
|
|
||||||
result.fill(color)
|
|
||||||
|
|
||||||
let
|
|
||||||
w1 = w - 1
|
|
||||||
h1 = h - 1
|
|
||||||
for y in 0 ..< r:
|
|
||||||
for x in 0 ..< r:
|
|
||||||
var a: float32 = 0
|
|
||||||
for s in 0 ..< 5:
|
|
||||||
let
|
|
||||||
yc = y.float32 + s.float32 / 5 + (1 / 5 / 2)
|
|
||||||
xc = r.float32 - sqrt(r.float32*r.float32 - (yc - r.float32) ^ 2)
|
|
||||||
let mid = (x.float32 - xc + 1).clamp(0, 1)
|
|
||||||
a += 1/5 * mid
|
|
||||||
|
|
||||||
if a < 1:
|
|
||||||
var c = color
|
|
||||||
c.a = a
|
|
||||||
let cx = c.rgbx
|
|
||||||
result.setRgbaUnsafe(x, y, cx)
|
|
||||||
result.setRgbaUnsafe(w1 - x, y, cx)
|
|
||||||
result.setRgbaUnsafe(w1 - x, h1 - y, cx)
|
|
||||||
result.setRgbaUnsafe(x, h1 - y, cx)
|
|
||||||
|
|
||||||
proc newRoundedRectImage3(w, h, r: int, color: Color): Image =
|
|
||||||
result = newImage(w, h)
|
|
||||||
result.fill(color)
|
|
||||||
|
|
||||||
if r == 0:
|
|
||||||
return
|
|
||||||
|
|
||||||
const
|
|
||||||
q = 5
|
|
||||||
qf = q.float32
|
|
||||||
qoffset: float32 = (1 / qf / 2)
|
|
||||||
|
|
||||||
let
|
|
||||||
r = r.clamp(0, min(w, h) div 2)
|
|
||||||
rf = r.float32
|
|
||||||
w1 = w - 1
|
|
||||||
h1 = h - 1
|
|
||||||
rgbx = color.rgbx
|
|
||||||
channels = [rgbx.r.uint32, rgbx.g.uint32, rgbx.b.uint32, rgbx.a.uint32]
|
|
||||||
|
|
||||||
var coverage = newSeq[uint8](r)
|
|
||||||
|
|
||||||
for y in 0 ..< r:
|
|
||||||
zeroMem(coverage[0].addr, coverage.len)
|
|
||||||
var yf: float32 = y.float32 + qoffset
|
|
||||||
for m in 0 ..< q:
|
|
||||||
let hit = sqrt(rf^2 - yf^2)
|
|
||||||
coverage[hit.int] += max((1 - (hit - hit.trunc)) * 255 / qf, 0).uint8
|
|
||||||
for x in hit.int + 1 ..< r:
|
|
||||||
coverage[x] += (255 div q).uint8
|
|
||||||
yf += 1 / qf
|
|
||||||
|
|
||||||
for x in 0 ..< r:
|
|
||||||
let coverage = 255 - coverage[x]
|
|
||||||
if coverage != 255:
|
|
||||||
var cx: ColorRGBX
|
|
||||||
cx.r = ((channels[0] * coverage) div 255).uint8
|
|
||||||
cx.g = ((channels[1] * coverage) div 255).uint8
|
|
||||||
cx.b = ((channels[2] * coverage) div 255).uint8
|
|
||||||
cx.a = ((channels[3] * coverage) div 255).uint8
|
|
||||||
|
|
||||||
let
|
|
||||||
xn = r - x - 1
|
|
||||||
yn = r - y - 1
|
|
||||||
result.setRgbaUnsafe(xn, yn, cx)
|
|
||||||
result.setRgbaUnsafe(w1 - xn, yn, cx)
|
|
||||||
result.setRgbaUnsafe(w1 - xn, h1 - yn, cx)
|
|
||||||
result.setRgbaUnsafe(xn, h1 - yn, cx)
|
|
||||||
|
|
||||||
const r = 16
|
|
||||||
|
|
||||||
let img1 = newRoundedRectImage1(200, 200, r, color(0, 1, 0, 1))
|
|
||||||
img1.writeFile("rrect_current.png")
|
|
||||||
let img2 = newRoundedRectImage3(200, 200, r, color(0, 1, 0, 1))
|
|
||||||
img2.writeFile("rrect_new.png")
|
|
||||||
|
|
||||||
let (diffScore, diffImage) = diff(img1, img2)
|
|
||||||
echo &"score: {diffScore}"
|
|
||||||
diffImage.writeFile("rrect_diff.png")
|
|
||||||
|
|
||||||
timeIt "fill rounded rect via path 1":
|
|
||||||
for i in 0 ..< 10:
|
|
||||||
discard newRoundedRectImage1(200, 200, r, color(0, 1, 0, 1))
|
|
||||||
|
|
||||||
timeIt "fill rounded rect via path 1.5":
|
|
||||||
for i in 0 ..< 10:
|
|
||||||
discard newRoundedRectImage15(200, 200, r, color(0, 1, 0, 1))
|
|
||||||
|
|
||||||
timeIt "fill rounded rect via math 2":
|
|
||||||
for i in 0 ..< 10:
|
|
||||||
discard newRoundedRectImage2(200, 200, 50, color(0, 1, 0, 1))
|
|
||||||
|
|
||||||
timeIt "fill rounded rect via math 3":
|
|
||||||
for i in 0 ..< 10:
|
|
||||||
discard newRoundedRectImage3(200, 200, r, color(0, 1, 0, 1))
|
|
Loading…
Reference in a new issue