loop_desktop.go 815 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //go:build !js && !wasm && !test_web_driver
  2. // +build !js,!wasm,!test_web_driver
  3. package glfw
  4. import (
  5. "fmt"
  6. "runtime"
  7. "fyne.io/fyne/v2"
  8. "github.com/go-gl/glfw/v3.3/glfw"
  9. )
  10. func (d *gLDriver) initGLFW() {
  11. initOnce.Do(func() {
  12. if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
  13. drawOnMainThread = true
  14. }
  15. err := glfw.Init()
  16. if err != nil {
  17. fyne.LogError("failed to initialise GLFW", err)
  18. return
  19. }
  20. initCursors()
  21. d.startDrawThread()
  22. })
  23. }
  24. func (d *gLDriver) tryPollEvents() {
  25. defer func() {
  26. if r := recover(); r != nil {
  27. fyne.LogError(fmt.Sprint("GLFW poll event error: ", r), nil)
  28. }
  29. }()
  30. glfw.PollEvents() // This call blocks while window is being resized, which prevents freeDirtyTextures from being called
  31. }
  32. func (d *gLDriver) Terminate() {
  33. glfw.Terminate()
  34. }