Dependencies¶
Snowpulse relies on third-party libraries bundled under snowpulse/external,
native platform frameworks, and pinned Android Maven/Prefab artifacts. Desktop
vcpkg setup does not replace Snowpulse's vendored GLFW, curl, Assimp, Box2D,
Effekseer, Spine, zlib, zstd, or default OpenAL Soft builds; it remains useful for
toolchain/bootstrap compatibility and the checked-in manifests.
What Game Developers Configure¶
A generated game already points CMake at Snowpulse and its bundled native
dependencies. You normally do not install or wire these libraries one by
one. Start with the settings block near the top of your game's
CMakeLists.txt, where you can enable optional engine features and choose the
target's web mode:
set(GAME_ENABLE_ASSIMP OFF)
set(GAME_SPINE_VERSION "4.2")
set(GAME_WEB_MODE "GAME")
set(GAME_WEB_PLATFORM "SNOWBLINK_PLAIN")
Use the inventory below when a platform build needs troubleshooting or when you deliberately want to change an engine-wide option. The complete public option table is under Top-Level and Engine Options.
Runtime Libraries¶
- GLFW 3.4 (windowing/input on desktop and web; not used on iOS or Android)
- OpenGL (desktop renderer)
- OpenGL ES 3.0 (iOS renderer; uses Apple's
<OpenGLES/ES3/gl.h>directly) - UIKit + CAEAGLLayer + CADisplayLink (iOS windowing/lifecycle)
- AndroidX GameActivity 4.4.2 + EGL + Frame Pacing 2.1.3 (Android host/presentation)
- OpenAL / OpenAL Soft (audio on desktop, iOS, and Android; vendored on mobile)
- Oboe 1.10.0 Prefab backend (Android OpenAL output)
- libcurl (Schannel/SSPI on Windows, OpenSSL with Apple SecTrust on macOS; the current iOS build remains HTTP-only)
- OkHttp 5.4.0 (Android HTTPS through the system trust store)
- CoreMIDI (MIDI on macOS desktop)
- AVFoundation/CoreMedia/CoreVideo/AudioToolbox (macOS MP4 recording/playback and iOS playback)
- Media3 1.10.1 ExoPlayer (Android MP4 playback)
- ScreenCaptureKit (weak-linked process-audio capture for the macOS 13+ recorder)
- Emscripten (web build toolchain and browser APIs)
- Box2D 3.1.1 (optional 2D physics, vendored under
snowpulse/external/box2d-3.1.1) - GameAnalytics 5.3.1 desktop C++, 5.0.2 iOS, 7.0.2 Android, and 5.0.0 web
- ByteBrew 1.0.1 web; redistribution-approved Android/iOS packages when supplied
OpenAL Toggle¶
Snowpulse can prefer vendored OpenAL Soft on desktop builds:
- CMake option:
SNOWPULSE_ENABLE_VENDORED_OPENAL(defaultON) - Vendored location:
snowpulse/external/openal-soft - Fallback behavior: if vendored OpenAL is missing, CMake warns and falls back to system
find_package(OpenAL)
Box2D Toggle¶
Snowpulse can optionally link against the vendored Box2D target.
- CMake option:
SNOWPULSE_ENABLE_BOX2D(defaultON) - Engine compile definition:
SNOWPULSE_HAS_BOX2D(1when linked,0when unavailable/disabled)
This step only wires dependency/build integration. Gameplay-level physics APIs and components are documented in Physics.
Utility Libraries¶
- ImGui 1.92.5 (debug UI)
- Inter 4.1 static 18pt Regular (pinned under
snowpulse/external/inter-4.1and embedded as ImGui's default UI font; SIL Open Font License 1.1 inOFL.txt, staged with desktop, full-web, iOS, and Android distributions) - GLM (math)
- GLAD (OpenGL loader on desktop and web; not used by iOS or Android GLES)
- stb (image/audio helpers)
- dr_mp3 (MP3 decoding)
- nlohmann/json (JSON parsing)
- msdf-atlas-gen (font atlas generation pipeline)
- Spine runtimes (C/C++ skeletal animation)
- Assimp (optional FBX/model loading)
- Effekseer 1.80.3 (optional effect playback in the full profile)
- zstd 1.5.7 (vendored decompressor-only static library for Tiled layer data;
exposed internally as
ZSTD::zstdwithSNOWPULSE_TILED_HAS_ZSTD=1)
Snowpulse does not currently vendor a cross-platform MP4/H.264 encoder such as FFmpeg, libavcodec, x264, or OpenH264. Desktop MP4 recording is implemented for macOS through AVFoundation; Windows needs a future Media Foundation or vendored encoder backend.
Top-Level and Engine Options¶
All user-facing SNOWPULSE_* cache settings and pinned dependency versions are
declared in snowpulse/cmake/SnowpulseOptions.cmake. The top-level engine
CMakeLists.txt is an orchestrator; dependency, platform, target-variant, web,
and iOS behavior live in neighboring focused modules.
| CMake setting | Default | Effect |
|---|---|---|
SNOWPULSE_BUILD_TESTS |
ON |
Builds and registers host-side Snowpulse tests on desktop |
SNOWPULSE_BUILD_SNOWGEARS |
ON |
Adds the Snowgears gameplay layer |
SNOWPULSE_ENABLE_BOX2D |
ON |
Enables vendored Box2D and publishes SNOWPULSE_HAS_BOX2D when available |
SNOWPULSE_DEFAULT_ENABLE_ASSIMP |
OFF |
Default Assimp/FBX selection when a target omits ASSIMP; per-target settings override it |
SNOWPULSE_ENABLE_VENDORED_OPENAL |
ON |
Prefers vendored OpenAL Soft on desktop; falls back to system OpenAL when absent |
SNOWPULSE_ENABLE_VENDORED_ZLIB |
ON |
Uses the zlib source bundled with Assimp; missing sources are a configure error |
SNOWPULSE_ENABLE_MP4_VIDEO |
ON |
Builds MP4 playback when the selected build profile also has video; publishes SNOWPULSE_ENABLE_MP4_VIDEO as 0 or 1 |
SNOWPULSE_PRODUCTION_DEPENDENCIES |
OFF |
Rejects host/fallback dependencies and enables the strict desktop package contract |
SNOWPULSE_MSVC_STATIC_RUNTIME |
ON |
Uses /MT (or /MTd) so Windows games do not require the Visual C++ Redistributable |
SNOWPULSE_DESKTOP_RELEASE_SYMBOLS |
ON |
Retains Release debug information for PDB/.dSYM archives |
SNOWPULSE_ALLOW_SYSTEM_OPENSSL |
ON |
Allows a warned host OpenSSL fallback for non-production macOS development only |
SNOWPULSE_OPENSSL_ROOT |
empty | Explicit static OpenSSL prefix; production macOS packaging requires pinned 3.5.8 universal archives |
SNOWPULSE_DEFAULT_SPINE_RUNTIME_VERSION |
4.2 |
Default Spine version when a target omits SPINE_VERSION; per-target settings override it |
Effekseer does not have a separate user option. It is enabled when the vendored
runtime is present and the build profile has Effekseer; consumers should guard
its public API with SNOWPULSE_HAS_EFFEKSEER.
Android Dependency Policy¶
Android compiles vendored OpenAL Soft, Assimp, Box2D, Spine, Effekseer, stb,
GLM, JSON, zlib, zstd, and audio decoders as static PIC libraries and links them into
the game's shared object. It does not use vcpkg or libcurl. GameActivity, Frame
Pacing, Oboe, Media3, OkHttp, and GameAnalytics come from pinned Maven/Prefab
artifacts. Those
official native artifacts use c++_shared, so the package contains exactly one
matching libc++_shared.so; GameActivity and Swappy use static Prefab variants,
while Oboe 1.10.0 is published as liboboe.so. The generated Gradle project
allows Google Maven, Maven Central, and GameAnalytics's pinned release
repository, rejects dynamic versions, and
commits verification checksums. See Android.
Web Profile and Packaging Options¶
| CMake setting | Default | Effect |
|---|---|---|
SNOWPULSE_WEB_BUILD_PROFILE |
FULL |
Selects FULL or the Emscripten-only PLAYABLE_AD feature profile |
SNOWPULSE_WEB_THREADS |
OFF |
Adds the shared pthread compile/link requirements to engine and consumer targets |
SNOWPULSE_WEB_UTF8_BINARY_ENCODING |
OFF |
Experimental UTF-8 Wasm embedding for single-file playables; base64 remains the production default |
SNOWPULSE_WEB_LAZY_ASSET_LOADING |
OFF |
Enables boot/deferred asset packs when assets/asset-packs.json exists |
SNOWPULSE_PLAYABLE_SIZE_BUDGET_BYTES |
2000000 |
Non-blocking raw HTML size target reported by the playable packaging helper |
The profile publishes numeric SNOWPULSE_HAS_HTTP, SNOWPULSE_HAS_MIDI,
SNOWPULSE_HAS_VIDEO, SNOWPULSE_HAS_SAVES, SNOWPULSE_HAS_IMGUI,
SNOWPULSE_HAS_EFFEKSEER, SNOWPULSE_HAS_NON_GOOGLE_WEB_PORTALS, and
SNOWPULSE_HAS_ANALYTICS_SDKS, and SNOWPULSE_WEB_DIRECT_GL definitions.
FULL sets all feature definitions to
1 and direct GL to 0; PLAYABLE_AD does the reverse. Google Ads/MRAID is
retained by the playable profile.
Packaging and hosting are selected per target and are not inferred from the engine feature profile:
WEB_MODE GAMEproduces normal multi-file HTML and external deferred packs.WEB_MODE PLAYABLE_ADproduces standalone single-file HTML, embeds normal assets, injects deferred packs, and reports raw size.WEB_PLATFORMselects the matched shell and runtime portal adapter from the registry.snowpulse_configure_web_target()is the advanced entry point for non-game/custom target setup.
See Platforms for the full profile and portal compatibility matrices.
Assimp and Spine Target Settings¶
Each game selects Assimp and a vendored Spine runtime in its declarative
snowpulse_add_game() call. Snowpulse declares the available Assimp × Spine
target matrix inside the engine directory, then links the selected variant.
Non-game targets use:
SPINE_VERSION accepts each runtime directory available under
snowpulse/external/spine (currently 4.2 and 4.3). Assimp is unavailable
on platforms where its dependency target cannot be built. All engine-header
consumers inherit C++17, feature definitions, and include paths through
snowpulse::build_config; do not copy versioned dependency paths into consumer
targets.
Example desktop configure:
See Desktop Production Builds for deterministic curl TLS, Windows static-runtime ZIPs, macOS universal bundles, signing, notarization, and dependency verification.
Example web configure:
emcmake cmake -S . -B cmake-build-release-emscripten \
-DCMAKE_BUILD_TYPE=Release \
-DSNOWPULSE_ENABLE_BOX2D=ON
Example mixed-version targets in a project CMake file:
snowpulse_add_game(sample_current
SOURCES ${SAMPLE_CURRENT_SOURCES}
DISPLAY_NAME "Current Sample"
BUNDLE_ID "com.example.samplecurrent"
ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets"
ASSIMP OFF
SPINE_VERSION "4.3"
WEB_MODE GAME
WEB_PLATFORM SNOWBLINK_PLAIN
)
snowpulse_add_game(sample_legacy
SOURCES ${SAMPLE_LEGACY_SOURCES}
DISPLAY_NAME "Legacy Sample"
BUNDLE_ID "com.example.samplelegacy"
ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets"
ASSIMP OFF
SPINE_VERSION "4.2"
WEB_MODE GAME
WEB_PLATFORM SNOWBLINK_PLAIN
)
Sample Usage¶
// Add an ImGui panel
if (auto* imgui = context()->imgui()) {
imgui->addPanel("Stats", []() {
// ImGui::Text("Hello");
});
}