We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Run your favorite games everywhere with WASM: the BlazorDoom use case by Yassine Benabbas
Learn how to port C# games to browsers using WebAssembly through a hands-on Doom engine example. Explore technical challenges, interop patterns, and modern web standards.
-
WebAssembly enables porting existing games to run directly in web browsers while maintaining good performance (60 FPS possible)
-
The Doom engine was successfully ported from C# to WebAssembly with minimal code changes, as 70% of the code was immediately compatible
-
Game porting can be done through either complete reimplementation or adapting existing source code for the target platform
-
Key technical challenges included:
- Converting the game’s color palette system to RGB values for browser canvas
- Implementing proper audio playback using Web Audio API
- Replacing native platform loops with requestAnimationFrame
- Handling interop between C# and JavaScript
-
WebAssembly and JavaScript need to work together since not all browser APIs are directly available to WASM code
-
The game loop pattern needs adaptation when porting to browser:
- Replace infinite loops with recursive requestAnimationFrame calls
- Handle frame pacing appropriately
- Manage state updates between WASM and JavaScript
-
Modern web standards like Canvas API and Audio Context make it possible to implement complex game features
-
.NET 7+ provides improved JavaScript interop capabilities when targeting WebAssembly
-
Game porting is an effective way to learn programming concepts while working with familiar content
-
WAD file support allows running different Doom game content without changing the engine code