diff --git a/internal/graphicsdriver/opengl/gl/default_gles.go b/internal/graphicsdriver/opengl/gl/default_android.go similarity index 99% rename from internal/graphicsdriver/opengl/gl/default_gles.go rename to internal/graphicsdriver/opengl/gl/default_android.go index 506b32794..5e6232615 100644 --- a/internal/graphicsdriver/opengl/gl/default_gles.go +++ b/internal/graphicsdriver/opengl/gl/default_android.go @@ -12,12 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build android || opengles - package gl -// #cgo !android pkg-config: glesv2 -// #cgo android LDFLAGS: -lGLESv2 +// #cgo LDFLAGS: -lGLESv2 // // #include // #include diff --git a/internal/graphicsdriver/opengl/gl/default_notpurego.go b/internal/graphicsdriver/opengl/gl/default_notpurego.go index 9c6741a1d..67305030d 100644 --- a/internal/graphicsdriver/opengl/gl/default_notpurego.go +++ b/internal/graphicsdriver/opengl/gl/default_notpurego.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // SPDX-FileCopyrightText: 2014 Eric Woroshow -//go:build !android && !darwin && !js && !windows && !opengles +//go:build !android && !darwin && !js && !windows package gl diff --git a/internal/graphicsdriver/opengl/gl/procaddr_others.go b/internal/graphicsdriver/opengl/gl/procaddr_gl.go similarity index 100% rename from internal/graphicsdriver/opengl/gl/procaddr_others.go rename to internal/graphicsdriver/opengl/gl/procaddr_gl.go diff --git a/internal/graphicsdriver/opengl/gl/procaddr_gles.go b/internal/graphicsdriver/opengl/gl/procaddr_gles.go new file mode 100644 index 000000000..8a0dec9e6 --- /dev/null +++ b/internal/graphicsdriver/opengl/gl/procaddr_gles.go @@ -0,0 +1,46 @@ +// Copyright 2022 The Ebitengine Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !android && !darwin && !js && !nintendosdk && !windows && opengles + +package gl + +// #cgo LDFLAGS: -ldl +// +// #include +// #include +// +// static void* getProcAddress(const char* name) { +// static void* libGLES; +// if (!libGLES) { +// libGLES = dlopen("libGLESv2.so", RTLD_NOW | RTLD_GLOBAL); +// } +// return dlsym(libGLES, name); +// } +import "C" + +import ( + "strings" + "unsafe" +) + +func getProcAddress(namea string) unsafe.Pointer { + const ext = "EXT" + if strings.HasSuffix(namea, ext) { + namea = namea[:len(namea)-len(ext)] + } + cname := C.CString(namea) + defer C.free(unsafe.Pointer(cname)) + return C.getProcAddress(cname) +}