automated snapshot

This commit is contained in:
sumi
2025-12-22 01:43:35 -06:00
parent 922c8bb2f6
commit 2f10e026a0
3 changed files with 73 additions and 20 deletions

View File

@@ -6,14 +6,20 @@ import (
)
type Sketch struct {
sourceWidth int32
sourceHeight int32
layerTools map[string]LayerTools
layerToolsOrdered []LayerTools
composite rl.RenderTexture2D
}
func NewSketch() Sketch {
return Sketch{
func NewSketch(sourceWidth, sourceHeight int32) Sketch {
return Sketch {
sourceWidth: sourceWidth,
sourceHeight: sourceHeight,
layerTools: make(map[string]LayerTools),
layerToolsOrdered: []LayerTools {},
composite: rl.LoadRenderTexture(sourceWidth, sourceHeight),
}
}
@@ -49,12 +55,28 @@ func (s *Sketch) Draw(ctx *RenderCtx) {
Height: float32(ctx.TargetHeight),
}
viewport := s.CalcViewport(ctx)
for _, instance := range s.layerToolsOrdered {
rl.DrawTexturePro(instance.texture.Texture, viewport, screen, rl.Vector2{}, 0, rl.White)
// copy from full texture for compositing, with vertical flipping
src := rl.Rectangle {
X: 0, Y: 0,
Width: float32(ctx.SourceWidth),
Height: -float32(ctx.SourceHeight),
}
dst := rl.Rectangle {
X: 0, Y: 0,
Width: float32(ctx.SourceWidth),
Height: float32(ctx.SourceHeight),
}
viewport := s.CalcViewport(ctx)
rl.BeginTextureMode(s.composite)
rl.ClearBackground(rl.Black)
for _, instance := range s.layerToolsOrdered {
rl.DrawTexturePro(instance.texture.Texture, src, dst, rl.Vector2{}, 0, rl.White)
}
rl.EndTextureMode()
rl.DrawTexturePro(s.composite.Texture, viewport, screen, rl.Vector2{}, 0, rl.White)
}
func (s *Sketch) CalcViewport(ctx *RenderCtx) rl.Rectangle {
@@ -98,6 +120,24 @@ func (s *Sketch) Update(ctx *RenderCtx) {
}
type SketchCapture struct {
compositeImage *rl.Image
layerImages []*rl.Image
}
func (s *Sketch) Capture() *SketchCapture {
composite := rl.LoadImageFromTexture(s.composite.Texture)
layerImages := make([]*rl.Image, len(s.layerToolsOrdered))
for i, layerTool := range s.layerToolsOrdered {
layerImages[i] = rl.LoadImageFromTexture(layerTool.texture.Texture)
}
return &SketchCapture {
compositeImage: composite,
layerImages: layerImages,
}
}
type LayerTools struct {
name string
layer Layer