From ec5b034cbf50f05517a374888190e1dbf410bbe1 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Thu, 15 Jul 2021 01:02:54 +0900 Subject: [PATCH] Update GLFW: suppress joystick issue (again) Updates #1229 --- go.mod | 2 +- go.sum | 4 ++-- internal/glfw/glfw_windows.go | 8 ++++++-- internal/glfw/load_windows.go | 20 ++++++++++++-------- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index 6f53d34dc..d3135a6bc 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/hajimehoshi/ebiten/v2 go 1.15 require ( - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210714145042-ef648d7b4198 + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210714155130-550f9471722b github.com/gofrs/flock v0.8.0 github.com/hajimehoshi/bitmapfont/v2 v2.1.3 github.com/hajimehoshi/file2byteslice v0.0.0-20200812174855-0e5e8a80490e diff --git a/go.sum b/go.sum index 84cf0bd27..b4d2cd8e5 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210714145042-ef648d7b4198 h1:ucTpB2JPNdBbIedBwFGl3p8j94ecAIYfkoYV7r3nV+E= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210714145042-ef648d7b4198/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210714155130-550f9471722b h1:WrW6EbWsK1YaFiljN7kZ91bSHcyDgLz34jZvu71yVwE= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210714155130-550f9471722b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/hajimehoshi/bitmapfont/v2 v2.1.3 h1:JefUkL0M4nrdVwVq7MMZxSTh6mSxOylm+C4Anoucbb0= diff --git a/internal/glfw/glfw_windows.go b/internal/glfw/glfw_windows.go index 1602c2ef5..3be8ae2a3 100644 --- a/internal/glfw/glfw_windows.go +++ b/internal/glfw/glfw_windows.go @@ -420,10 +420,14 @@ func GetPrimaryMonitor() *Monitor { func Init() error { glfwDLL.call("glfwInit") // InvalidValue can happen when specific joysticks are used. This issue - // will be fixed in GLFW 3.3.5. As a temporary fix, accept this error. + // will be fixed in GLFW 3.3.5. As a temporary fix, ignore this error. // See go-gl/glfw#292, go-gl/glfw#324, and glfw/glfw#1763 // (#1229). - return acceptError(APIUnavailable, InvalidValue) + err := acceptError(APIUnavailable, InvalidValue) + if e, ok := err.(*glfwError); ok && e.code == InvalidValue { + return nil + } + return err } func (j Joystick) Present() bool { diff --git a/internal/glfw/load_windows.go b/internal/glfw/load_windows.go index 3f554b2f6..20bc14a26 100644 --- a/internal/glfw/load_windows.go +++ b/internal/glfw/load_windows.go @@ -129,7 +129,7 @@ func (e *glfwError) Error() string { var lastErr = make(chan *glfwError, 1) -func fetchError() error { +func fetchError() *glfwError { select { case err := <-lastErr: return err @@ -146,7 +146,7 @@ func panicError() { func flushErrors() { if err := fetchError(); err != nil { - panic(fmt.Sprintf("glfw: uncaught error: %s", err)) + panic(fmt.Sprintf("glfw: uncaught error: %s", err.Error())) } } @@ -156,14 +156,18 @@ func acceptError(codes ...ErrorCode) error { return nil } for _, c := range codes { - if err.(*glfwError).code == c { - return nil + if err.code == c { + return err } } - if err.(*glfwError).code == PlatformError { - // PlatformError is not handled here (See github.com/go-gl/glfw's implementation). - // TODO: Should we log this error? + switch err.code { + case PlatformError: + // TODO: Should we log this? return nil + case NotInitialized, NoCurrentContext, InvalidEnum, InvalidValue, OutOfMemory: + panic(err) + default: + panic(fmt.Sprintf("glfw: uncaught error: %s", err.Error())) } return err } @@ -177,7 +181,7 @@ func goGLFWErrorCallback(code uintptr, desc *byte) uintptr { select { case lastErr <- err: default: - panic(fmt.Sprintf("glfw: uncaught error: %s", err)) + panic(fmt.Sprintf("glfw: uncaught error: %s", err.Error())) } return 0 }