github.com/gop9/olt@v0.0.0-20200202132135-d956aad50b08/gio/app/headless/headless_js.go (about) 1 // SPDX-License-Identifier: Unlicense OR MIT 2 3 package headless 4 5 import ( 6 "errors" 7 "syscall/js" 8 9 "github.com/gop9/olt/gio/app/internal/gl" 10 ) 11 12 type jsContext struct { 13 ctx js.Value 14 f *gl.Functions 15 } 16 17 func newContext() (*jsContext, error) { 18 version := 2 19 doc := js.Global().Get("document") 20 cnv := doc.Call("createElement", "canvas") 21 ctx := cnv.Call("getContext", "webgl2") 22 if ctx.IsNull() { 23 version = 1 24 ctx = cnv.Call("getContext", "webgl") 25 } 26 if ctx.IsNull() { 27 return nil, errors.New("headless: webgl is not supported") 28 } 29 f := &gl.Functions{Ctx: ctx} 30 if err := f.Init(version); err != nil { 31 return nil, err 32 } 33 c := &jsContext{ 34 ctx: ctx, 35 f: f, 36 } 37 return c, nil 38 } 39 40 func (c *jsContext) Functions() *gl.Functions { 41 return c.f 42 } 43 44 func (c *jsContext) Release() { 45 } 46 47 func (c *jsContext) ReleaseCurrent() { 48 } 49 50 func (c *jsContext) MakeCurrent() error { 51 return nil 52 }