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