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  }