egl_windows.go raw

   1  // SPDX-License-Identifier: Unlicense OR MIT
   2  
   3  package wm
   4  
   5  import (
   6  	"github.com/p9c/p9/pkg/gel/gio/internal/egl"
   7  )
   8  
   9  type glContext struct {
  10  	win *window
  11  	*egl.Context
  12  }
  13  
  14  func init() {
  15  	drivers = append(drivers, gpuAPI{
  16  		priority: 2,
  17  		initializer: func(w *window) (Context, error) {
  18  			disp := egl.NativeDisplayType(w.HDC())
  19  			ctx, err := egl.NewContext(disp)
  20  			if err != nil {
  21  				return nil, err
  22  			}
  23  			return &glContext{win: w, Context: ctx}, nil
  24  		},
  25  	})
  26  }
  27  
  28  func (c *glContext) Release() {
  29  	if c.Context != nil {
  30  		c.Context.Release()
  31  		c.Context = nil
  32  	}
  33  }
  34  
  35  func (c *glContext) MakeCurrent() error {
  36  	c.Context.ReleaseSurface()
  37  	win, width, height := c.win.HWND()
  38  	eglSurf := egl.NativeWindowType(win)
  39  	if err := c.Context.CreateSurface(eglSurf, width, height); err != nil {
  40  		return err
  41  	}
  42  	if err := c.Context.MakeCurrent(); err != nil {
  43  		return err
  44  	}
  45  	c.Context.EnableVSync(true)
  46  	return nil
  47  }
  48  
  49  func (c *glContext) Lock() {}
  50  
  51  func (c *glContext) Unlock() {}
  52