我对 Go 还是比较陌生,我决定尝试一些 OpenGL,因为存在一个为此提供绑定的 Go 库。作为设置 OpenGL 的一部分,我需要使用 Go glfw 库。我需要使用 glfw 库函数SetFramebufferSizeCallback ,它需要一个FrameBuffersizeCallback类型的参数;所以我基本上需要传递一个与我相信我已经完成的类型的签名相匹配的函数。但是,我不断收到以下错误:
./main.go:43:35: 不能在 window.SetFramebufferSizeCallback 的参数中使用 fbCallback(类型 func(*glfw.Window,int32,int32))作为类型 glfw.FramebufferSizeCallback
我真的不确定为什么会这样。我检查过我的 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)
}
慕侠2389804
相关分类