GoGPU: 순수 Go GPU 프로그래밍을 위한 그래픽 라이브러리

발행: (2025년 12월 6일 오전 04:00 GMT+9)
6 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

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‑betaAPI 안정화📋 계획
v1.0.0프로덕션 준비🎯 목표

레포지토리 개요

레포지토리목적상태
gogpu/gogpu핵심 그래픽 프레임워크Active
gogpu/naga셰이더 컴파일러Active
gogpu/gg2D 그래픽 APIPlanned
gogpu/uiGUI 툴킷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에도 훌륭한 그래픽 라이브러리가 필요합니다. 함께 만들어 갑시다.
질문이 있나요? 댓글에 남겨 주세요.

Back to Blog

관련 글

더 보기 »

Show HN: SerpApi MCP 서버

기사 URL: https://github.com/serpapi/serpapi-mcp 댓글 URL: https://news.ycombinator.com/item?id=46165251 포인트: 4 댓글: 1