▲ 36 r/GraphicsProgramming+1 crossposts

I shipped a 100-level game on macOS and iOS with no game engine - CGContext into an IOSurface, presented through Metal

I spent the last year building an arcade game in Swift without an engine. The renderer ended up somewhere I did not expect, so it seemed worth writing up properly.

The shape of it:

- Drawing is CGContext. Not SpriteKit, not custom Metal shaders for the game content - actual Core Graphics 2D calls, because the game is polygons and.gradients rather than sprites. Everything is drawn, nothing is blitted.

- That context is backed by an IOSurface, presented zero-copy through Metal. The obvious alternative - render into a CGBitmapContext, then hand the bytes to Metal - measured 5 to 10 times slower. That experiment is still in the repo as an archived failure rather than deleted, because the measurement is the useful part.

- One codebase renders on both AppKit and UIKit. The platform layer is a handful of files - display link, input, haptics - and the roughly 7,600-line renderer is shared verbatim between Mac and iPhone.

- iOS has a thermal governor: sustained load steps the frame rate 60 to 30 so a long session does not cook the phone. On device, a render scale of 1.5 turned out to be the 60fps sweet spot; 2.0 fell off a cliff.

- Gradients are memoized - about 166 cached. Allocating them per frame was the single largest early performance win, and it was not close.

The thing I would tell anyone considering this: a hand-rolled renderer was the right call for this specific game, because it is 2D vector-ish content where Core Graphics is genuinely good, and it would be the wrong call for almost anything else. I would not do it for a sprite-based game. I would not do it for 3D. The reason it worked is that the drawing model matched the art style, not because engines are bad.

The game is VYRON, 99c, Universal Purchase across Mac and iPhone:
https://apps.apple.com/us/app/vyron/id6778002261

Happy to go into any part of it in the comments.

u/One-Tea8742 — 3 days ago
▲ 7 r/shmups+1 crossposts

VYRON — 100-level arcade shooter for iPhone/Mac, with a rival that adapts its loadout across encounters (99¢, solo dev)

Built this solo over the last year — wanted feedback from people who actually know the genre rather than a general audience.

100-level campaign, seven bosses that fight in phases (defensive → aggressive → desperate, not just a health-bar reskin), and a recurring enemy — the Nemesis — that studies how you've been playing and comes back with a counter-loadout built for your habits specifically. Ship evolves across 8 tiers as you go, upgrade path is deep rather than a couple of stat sliders.

Controls: touch on iPhone, but full physical controller support on both platforms if that's your preference — didn't want to force touch-only on people who'd rather play it properly.

99¢, one purchase covers both iPhone and Mac (native on each, not a port either way), no ads, no IAP, no accounts.

https://apps.apple.com/us/app/vyron/id6778002261

Genuinely want the read from people who play a lot of these — what's working, what's generic, what's missing.

u/One-Tea8742 — 3 days ago

[DEV] Native Mac arcade space shooter — built Mac-first, not a port. VYRON, 99¢, universal with iPhone.

Native Mac games are rare enough that I wanted to lead with that: VYRON was built on the Mac, for the Mac — AppKit, Metal presentation, mouse or keyboard, proper fullscreen — and then brought to iPhone with a shared codebase. Not a mobile port.

It's an arcade space shooter with real depth: 100 levels, seven multi-phase bosses, bonus rounds, an almost limitless upgrade path across 8 ship evolution tiers, and an enemy that adapts to your playstyle across encounters. Designed for "I have 20 minutes" sessions — encrypted saves, iCloud sync to your iPhone if you have one, Game Center leaderboards.

99¢, no ads, no IAP, no launcher, no account. https://apps.apple.com/us/app/vyron/id6778002261

Would love feedback from Mac players especially — performance reports on different machines welcome.

u/One-Tea8742 — 5 days ago