aboutsummaryrefslogtreecommitdiff
path: root/cmd/ff-primitive/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/ff-primitive/main.go')
-rw-r--r--cmd/ff-primitive/main.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/cmd/ff-primitive/main.go b/cmd/ff-primitive/main.go
new file mode 100644
index 0000000..3ee0882
--- /dev/null
+++ b/cmd/ff-primitive/main.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+ "flag"
+ "image"
+ "log"
+ "os"
+ "runtime"
+ "runtime/pprof"
+
+ "github.com/Xe/x/internal"
+ "github.com/fogleman/primitive/primitive"
+ farbfeld "github.com/hullerob/go.farbfeld"
+)
+
+var (
+ shapeCount = flag.Int("count", 150, "number of shapes used")
+ repeatShapeCount = flag.Int("repeat-count", 0, "number of extra shapes drawn in each step")
+ alpha = flag.Int("alpha", 128, "alpha of all shapes")
+ cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
+)
+
+func stepImg(img image.Image, count int) image.Image {
+ bg := primitive.MakeColor(primitive.AverageImageColor(img))
+ model := primitive.NewModel(img, bg, 512, runtime.NumCPU())
+
+ for range make([]struct{}, count) {
+ model.Step(primitive.ShapeTypeTriangle, *alpha, *repeatShapeCount)
+ }
+
+ return model.Context.Image()
+}
+
+func main() {
+ internal.HandleStartup()
+
+ if *cpuprofile != "" {
+ f, err := os.Create(*cpuprofile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ pprof.StartCPUProfile(f)
+ defer pprof.StopCPUProfile()
+ }
+
+ img, err := farbfeld.Decode(os.Stdin)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ err = farbfeld.Encode(os.Stdout, stepImg(img, *shapeCount))
+ if err != nil {
+ log.Fatal(err)
+ }
+}