Files
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

45 lines
1.4 KiB
Go

package material
import (
"testing"
"aego/gpu/null"
"aego/render/shader"
)
func TestPendingTracksCandidateUntilCommitOrCancellation(t *testing.T) {
dev := null.New()
defer dev.Close()
c := NewCache(dev, false, spritePipe)
defer c.Close()
old := testShader("old", nil, []uint32{0}, pspec{"Value", shader.KindFloat, [4]float32{1}, false})
next := testShader("next", nil, []uint32{0}, pspec{"Value", shader.KindFloat, [4]float32{2}, false})
a, _ := New("a", old, 0, shader.BlendPremultiplied)
b, _ := New("b", old, 0, shader.BlendPremultiplied)
untracked, _ := New("untracked", old, 0, shader.BlendPremultiplied)
c.Track(a)
c.Track(b)
if c.Pending(a) || c.Pending(nil) {
t.Fatal("no candidate is pending")
}
c.QueueReload(old, next, []*Material{a}, nil)
if !c.Pending(a) || !c.Pending(b) || c.Pending(untracked) || a.Shader() != old {
t.Fatal("group candidate was not distinguished from committed definitions")
}
c.Begin()
c.End()
if c.Pending(a) || c.Pending(b) || a.Shader() != next || b.Shader() != next {
t.Fatal("successful frame-boundary commit did not clear pending state")
}
candidate, _ := New("a draft", next, 0, shader.BlendPremultiplied)
candidate.Set("Value", [4]float32{3})
c.QueueMaterial(a, candidate, nil)
if !c.Pending(a) || c.Pending(b) {
t.Fatal("isolated material candidate affected its shared-shader neighbor")
}
c.CancelMaterial(a)
if c.Pending(a) {
t.Fatal("cancelled candidate is still reported pending")
}
}