You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:39:03