Windows系统下Go语言开发时gl函数加载失败怎么解决?
问题原因
该报错为OpenGL函数指针未加载触发的空指针调用。go-gl的gl包不会自动完成OpenGL函数指针加载,必须手动触发初始化;同时缺少GLFW窗口的OpenGL版本配置,无法保证创建的上下文与导入的3.3-core版本匹配。
解决方案
需要完成两处代码调整:
- 创建GLFW窗口前添加版本配置,指定创建OpenGL 3.3核心模式上下文
- 调用
w.MakeContextCurrent()之后,立刻调用gl.Init()加载所有OpenGL函数指针,同时校验初始化错误
修改后的完整代码如下:
package main import ( "log" "runtime" "github.com/go-gl/gl/v3.3-core/gl" "github.com/go-gl/glfw/v3.3/glfw" ) func init() { runtime.LockOSThread() } func main() { if err := glfw.Init(); err != nil { log.Fatal(err) } defer glfw.Terminate() // 指定OpenGL版本和核心模式 glfw.WindowHint(glfw.ContextVersionMajor, 3) glfw.WindowHint(glfw.ContextVersionMinor, 3) glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile) // 跨平台兼容可选配置,Windows下也可保留 glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True) w, err := glfw.CreateWindow(800, 600, "Glfw window", nil, nil) if err != nil { log.Fatal(err) } w.MakeContextCurrent() // 加载OpenGL函数指针 if err := gl.Init(); err != nil { log.Fatal(err) } for !w.ShouldClose() { gl.ClearColor(0, 0.1, 0, 1.0) gl.Clear(gl.COLOR_BUFFER_BIT) w.SwapBuffers() glfw.PollEvents() } }
验证说明
重新编译运行代码,正常会输出深绿色背景的800*600窗口,无段错误抛出。如果仍报错可检查当前设备显卡是否支持OpenGL 3.3及以上版本。
内容的提问来源于stack exchange,提问作者decitrig
相关产品推荐
相关产品推荐

