GoGPU: 순수 Go GPU 프로그래밍을 위한 그래픽 라이브러리
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
Vulkan, Metal, DX12에서 동작하는 최신 API이며, 향후 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 & Graphics
- 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‑beta | API 안정화 | 📋 계획 |
| v1.0.0 | 프로덕션 준비 | 🎯 목표 |
레포지토리 개요
| 레포지토리 | 목적 | 상태 |
|---|---|---|
gogpu/gogpu | 핵심 그래픽 프레임워크 | Active |
gogpu/naga | 셰이더 컴파일러 | Active |
gogpu/gg | 2D 그래픽 API | Planned |
gogpu/ui | GUI 툴킷 | Future |
모든 레포지토리는 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
기여
이슈와 풀 리퀘스트를 언제든 환영합니다. 특히 다음 분야에 도움이 필요합니다:
- macOS 플랫폼 지원
- Linux 플랫폼 지원
- 문서화
- 추가 예제
자세한 내용은 레포지토리의 기여 가이드라인을 참고하세요.
마무리
Go에도 훌륭한 그래픽 라이브러리가 필요합니다. 함께 만들어 갑시다.
질문이 있나요? 댓글에 남겨 주세요.