![]() |
CRM64Pro GDK v0.14.0
A free cross-platform game development kit built on top of SDL 3.0
|
CRM64Pro is a modern, lightweight and hardware-accelerated C++17 Game Development Kit built on top of SDL3. It provides a clean, modular architecture for creating 2D games, tools, and interactive applications, combining low-level control with high performance and cross-platform support.
CRM64Pro is distributed under the zlib license.
Modern core Developed in C++17 and powered by SDL3, featuring multi-threading, advanced logging utilities, proprietary CDC asset compression, and the EditorC64 tool suite. |
Complete toolset Includes a versatile Tile Engine (MSTE) with native Tiled map support, a full GUI windowing system, and a robust Sprite engine with planned Spine2D integration. |
Hardware accelerated Supports Direct3D 11/12, Vulkan, Metal, and OpenGL, ensuring fast and smooth rendering across all supported platforms. |
| Developed by MegaStorm Systems. Visit the official website for updates, releases, and complete documentation. | |
The GDK runs on major operating systems. Thanks to SDL3, it supports a wide variety of hardware accelerated rendering and low-latency audio drivers.
| Platform | Requirements | Render drivers | Audio drivers |
|---|---|---|---|
| Windows 7, 10 and 11 (64-bit only) | Direct3D 9 Direct3D 11 Direct3D 12 Vulkan GPU OpenGL Software | WASAPI DirectSound | |
| Kernel 4.18+ (64-bit only) | Vulkan GPU OpenGL X11 Wayland Software | PulseAudio ALSA | |
| Android 5.0+ (API 21+) | OpenGL ES Vulkan | AAudio OpenSL ES | |
| macOS 10.13+ (High Sierra or later for x86_64) macOS 11+ (Big Sur or later for arm64) | Metal Vulkan GPU OpenGL Software) | CoreAudio |
This section describes how to install and configure the CRM64Pro GDK for development on the supported platforms.
Windows DevelopmentExecutable Installer (Inno Setup) |
1. Download and Install CRM64Pro is distributed as a standard Windows installer created with Inno Setup (for example: CRM64Pro-X.Y.Z-win-x64.exe).
The installer will deploy headers, libraries and the EditorC64 into the selected destination.
The following libraries are provided:
CRM64Pro.lib – Dynamic linking (DLL import library) CRM64Pro.static.lib – Static linking (Release) CRM64Pro.static-debug.lib – Static linking with debug information 2. Configure Visual Studio No global system variables are required. Configure your project locally:
include/ directory to C/C++ → General → Additional Include Directories. lib/ directory to Linker → General → Additional Library Directories. CRM64Pro.lib (Dynamic linking) CRM64Pro.static.lib or CRM64Pro.static-debug.lib (Static linking) 3. Runtime (DLL) When using dynamic linking, ensure that CRM64Pro.dll is located next to your executable or available in the system PATH (the installer allows to update this automatically).
Linux DevelopmentSelf-Extracting Bash Installer |
1. Download and Install CRM64Pro for Linux is distributed as a self-extracting Bash installer (for example: CRM64Pro-X.Y.Z-linux-x64.sh).
Run the installer from a terminal:
The installer places headers and libraries in standard system locations (e.g. /usr/local/include and /usr/local/lib).
2. Compiling Once installed, CRM64Pro can be linked using standard compiler flags:
macOS DevelopmentDMG Package (Universal Binary) |
1. Download and Install CRM64Pro is distributed as a DMG package. The installer provides a universal library supporting both x86_64 and arm64 (Apple Silicon) architectures.
Headers and libraries are installed into standard locations (e.g. /usr/local or /Library).
2. Compiling You can compile from the terminal or configure Xcode normally:
Ready to write code? Jump straight into development with the practical examples.
| First time using the GDK? Follow the step-by-step guides to create your first window, render sprites, play audio files, etc. | View Tutorials >> |
CRM64Pro abstracts the complexity of modern game loops into a flexible "Governor" pattern (Main::update). This allows developers to choose the synchronization strategy that best fits their game genre, from simple variable time-step loops to high-precision interpolated fixed-step systems.
Default Threading Model
While the engine is thread-safe, specific subsystems have architectural constraints or automatic behaviors:
| Subsystem | Execution Context | Description |
|---|---|---|
| Audio | Dedicated Thread | Managed entirely by SDL3. Audio mixing occurs in parallel to the game loop. |
| Network | Background Threads | Sockets run asynchronously. Packets are queued and processed when the main thread requests them. |
| Graphics | Main Thread | Due to underlying GPU API constraints (Direct3D/OpenGL), rendering commands must be issued from the main thread. |
| Logic | Flexible | Can run coupled on the main thread or decoupled via the Timer system. |
Game loop methodsFrom basic to professional approaches |
This is the classic "render-as-fast-as-possible" loop. Logic and Graphics updates occur sequentially in the same iteration. The "Main loop" will run at the maximum speed provided by the CPU.
Performance Note:
You can use CRM64Pro::ConfigMgr::iMTFriendly to specify a minimum wait time (milliseconds) per frame. This yields execution control back to the operating system to prevent eating 100% CPU doing unnecessary work.
Warning: Do not try to use this parameter for "time control" (e.g., setting it to 10ms to get 100fps). OS scheduling is not guaranteed; some iterations could take 10ms and others more, breaking the "smoothness" of the loop.
In this mode, the Logic runs at a guaranteed deterministic rate (e.g., 20 Hz), while Rendering runs at the monitor's refresh rate (e.g., 144 Hz or VSync).
Performance Note:
In this mode, the graphics logic runs without limit (max CPU/GPU speed). On fast systems, CRM64Pro::ConfigMgr::iMTFriendly can still be used to yield execution back to the OS and avoid 100% CPU usage on unnecessary rendering frames.
This is the gold standard for action games. Logic runs at a fixed, low frequency (e.g., 20 or 30 Hz) for stability, but the Engine renders at maximum framerate by interpolating positions between the previous and current logic states.
Performance Note:
Using the callback function will produce a very smooth graphics output. This callback function can be changed dynamically or disabled using nullptr.
On fast systems, CRM64Pro::ConfigMgr::iMTFriendly can still be used to avoid eating the whole CPU doing plenty of unnecessary graphics rendering.
Configuration systemBuilt-in launcher and customization |
CRM64Pro includes a built-in "Launcher" window (CRM64Pro::ConfigMgr::setup). This allows end-users to configure hardware settings (Resolution, Monitor, Audio Driver) before the engine initializes the full graphical context.
Key Features:
Workflow
Customization via XML
The launcher layout is data-driven. You can provide a custom XML file (e.g., setup.xml) to override the default look. This allows you to:
In the example above, the window title was changed to "Validation Setup", the 5th resolution option was hidden, and the logo was replaced.
The internal Master XML defines the structure. You can not modify the element names, but you can override their attributes in your custom XML.
Attribute Reference
| Attribute | Description |
|---|---|
| state | 0 (Disabled/Shown), 1 (Enabled/Visible) or 5 (Disabled/Hidden). |
| name | The C64 Sprite resource name (e.g., for logo). |
| x, y | Widget position. Supports CRM64Pro::ePositionHelpers. |
| value | The default value for the widget (Checkbox/Slider). |
| text | The label text displayed to the user. |
| action | Used for specific widgets to open a file or URL. |
Log of all notable changes made to CRM64Pro GDK including the date, version, and brief description:
View the Complete Changelog.