2a0b0077da6f4065b5ec1e0989e07975ec1614bc — Elias Naur a month ago 7bc18c0
ui/app: (wasm) add checks for required extensions

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2 files changed, 21 insertions(+), 11 deletions(-)

M ui/app/gl_js.go
M ui/app/internal/gl/gl_js.go
M ui/app/gl_js.go => ui/app/gl_js.go +5 -1
@@ 23,15 23,19 @@ "desynchronized":        true,
  		"preserveDrawingBuffer": true,
  	}
+ 	version := 2
  	ctx := w.cnv.Call("getContext", "webgl2", args)
  	if ctx == js.Null() {
+ 		version = 1
  		ctx = w.cnv.Call("getContext", "webgl", args)
  	}
  	if ctx == js.Null() {
  		return nil, errors.New("app: webgl is not supported")
  	}
  	f := &gl.Functions{Ctx: ctx}
- 	f.Init()
+ 	if err := f.Init(version); err != nil {
+ 		return nil, err
+ 	}
  	c := &context{
  		ctx: ctx,
  		cnv: w.cnv,

M ui/app/internal/gl/gl_js.go => ui/app/internal/gl/gl_js.go +16 -10
@@ 3,6 3,7 @@ package gl
  
  import (
+ 	"errors"
  	"strings"
  	"syscall/js"
  )


@@ 17,18 18,23 @@ int32Buf js.Value
  }
  
- func (f *Functions) Init() {
- 	f.EXT_disjoint_timer_query_webgl2 = f.getExtension("EXT_disjoint_timer_query_webgl2")
- 	if f.EXT_disjoint_timer_query_webgl2 == js.Null() {
+ func (f *Functions) Init(version int) error {
+ 	if version < 2 {
  		f.EXT_disjoint_timer_query = f.getExtension("EXT_disjoint_timer_query")
+ 		if f.getExtension("OES_texture_half_float") == js.Null() && f.getExtension("OES_texture_float") == js.Null() {
+ 			return errors.New("gl: no support for neither OES_texture_half_float nor OES_texture_float")
+ 		}
+ 		if f.getExtension("EXT_sRGB") == js.Null() {
+ 			return errors.New("gl: EXT_sRGB not supported")
+ 		}
+ 	} else {
+ 		// WebGL2 extensions.
+ 		f.EXT_disjoint_timer_query_webgl2 = f.getExtension("EXT_disjoint_timer_query_webgl2")
+ 		if f.getExtension("EXT_color_buffer_half_float") == js.Null() && f.getExtension("EXT_color_buffer_float") == js.Null() {
+ 			return errors.New("gl: no support for neither EXT_color_buffer_half_float nor EXT_color_buffer_float")
+ 		}
  	}
- 	// Enable extensions.
- 	f.getExtension("OES_texture_half_float")
- 	f.getExtension("OES_texture_float")
- 	f.getExtension("EXT_sRGB")
- 	// WebGL2 extensions
- 	f.getExtension("EXT_color_buffer_half_float")
- 	f.getExtension("EXT_color_buffer_float")
+ 	return nil
  }
  
  func (f *Functions) getExtension(name string) js.Value {