headless_js.go raw
1 // SPDX-License-Identifier: Unlicense OR MIT
2
3 package headless
4
5 import (
6 "errors"
7 "syscall/js"
8
9 "github.com/p9c/p9/pkg/gel/gio/gpu"
10 "github.com/p9c/p9/pkg/gel/gio/internal/gl"
11 )
12
13 type jsContext struct {
14 ctx js.Value
15 }
16
17 func newGLContext() (context, error) {
18 doc := js.Global().Get("document")
19 cnv := doc.Call("createElement", "canvas")
20 ctx := cnv.Call("getContext", "webgl2")
21 if ctx.IsNull() {
22 ctx = cnv.Call("getContext", "webgl")
23 }
24 if ctx.IsNull() {
25 return nil, errors.New("headless: webgl is not supported")
26 }
27 c := &jsContext{
28 ctx: ctx,
29 }
30 return c, nil
31 }
32
33 func (c *jsContext) API() gpu.API {
34 return gpu.OpenGL{Context: gl.Context(c.ctx)}
35 }
36
37 func (c *jsContext) Release() {
38 }
39
40 func (c *jsContext) ReleaseCurrent() {
41 }
42
43 func (c *jsContext) MakeCurrent() error {
44 return nil
45 }
46