egl_android.go raw
1 // SPDX-License-Identifier: Unlicense OR MIT
2
3 package wm
4
5 /*
6 #include <EGL/egl.h>
7 */
8 import "C"
9
10 import (
11 "unsafe"
12
13 "github.com/p9c/p9/pkg/gel/gio/internal/egl"
14 )
15
16 type context struct {
17 win *window
18 *egl.Context
19 }
20
21 func (w *window) NewContext() (Context, error) {
22 ctx, err := egl.NewContext(nil)
23 if err != nil {
24 return nil, err
25 }
26 return &context{win: w, Context: ctx}, nil
27 }
28
29 func (c *context) Release() {
30 if c.Context != nil {
31 c.Context.Release()
32 c.Context = nil
33 }
34 }
35
36 func (c *context) MakeCurrent() error {
37 c.Context.ReleaseSurface()
38 win, width, height := c.win.nativeWindow(c.Context.VisualID())
39 if win == nil {
40 return nil
41 }
42 eglSurf := egl.NativeWindowType(unsafe.Pointer(win))
43 if err := c.Context.CreateSurface(eglSurf, width, height); err != nil {
44 return err
45 }
46 if err := c.Context.MakeCurrent(); err != nil {
47 return err
48 }
49 return nil
50 }
51
52 func (c *context) Lock() {}
53
54 func (c *context) Unlock() {}
55