gx VS Ebiten

Compare gx vs Ebiten and see what are their differences.

gx

A Go->C++transpiler meant for data-oriented gameplay and application programming especially for WebAssembly. Using this mostly in the context of specific personal projects and heavily focusing the feature set on those. Used in my Raylib gamejam project: https://github.com/nikki93/raylib-5k -- also being used to develop a private longer term game project and a note-taking app. (by nikki93)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
gx Ebiten
6 54
88 9,831
- -
4.8 9.8
23 days ago 8 days ago
Go Go
- Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

gx

Posts with mentions or reviews of gx. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-11-24.
  • Making Games in Go for Absolute Beginners
    17 projects | news.ycombinator.com | 24 Nov 2023
    Nice! Ebiten is a super nice API for Go. Lots there to be inspired by in API design. Another API I like a lot is Love for Lua (which also actually can be used from C++).

    Re: the comments on here about the GC etc. -- I've posted about this a couple times before but I've been using a custom Go -> C++ compiler for hobby gamedev, which helps with perf, gives access to C/C++ APIs (I've been using Raylib and physics engines etc.) and also especially has good perf in WebAssembly. Another nice thing is you can add in some reflection / metaprogramming stuff for eg. serializing structs or inspector UI for game entity properties. I was briefly experimenting with generating GLSL from Go code too so you can write shaders in Go and pass data to them with shared structs etc.

    The compiler: https://github.com/nikki93/gx

  • Gx: Go to C++ Compiler
    1 project | news.ycombinator.com | 17 Sep 2022
  • Cppfront, Herb Sutter's proposal for a new C++ syntax
    13 projects | news.ycombinator.com | 17 Sep 2022
    I've been using my own little Go (subset / my own extensions) -> C++ compiler -- https://github.com/nikki93/gx -- and found it to be a fun way to add some guardrails and nicer syntax over C++ usage. You get Go's package system and the syntax analyzers / syntax highlighters etc. just work.
  • Build Pong in Your Terminal with Go for Some Reason
    6 projects | news.ycombinator.com | 26 Jul 2022
    Re: perf for hobby gamedev, I basically agree for native builds, but lately I've felt like Wasm support seems key for hobby gamedev (so you can have more people play your game / without downloading it / it works directly on mobile too without dealing with app or play store). And Go perf in Wasm unfortunately is not so good (I was hitting big GC pauses when trying to make a game with Ebiten and large images).

    I ended up writing a Go -> C++ compiler. The games I've done with it don't use the GC at all but also don't manually manage memory -- they use an ECS api which helps. https://github.com/nikki93/gx -- the README links to development workflow video and complete example game code.

  • GoGCTuner brought CPU utilisation down ~50%
    5 projects | news.ycombinator.com | 12 Jan 2022
    I've written my own Go (subset + extensions) -> C++ transpiler and using it on a game project: https://www.youtube.com/watch?v=8He97Sl9iy0 -- No GC, it does have slices and has access to an entity/component API and with that I think you're basically set and don't need GC for games.

    Example transpiler input / output: https://github.com/nikki93/gx/blob/master/example/main.gx.go... becomes https://gist.github.com/nikki93/97ff376abb6718427387bb9cca2f...

  • I wrote a simple Go->C++ compiler for gameplay programming (gives module system, simple definition-checked generics, static reflection). Here's a demo from my game project. Generated C++ visible at end of video. Compiler source is ~1500 lines, link in description. Will do a public release soon!
    1 project | /r/cpp | 25 Nov 2021
    Hey thanks! The source code for the compiler itself is here: https://github.com/nikki93/gx along with a test / example under the 'example/' directory. This is the C++ output when compiling 'example/': https://gist.github.com/nikki93/b650c551ccb67490d8607980a582c468

Ebiten

Posts with mentions or reviews of Ebiten. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-11-24.
  • Lag Is Never Where You Want It... Or Don't Want It
    1 project | dev.to | 1 May 2024
    Reading ebiten docs and source code they very clearly state that writing RGBA bytes to an image is slow, and shouldn't really be done every frame, at least many times per frame. This is where I thought my performance was being lost, and it sent me looking for answers for ages. Turns out, I was wrong and right.
  • Making Games in Go for Absolute Beginners
    17 projects | news.ycombinator.com | 24 Nov 2023
    I love Go, yet I've never thought of it as a language with usable game engines. I'm extremely happy to find I was very wrong about that!

    I'm woefully behind the curve on compiling to WASM, though, and I've yet to experiment much with tinygo so I have no idea how far I would get in creating a game people could enjoy in a browser without having to download a big bundle of assets. It's reassuring to see WASM mentioned explicitly as a compilation target [1] by Ebitengine though.

    [1] https://github.com/hajimehoshi/ebiten

  • Ho did/do you remove cgo?
    1 project | /r/ebitengine | 18 Jun 2023
    For other OSes, see https://github.com/hajimehoshi/ebiten/issues/1162
  • Is there a love2d for c++?
    3 projects | /r/gamedev | 25 May 2023
    What about learning Go with Ebiten? Or Rust with Bevy?
  • What would be the closest thing to Unity/Unreal C#/C++ for Go to create games/animations/visual work?
    5 projects | /r/golang | 19 Apr 2023
    Actually, there is a game engine in Go. Ebiten(gine) is actually really popular and has already been used for a few games in production
  • How complex/big can I make games in Go?
    1 project | /r/golang | 9 Apr 2023
    Check out this thread, some of the linked repositories might be of help. https://github.com/hajimehoshi/ebiten/discussions/1527
  • Spaceshooter in Go
    1 project | dev.to | 13 Mar 2023
    // consider having a laser type to deal with orientation, etc // basic information to draw sprites, track position and update position type Body struct { // positions x float64 y float64 // velocities vx float64 vy float64 // get height and width from sheet.xml using sp width int height int } type Enemy struct { Body sp int health int } type Laser struct { Body sp int } type Mode int const ( ModeTitle Mode = iota ModeGame ModeGameOver ) var ( arcadeFont font.Face smallArcadeFont font.Face ) // fonts and sizes func init() { tt, err := truetype.Parse(fonts.ArcadeN_ttf) if err != nil { log.Fatal(err) } const dpi = 72 arcadeFont = truetype.NewFace(tt, &truetype.Options{ Size: fontSize, DPI: dpi, Hinting: font.HintingFull, }) smallArcadeFont = truetype.NewFace(tt, &truetype.Options{ Size: smallFontSize, DPI: dpi, Hinting: font.HintingFull, }) } // in the future have a laser type struct, spriteImgNum, and number of animations type Game struct { mode Mode level int // tracks location of player and maybe health Player struct { Body health int laserType int canShoot bool sp int // consider adding in height and width of player object // all of the sprites seem to be the same // TODO set global width } PLasers []*Laser Enemies []*Enemy ELasers []*Laser gameoverCount int } // load images func init() { // sprites img, _, err := image.Decode(bytes.NewReader(resources.Sprites_png)) if err != nil { log.Fatal(err) } gameImages, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault) // backgrounds img, _, err = image.Decode(bytes.NewReader(resources.Starfieldreal_jpg)) if err != nil { log.Fatal(err) } bgImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault) } // background image logic from // # https://github.com/hajimehoshi/ebiten/blob/master/examples/infinitescroll/main.go var ( theViewport = &viewport{} ) type viewport struct { x16 int y16 int } func (p *viewport) Move() { w, h := bgImage.Size() maxX16 := w * 16 maxY16 := h * 16 p.x16 += w / 32 p.y16 += h / 32 p.x16 %= maxX16 p.y16 %= maxY16 }
  • Mac + opengl
    2 projects | /r/GraphicsProgramming | 24 Jan 2023
    I noticed a similar issue when I got my MBP with the framebuffer not matching the window size and this has to do with the DPI settings. This GitHub link helped me understand the issue better and I hope it can be of assistance to you https://github.com/hajimehoshi/ebiten/pull/1811
  • crten - a small tool to view your pixel art with a CRT screen effect
    2 projects | /r/gamedev | 15 Nov 2022
    This program also demonstrates how great Ebitengine is and how you can port GLSL shaders to it almost 1 to 1.
  • Sharing Saturday #439
    3 projects | /r/roguelikedev | 4 Nov 2022
    Basic gist: built in Go with ebitengine, medieval fantasy, pixel art

What are some alternatives?

When comparing gx and Ebiten you can also consider the following projects:

printf - Tiny, fast(ish), self-contained, fully loaded printf, sprinf etc. implementation; particularly useful in embedded systems.

Pixel - A hand-crafted 2D game library in Go

cppfront - A personal experimental C++ Syntax 2 -> Syntax 1 compiler

raylib-go - Go bindings for raylib, a simple and easy-to-use library to enjoy videogames programming.

rotaterm

go-sdl2 - SDL2 binding for Go

flapioca - A Flappy Bird-inspired terminal game written in Go.

engo - Engo is an open-source 2D game engine written in Go.

go - The Go programming language

resolv - A Simple 2D Golang collision detection and resolution library for games

Vrmac - Vrmac Graphics, a cross-platform graphics library for .NET. Supports 3D, 2D, and accelerated video playback. Works on Windows 10 and Raspberry Pi4.

Oak - A pure Go game engine