Files
aego/scene/frame/scale_test.go
sanspie 5eb1832907
ci-platforms / darwin amd64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 15m28s
ci / release (push) Skipped
ci-platforms / windows amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / checks (push) Successful in 7m47s
Complete Stage 12 for v0.12.0
2026-11-05 11:46:53 +03:00

72 lines
2.0 KiB
Go

package frame
import (
"testing"
"aego/core/mathx"
"aego/gpu"
"aego/gpu/null"
"aego/render/rt"
"aego/render/view"
)
func TestRenderScaleTarget(t *testing.T) {
dev := null.New()
r := New()
r.SetRenderScale(0.5)
r.scaleTarget(dev, 1280, 720, 1)
if r.RenderScale() != 0.5 {
t.Fatalf("render scale %v", r.RenderScale())
}
r.Prepare(1280, 720, 1)
if r.PixelScale() != 0.5 || r.pixelW != 640 || r.pixelH != 360 {
t.Fatalf("scaled frame %dx%d at %v", r.pixelW, r.pixelH, r.PixelScale())
}
out := r.Output()
if !out.Target.IsZero() || out.W != 1280 || out.H != 720 || out.Scale != 1 {
t.Fatalf("output %+v, want the full backbuffer", out)
}
ext := gpu.TextureHandle{}
r.SetTarget(ext, 800, 600)
r.scaleTarget(dev, 1280, 720, 1)
if r.RenderScale() != 1 {
t.Fatal("a host target was scaled")
}
r.Close()
}
func TestOnlyFullOpaqueCameraClearsOwnedPoolPadding(t *testing.T) {
pool := rt.New(null.New(), gpu.TexSRGBA8, "padded camera")
defer pool.Close()
target, err := pool.Resize(nil, 91, 73, false)
if err != nil {
t.Fatal(err)
}
r := New()
r.SetPooledTarget(target)
r.Prepare(1, 1, 1)
v := view.View{Target: target.Texture, TargetW: target.BucketW, TargetH: target.BucketH, Viewport: r.Viewport(mathx.Rect{}), DoClear: true, Clear: mathx.Color{A: 1}}
test := func(v view.View, want bool) {
t.Helper()
r.AddView(v, 0)
got := r.Views()[len(r.Views())-1]
if got.ClearWholeTarget != want || got.Viewport != v.Viewport || (want && got.ClearRegion() != (mathx.Rect{W: 128, H: 128})) {
t.Fatalf("camera %v / opacity %v: clear %v, whole=%v; want whole=%v", v.Viewport, v.Clear.A, got.ClearRegion(), got.ClearWholeTarget, want)
}
}
test(v, true)
split := v
split.Viewport.X, split.Viewport.W = 45, 46
test(split, false)
transparent := v
transparent.Clear.A = 0
test(transparent, false)
keep := v
keep.DoClear = false
test(keep, false)
r.SetTarget(target.Texture, target.BucketW, target.BucketH)
r.SetViewportSize(target.W, target.H)
test(v, false) // An arbitrary host's sub-rectangle doesn't own the padding.
pool.Release(target)
}