Foundation for the aego engine. core/ errs, log, handle arena, mathx, clock, stats platform SDL3 backend plus a headless one, input state, events gpu device abstraction with gl33 and null backends vfs scheme-based virtual filesystem with overlay mounts engine builder, module registry, phase-ordered system loop, jobs demos basic, resize, input, headless; sandbox driver OpenGL bindings are generated into gpu/gl33/gl by tools/gen-gl.sh, so the module has no external dependencies.
43 lines
889 B
Go
43 lines
889 B
Go
package integration
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"aego/core/log"
|
|
"aego/demos/basic"
|
|
"aego/engine"
|
|
)
|
|
|
|
func newEngine(t *testing.T) (*engine.Engine, *basic.Demo) {
|
|
t.Helper()
|
|
e, err := engine.NewBuilder(engine.Config{
|
|
Title: suite,
|
|
Headless: true,
|
|
HeadlessFrameTime: 1.0 / 60,
|
|
ResRoot: "../../demos/res",
|
|
UserRoot: t.TempDir(),
|
|
AppID: "aego-integration",
|
|
}).WithLogger(log.Nop()).Build()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return e, basic.New()
|
|
}
|
|
|
|
func TestHeadlessSmoke(t *testing.T) {
|
|
e, demo := newEngine(t)
|
|
defer e.Close()
|
|
for i := 0; i < 600; i++ {
|
|
if !e.Step(demo) {
|
|
t.Fatalf("engine stopped at frame %d: %v", i, e.Err())
|
|
}
|
|
}
|
|
s := e.Stats()
|
|
if s.FrameTime <= 0 {
|
|
t.Fatalf("frame time = %f", s.FrameTime)
|
|
}
|
|
if s.DrawCalls != 1 {
|
|
t.Fatalf("null backend reported %d draw calls, want 1", s.DrawCalls)
|
|
}
|
|
}
|