Game Engine Open Source

Giochi nativi da TypeScript

Scrivi TypeScript. Pubblica giochi nativi. Niente browser, niente C++. Bloom compila il tuo gioco ahead-of-time e lo esegue su Metal, DirectX 12, Vulkan e WebGPU — un'unica codebase, sei target, rendering PBR reale e fisica pronti all'uso.

main.ts
import { initWindow, windowShouldClose,
         beginDrawing, endDrawing,
         clearBackground, drawText,
         Colors } from "bloom";

initWindow(800, 450, "My Game");

while (!windowShouldClose()) {
  beginDrawing();
  clearBackground(Colors.RAYWHITE);
  drawText("Hello, Bloom!",
    190, 200, 20, Colors.DARKGRAY);
  endDrawing();
}
0 Overhead a runtime
6 Piattaforme target
9 Sottosistemi modulari
1 Codebase da mantenere

Perché Bloom?

Bloom è l'unico game engine che ti permette di scrivere TypeScript e distribuire giochi davvero nativi. Niente Electron, niente WebView, niente runtime browser. Il tuo codice viene compilato ahead-of-time dal compilatore Perry e gira su un core in Rust.

API semplice

L'intera API ci sta su un foglio riassuntivo. Niente classi, niente ereditarietà, niente magia. Solo funzioni che chiami.

Davvero nativo

Un solo renderer, quattro backend — Metal, DirectX 12, Vulkan e WebGPU. Materiali PBR, ombre cascaded, TAA e post-FX inclusi.

Pubblica ovunque

macOS, Windows, Linux, iOS, tvOS e Web da un'unica codebase. Pronto per Steam, App Store e itch.io.

Tutto ciò che ti serve

Nove sottosistemi modulari, ciascuno importabile in modo indipendente. Usa solo ciò di cui hai bisogno.

Core

Creazione finestre, game loop, gestione input, timing e controllo dei frame.

bloom/core

Shapes

Disegno di forme 2D — linee, rettangoli, cerchi, poligoni — più rilevamento collisioni.

bloom/shapes

Textures

Caricamento immagini, gestione texture, sprite batching e render-to-texture.

bloom/textures

Text

Caricamento font TTF e OTF, rendering del testo e misurazione.

bloom/text

Audio

Effetti sonori, streaming musicale, audio posizionale 3D, WAV / OGG / MP3.

bloom/audio

Models

Caricamento glTF 2.0, animazione scheletrica su GPU, materiali PBR, primitive mesh.

bloom/models

Math

Vettori, matrici, quaternioni, funzioni di easing e generazione di numeri casuali.

bloom/math

Physics

Corpi rigidi e soft basati su Jolt, character controller, veicoli, raycast, vincoli.

bloom/physics

Scene

Scene graph in retained-mode — trasformazioni, visibilità, ombre, binding dei materiali.

bloom/scene

Una codebase. Ogni piattaforma.

Bloom si mappa sull'API grafica nativa di ciascuna piattaforma tramite un singolo renderer basato su wgpu. Il tuo TypeScript compila in binari reali — o in un bundle WASM per il web.

macOS
Metal
Windows
DirectX 12
Linux
Vulkan
iOS
Metal
tvOS
Metal
Web
WebGPU / WASM

Novità

Bloom è in sviluppo attivo — oltre 300 commit solo nelle ultime settimane. Tra le novità recenti:

Renderer

Auto-DRS e nitidezza CAS

La scala di rendering dinamica si auto-regola sul tuo FPS target, con un passaggio di upscaling più sharpening RCAS per restare nitidi a risoluzioni frazionarie.

Materials

Riflessioni planari + texture array

Riflessioni planari da specchio con clipping obliquo e fallback IBL. Terreno con splat-mapping tramite binding di texture array con mip.

Tools

CLI per il baking degli imposter

Atlanti octahedral per i LOD distanti — pubblica foreste fitte e folle senza sforare il budget di draw call.

Post-FX

Passaggi post stackabili

Tone mapping ACES / AgX, esposizione automatica, bloom, DoF, motion blur, SSGI, SSAO, TAA — composti tramite render target ping-pong.

Platform

HiDPI multipiattaforma

Windows, Linux e Web ora condividono la stessa gestione HiDPI che macOS e iOS avevano già. La tua UI resta nitida su ogni display.

DX

Hot reload degli shader WGSL

Salvi uno shader, vedi il risultato in meno di un secondo. I materiali si ricompilano sul posto durante lo sviluppo.

Pattern familiari, potenza nativa

Interfacce semplici, funzioni pure, zero magia. Se conosci TypeScript, conosci Bloom.

Forme 2D e collisioni

import { drawRect, drawCircle,
         checkCollisionRecs } from "bloom/shapes";

drawRect(100, 100, 200, 80, Colors.GREEN);
drawCircle(400, 300, 50, Colors.GOLD);

if (checkCollisionRecs(player, enemy)) {
  playSound(hitSound);
}

Camera 3D e modelli

const camera: Camera3D = {
  position: { x: 10, y: 10, z: 10 },
  target: { x: 0, y: 0, z: 0 },
  up: { x: 0, y: 1, z: 0 },
  fovy: 45, projection: 0
};

beginMode3D(camera);
drawModel(tree, { x: 0, y: 0, z: 0 });
drawGrid(10, 1);
endMode3D();

Pronto a costruire il tuo gioco?

Bloom è open source e gratuito. Buttati dentro, costruisci qualcosa e pubblicalo ovunque.