//go:build ignore //kage:unit pixels package main var Time float func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { orig := imageSrc0At(srcPos) if orig.a < 0.01 { return orig } // Flame noise using position and time noise := fract(sin(dot(srcPos, vec2(12.9898, 78.233))) * 43758.5453) noise2 := fract(sin(dot(srcPos*0.5, vec2(45.123, 67.89))) * 12345.6789) noiseTime := fract(sin(dot(srcPos + Time*0.1, vec2(98.765, 43.21))) * 54321.9876) // Moving flame pattern flame := sin(srcPos.x*10.0 + Time*3.0) * cos(srcPos.y*8.0 - Time*2.5) flame2 := sin((srcPos.x*15.0 + srcPos.y*12.0) + Time*4.0) flamePattern := flame * 0.5 + flame2 * 0.5 // Combine noise and flame burnIntensity := (noise*0.3 + noise2*0.3 + noiseTime*0.2 + flamePattern*0.2) burnIntensity = clamp(burnIntensity, 0.0, 1.0) // Warm color palette r := 1.0 g := burnIntensity * 0.6 + 0.2 b := burnIntensity * 0.1 // Alpha a := orig.a // Edge glowing effect edgeGlow := abs(sin(srcPos.x*20.0 + srcPos.y*15.0 + Time*5.0)) * 0.3 return vec4( min(r + edgeGlow, 1.0), min(g + edgeGlow*0.5, 1.0), min(b + edgeGlow*0.2, 1.0), a, ) }