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