From cc59845233bedf480c405e6903756112fe03ff7f Mon Sep 17 00:00:00 2001 From: sumi Date: Tue, 23 Dec 2025 15:29:58 -0600 Subject: [PATCH] automated snapshot --- main.go | 30 +++++++++++++++++------------- sketch.go | 1 + utils.go | 5 +++++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index 6714e7c..cddb9fd 100644 --- a/main.go +++ b/main.go @@ -60,15 +60,17 @@ func main() { sierpinskiLayer := &SierpinskiArrow { dirty: true } - imageLayer := NewImageLayer("/home/d/Dropbox/photos/Events/2025/Aurora/Photo Nov 11 2025, 9 52 03 PM.jpg") + aurora := NewImageLayer("/home/d/Dropbox/photos/Events/2025/Aurora/Photo Nov 11 2025, 9 52 03 PM.jpg") + cave := NewImageLayer("/home/d/Dropbox/photos/Events/2025/ Chelsea and James visit Lindell/Photo Nov 29 2025, 5 26 40 PM (29).jpg") - //sketch.AddColorLayer("background-black", rl.Black) - sketch.AddColorLayer("background-magenta", rl.Magenta) - sketch.AddLayer("field", &FieldLayer{field: field, dirty: true}) + sketch.AddColorLayer("background-black", rl.Black) + //sketch.AddColorLayer("background-magenta", rl.Magenta) + sketch.AddLayer("field", &FieldLayer{field: field, loColor: rl.NewColor(0, 0, 0, 0), hiColor: rl.Magenta, dirty: true}) contourLayer := NewContourLayer(&sketch, rng, field) sketch.AddLayer("contours", contourLayer) - sketch.AddLayer("sierpinski", sierpinskiLayer) - sketch.AddLayer("aurora", imageLayer) + sketch.AddLayer("sierpinski-arrowhead", sierpinskiLayer) + sketch.AddLayer("aurora", aurora) + sketch.AddLayer("cave", cave) ports := MakePorts() ports["sierpinskiArrowAngle"] = @@ -218,25 +220,27 @@ func main() { type FieldLayer struct { field Field + loColor rl.Color + hiColor rl.Color dirty bool } -func (s *FieldLayer) Update(ctx *RenderCtx) { +func (fl *FieldLayer) Update(ctx *RenderCtx) { ; } -func (s *FieldLayer) Draw(ctx *RenderCtx) { +func (fl *FieldLayer) Draw(ctx *RenderCtx) { for x := range ctx.SourceWidth { for y := range ctx.SourceHeight { - v := s.field.Get(float32(x), float32(y)) - clr := GrayCurve(v, 1.0) + v := fl.field.Get(float32(x), float32(y)) + clr := LerpCurve(v, 1.0, fl.loColor, fl.hiColor) rl.DrawPixel(x, y, clr) } } - s.dirty = false + fl.dirty = false } -func (s *FieldLayer) IsDirty() bool { - return s.dirty +func (fl *FieldLayer) IsDirty() bool { + return fl.dirty } diff --git a/sketch.go b/sketch.go index d58dfaa..d2a1174 100644 --- a/sketch.go +++ b/sketch.go @@ -283,6 +283,7 @@ func (cl *ColorLayer) Update(ctx *RenderCtx) { func (cl *ColorLayer) Draw(ctx *RenderCtx) { rl.DrawRectangle(0, 0, ctx.SourceWidth, ctx.SourceHeight, cl.color) + cl.dirty = false } func (cl *ColorLayer) IsDirty() bool { diff --git a/utils.go b/utils.go index ef2c340..f7814de 100644 --- a/utils.go +++ b/utils.go @@ -21,6 +21,11 @@ func GrayCurve(v, k float32) rl.Color { return rl.Color{R: c, G: c, B: c, A: 255} } +func LerpCurve(v, k float32, lo rl.Color, hi rl.Color) rl.Color { + v = float32(math.Pow(float64(clamp01(v)), float64(k))) // k < 1 boosts highlights, k > 1 boosts shadows + return rl.ColorLerp(lo, hi, v) +} + func Brightness(c rl.Color) float32 { r := float32(c.R) / 255 g := float32(c.G) / 255