Я все еще относительно новичок в Go и решил попробовать OpenGL, так как существует библиотека Go, которая обеспечивает привязки для этого.В рамках настройки OpenGL мне нужно использовать библиотеку Go glfw .Мне нужно использовать библиотечную функцию glfw SetFramebufferSizeCallback , для которой требуется аргумент типа FrameBuffersizeCallback ;поэтому мне по сути нужно передать функцию, соответствующую сигнатуре этого типа, что я считаю, что я сделал.Тем не менее, я получаю следующую ошибку:
. / Main.go: 43: 35: не могу использовать fbCallback (тип func (* glfw.Window, int32, int32)) как тип glfw.FramebufferSizeCallbackв аргументе для окна. SetFramebufferSizeCallback
И я действительно не уверен, почему это происходит.Я проверил, что моя версия glfw соответствует документации;Я проверил код для реализации на github и моей машине, и все это соответствует.Так что я понятия не имею, что я делаю не так.Вот мой код, он не должен делать ничего интересного, если построен, но демонстрирует ошибку:
package main
import (
"github.com/go-gl/gl/v3.3-core/gl"
"github.com/go-gl/glfw/v3.2/glfw"
"log"
"runtime"
)
func fbCallback(window *glfw.Window, width int32, height int32) {
gl.Viewport(0, 0, width, height)
}
func init() {
runtime.LockOSThread()
}
func main() {
err := glfw.Init()
if err != nil {
panic(err)
}
defer glfw.Terminate()
glfw.WindowHint(glfw.ContextVersionMajor, 3)
glfw.WindowHint(glfw.ContextVersionMinor, 3)
glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
window, err := glfw.CreateWindow(640, 480, "Testing", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
if err := gl.Init(); err != nil {
log.Fatalln(err)
}
gl.Viewport(0, 0, 800, 600)
window.SetFramebufferSizeCallback(fbCallback) //Does not work
}
Мое понимание того, как это должно действительно работать, продемонстрировано в следующей короткой программе, которая работает.Я был бы рад, если бы кто-то указал, почему этот короткий пример работает, а выше - нет.У меня могут быть некоторые дыры в моем понимании.
package main
import (
"fmt"
)
type callback func(int, int) int
func sum(x int, y int) int {
return x + y
}
func useCallback(cb callback) {
result := cb(2, 3)
fmt.Println(result)
}
func main() {
useCallback(sum)
}