internal/graphicsdriver/opengl/gl: bug fix: always use OpenGL non-ES for Steam

Apparently, OpenGL ES caused an issue where Steam overlay didn't
work correctly. We are not sure the root cause, but there are similar
issues reported [1][2].

With Steam, it should be fine to assume that OpenGL non-ES is always
available.

Closes #3338

[1] https://github.com/ValveSoftware/steam-for-linux/issues/8122
[2] https://github.com/godotengine/godot/issues/53352
This commit is contained in:
Hajime Hoshi
2025-11-02 02:34:55 +09:00
parent 19cc46b11a
commit 9f8f50693a
@@ -19,6 +19,7 @@ package gl
import (
"errors"
"fmt"
"os"
"github.com/ebitengine/purego"
)
@@ -32,14 +33,19 @@ func (c *defaultContext) init() error {
var errs []error
// Try OpenGL ES first. Some machines like Android and Raspberry Pi might work only with OpenGL ES.
for _, name := range []string{"libGLESv2.so", "libGLESv2.so.2", "libGLESv2.so.1", "libGLESv2.so.0"} {
lib, err := purego.Dlopen(name, purego.RTLD_LAZY|purego.RTLD_GLOBAL)
if err == nil {
libGLES = lib
c.isES = true
return nil
//
// Do not use OpenGL ES for Steam, as overlays might not work properly (#3338).
// With Steam, OpenGL (not ES) should be available anyway.
if os.Getenv("SteamEnv") != "1" {
for _, name := range []string{"libGLESv2.so", "libGLESv2.so.2", "libGLESv2.so.1", "libGLESv2.so.0"} {
lib, err := purego.Dlopen(name, purego.RTLD_LAZY|purego.RTLD_GLOBAL)
if err == nil {
libGLES = lib
c.isES = true
return nil
}
errs = append(errs, fmt.Errorf("gl: Dlopen failed: name: %s: %w", name, err))
}
errs = append(errs, fmt.Errorf("gl: Dlopen failed: name: %s: %w", name, err))
}
// Try OpenGL next.