diff --git a/gpu/compute.go b/gpu/compute.go index 3baebe60..03265220 100644 --- a/gpu/compute.go +++ b/gpu/compute.go @@ -1723,7 +1723,11 @@ func (c *collector) addClip(state *encoderState, viewport, bounds f32.Rectangle, func (c *collector) collect(root *op.Ops, viewport image.Point, texOps *[]textureOp) { fview := f32.Rectangle{Max: layout.FPt(viewport)} - c.reader.Reset(&root.Internal) + var intOps *ops.Ops + if root != nil { + intOps = &root.Internal + } + c.reader.Reset(intOps) var state encoderState reset := func() { state = encoderState{ diff --git a/gpu/gpu.go b/gpu/gpu.go index b3f52f70..06d0c707 100644 --- a/gpu/gpu.go +++ b/gpu/gpu.go @@ -800,7 +800,11 @@ func (d *drawOps) collect(root *op.Ops, viewport image.Point) { viewf := f32.Rectangle{ Max: f32.Point{X: float32(viewport.X), Y: float32(viewport.Y)}, } - d.reader.Reset(&root.Internal) + var ops *ops.Ops + if root != nil { + ops = &root.Internal + } + d.reader.Reset(ops) d.collectOps(&d.reader, viewf) } diff --git a/gpu/headless/headless.go b/gpu/headless/headless.go index f5cae3bf..9cbcd4bb 100644 --- a/gpu/headless/headless.go +++ b/gpu/headless/headless.go @@ -55,7 +55,7 @@ func newContext() (context, error) { if firstErr != nil { return nil, firstErr } - return nil, errors.New("x11: no available GPU backends") + return nil, errors.New("headless: no available GPU backends") } // NewWindow creates a new headless window. diff --git a/gpu/headless/headless_test.go b/gpu/headless/headless_test.go index 1f2bd5d9..2e016394 100644 --- a/gpu/headless/headless_test.go +++ b/gpu/headless/headless_test.go @@ -132,6 +132,14 @@ func TestDepth(t *testing.T) { } } +func TestNoOps(t *testing.T) { + w, release := newTestWindow(t) + defer release() + if err := w.Frame(nil); err != nil { + t.Error(err) + } +} + func newTestWindow(t *testing.T) (*Window, func()) { t.Helper() sz := image.Point{X: 800, Y: 600}