diff --git a/experiments/benchmark_cairo_draw.nim b/experiments/benchmark_cairo_draw.nim new file mode 100644 index 0000000..9798b35 --- /dev/null +++ b/experiments/benchmark_cairo_draw.nim @@ -0,0 +1,130 @@ +import benchy, cairo, pixie + +block: + let + backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png") + source = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/Ghostscript_Tiger.png") + tmp = imageSurfaceCreate(FORMAT_ARGB32, 1568, 940) + ctx = tmp.create() + + timeIt "cairo draw basic": + ctx.setSource(backdrop, 0, 0) + ctx.paint() + ctx.setSource(source, 0, 0) + ctx.paint() + tmp.flush() + + # echo tmp.writeToPng("tmp.png") + +block: + let + backdrop = readImage("tests/fileformats/svg/masters/dragon2.png") + source = readImage("tests/fileformats/svg/masters/Ghostscript_Tiger.png") + tmp = newImage(1568, 940) + + timeIt "isOneColor": + doAssert not backdrop.isOneColor() + + timeIt "pixie draw basic": + tmp.draw(backdrop) + tmp.draw(source) + + # tmp.writeFile("tmp2.png") + +block: + let + backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png") + source = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/Ghostscript_Tiger.png") + tmp = imageSurfaceCreate(FORMAT_ARGB32, 1568, 940) + ctx = tmp.create() + + timeIt "cairo draw smooth": + var + mat = mat3() + matrix = cairo.Matrix( + xx: mat[0, 0], + yx: mat[0, 1], + xy: mat[1, 0], + yy: mat[1, 1], + x0: mat[2, 0], + y0: mat[2, 1], + ) + ctx.setMatrix(matrix.unsafeAddr) + ctx.setSource(backdrop, 0, 0) + ctx.paint() + mat = rotate(15.toRadians) + matrix = cairo.Matrix( + xx: mat[0, 0], + yx: mat[0, 1], + xy: mat[1, 0], + yy: mat[1, 1], + x0: mat[2, 0], + y0: mat[2, 1], + ) + ctx.setMatrix(matrix.unsafeAddr) + ctx.setSource(source, 0, 0) + ctx.paint() + tmp.flush() + + # echo tmp.writeToPng("tmp.png") + +block: + let + backdrop = readImage("tests/fileformats/svg/masters/dragon2.png") + source = readImage("tests/fileformats/svg/masters/Ghostscript_Tiger.png") + tmp = newImage(1568, 940) + + timeIt "pixie draw smooth": + tmp.draw(backdrop) + tmp.draw(source, translate(vec2(0.5, 0.5))) + + # tmp.writeFile("tmp2.png") + +block: + let + backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png") + source = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/Ghostscript_Tiger.png") + tmp = imageSurfaceCreate(FORMAT_ARGB32, 1568, 940) + ctx = tmp.create() + + timeIt "cairo draw smooth rotated": + var + mat = mat3() + matrix = cairo.Matrix( + xx: mat[0, 0], + yx: mat[0, 1], + xy: mat[1, 0], + yy: mat[1, 1], + x0: mat[2, 0], + y0: mat[2, 1], + ) + ctx.setMatrix(matrix.unsafeAddr) + ctx.setSource(backdrop, 0, 0) + ctx.paint() + mat = rotate(15.toRadians) + matrix = cairo.Matrix( + xx: mat[0, 0], + yx: mat[0, 1], + xy: mat[1, 0], + yy: mat[1, 1], + x0: mat[2, 0], + y0: mat[2, 1], + ) + ctx.setMatrix(matrix.unsafeAddr) + ctx.setSource(source, 0, 0) + ctx.paint() + tmp.flush() + + # echo tmp.writeToPng("tmp.png") + +block: + let + backdrop = readImage("tests/fileformats/svg/masters/dragon2.png") + source = readImage("tests/fileformats/svg/masters/Ghostscript_Tiger.png") + tmp = newImage(1568, 940) + + timeIt "pixie draw smooth rotated": + tmp.draw(backdrop) + tmp.draw(source, rotate(15.toRadians)) + + # tmp.writeFile("tmp2.png") diff --git a/experiments/svg_cairo.nim b/experiments/svg_cairo.nim index 916b01d..d246aa2 100644 --- a/experiments/svg_cairo.nim +++ b/experiments/svg_cairo.nim @@ -580,7 +580,7 @@ proc decodeSvg*(data: string, width = 0, height = 0): Image = let bgra = pixels[result.dataIndex(x, y)] rgba = rgba(bgra[2], bgra[1], bgra[0], bgra[3]) - result.setRgbaUnsafe(x, y, rgba.rgbx()) + result.unsafe[x, y] = rgba.rgbx() except PixieError as e: raise e except: