egl_windows.go 1.0 KB

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