GoGPU:一个纯 Go 图形库,用于 GPU 编程

发布: (2025年12月6日 GMT+8 03:00)
5 min read
原文: Dev.to

Source: Dev.to

问题:Go 与图形编程不兼容(直到现在)

如果你曾经尝试在 Go 中进行图形编程,你一定体会过以下痛点:

  • CGO 地狱 – 大多数库都需要 C 编译器。
  • 项目被抛弃 – 有前景的仓库自 2019 年后再无更新。
  • “直接用 Rust/C++” – 每个论坛的默认答案。

一篇关于 Go GUI 开发的 Reddit 贴子获得了上百个赞和数十条评论,全部在问:

“为什么我们在 Go 中不能拥有好用的图形库?”

这种沮丧促成了 GoGPU 的诞生——一个纯 Go 的 GPU 计算生态系统,旨在让每位 Go 开发者都能轻松进行图形编程。

原则

Zero‑CGO

无需 C 编译器。通过 FFI 实现纯 Go 绑定。

WebGPU‑First

现代 API,兼容 Vulkan、Metal、DX12,未来将支持 WASM。

Simple by Default

简单的事儿就应该简单,困难的事儿也能实现。

Cross‑Platform

今天支持 Windows;macOS 与 Linux 即将到来。

示例:绘制彩色三角形

package main

import (
	"log"

	"github.com/gogpu/gogpu"
	"github.com/gogpu/gogpu/math"
)

func main() {
	app := gogpu.NewApp(gogpu.DefaultConfig().
		WithTitle("GoGPU Triangle").
		WithSize(800, 600))

	app.OnDraw(func(ctx *gogpu.Context) {
		ctx.DrawTriangleColor(math.DarkGray)
	})

	if err := app.Run(); err != nil {
		log.Fatal(err)
	}
}

仅 15 行 Go 代码 —— 等价的原始 WebGPU 代码需要 400–500 行样板代码。

GoGPU 负责:

  • 窗口创建与事件循环
  • GPU 设备初始化
  • 表面配置
  • 着色器编译
  • 渲染管线搭建
  • 帧呈现

你只需关注 绘制什么;GoGPU 负责 如何绘制

架构概览

┌─────────────────────────────────────────┐
│           Your Application              │
│         (15 lines of code)              │
├─────────────────────────────────────────┤
│             gogpu/gogpu                 │
│         Graphics Framework              │
├─────────────────────────────────────────┤
│             gogpu/naga                  │
│    Shader Compiler (WGSL → SPIR‑V)      │
├─────────────────────────────────────────┤
│          go-webgpu/webgpu               │
│       Pure Go WebGPU Bindings           │
├─────────────────────────────────────────┤
│          go-webgpu/goffi                │
│        Pure Go FFI (Zero‑CGO)           │
├─────────────────────────────────────────┤
│            wgpu-native                  │
│       Vulkan / Metal / DX12             │
└─────────────────────────────────────────┘

核心创新是 goffi —— 一个纯 Go 的 FFI 库,让我们在不使用 CGO 的情况下调用本地代码,省去 C 编译器的需求,简化构建流程。

生态系统与依赖

  • GPU 与图形

    • Born ML – 带 GPU 计算的机器学习框架
    • go-webgpu/webgpu – 为 GoGPU 提供动力的 WebGPU 绑定
  • 系统与库

    • Phoenix TUI – 终端 UI 框架
    • scigolib/hdf5 – 科学计算绑定
    • scigolib/matlab – 类 MATLAB 操作
    • coregx/* – 信号、状态复制、函数式响应流、正则工具
    • kolkov/racedetector – 竞态检测工具

这些经过实战检验的项目构成了 GoGPU 的基石。

版本里程碑

版本里程碑状态
v0.0.x项目结构✅ 已完成
v0.1.0‑alpha三角形渲染✅ 已完成
v0.2.0‑alpha纹理与精灵🔄 即将实现
v0.3.0‑alpha文本渲染📋 计划中
v0.5.0‑betaAPI 稳定化📋 计划中
v1.0.0生产就绪🎯 目标

仓库概览

仓库用途状态
gogpu/gogpu核心图形框架活跃
gogpu/naga着色器编译器活跃
gogpu/gg2D 图形 API计划
gogpu/uiGUI 工具包未来

所有仓库均托管在 github.com/gogpu 组织下。

WebGPU 是未来

  • 跨平台设计 – 在 Windows、macOS、Linux 以及浏览器上使用同一套 API。
  • 现代架构 – 借鉴 Vulkan、Metal、DX12 的经验构建。
  • 默认安全 – 验证层可防止常见的 GPU 编程错误。
  • 可在浏览器运行 – 代码可编译为 WASM(未来目标)。

当前状态

  • 版本: v0.1.0‑alpha(早期开发)
  • 平台: Windows(macOS/Linux 框架已就绪)
  • API: 仍在演进,预计会有破坏性更改。

架构已基本成形,三角形能够渲染,底层(go‑webgpu)已被验证。

入门指南

git clone https://github.com/gogpu/gogpu
cd gogpu
go run ./examples/triangle

贡献

欢迎提交 Issue 与 Pull Request,尤其是以下方向:

  • macOS 平台支持
  • Linux 平台支持
  • 文档完善
  • 更多示例

请参阅仓库的贡献指南获取详细信息。

结语

Go 应该拥有一套优秀的图形库。让我们一起构建它。
有疑问吗?在评论区留言吧。

Back to Blog

相关文章

阅读更多 »