A game engine built with Vulkan that aims to replicate the feel of PS1-era games. The main goal of this project is to learn graphics programming without the complexity of PBR and other modern techniques, while still building something visually appealing. I'm currently taking a break to work on more modern engine.

VEX is designed to be compiled from source. There are no pre-built binaries or installers. Whether you are on Windows or Linux, setting up the development environment and compiling the engine yourself is the expected workflow. This ensures you have full control over the engine and its tools.
Build-in stylistic features designed to emulate 90s hardware limitations, including affine texture warping, vertex snapping (jitter), CRT emulation, and color quantization.

Full control over these effects is exposed to the user:

The VEX Editor is the primary medium for game creation. While game logic is written in C++, the Editor is where you compose scenes, manage assets, layout UI, and tweak lighting. It is designed to be the starting point for your daily workflow.

Integrated Jolt Physics for stable, performant, and industry-standard physical simulations.

Custom packing system that differentiates between development and deployment. Debug builds use raw asset files for hot-reloading and easy iteration, while release builds pack data for efficiency.

- Custom Input System: Flexible handling supporting multiple input methods and devices.
- Virtual File System: Abstracted file access supporting virtual paths, capable of transparently loading raw files or packed archives.
- Transform Hierarchy: Robust object parenting with a hierarchical transformation system.
- Object/ECS Hybrid: A pragmatic architecture similar to Unreal's Actor system; you create Object C++ classes that hold ECS components.
- Scene System: JSON-based serialization with the ability to load custom user classes (Player, Enemy, Gun) via a registration system.
- UI System: JSON-based UI layout engine.
You must install all the following dependencies for your specific operating system before proceeding.
| Dependency | Recommended Installation | Notes |
|---|---|---|
| Visual Studio Build Tools 2022 | Download Installer | CRITICAL: Run the installer and select the "Desktop development with C++" workload. Ensure Windows 10/11 SDK is checked in the sidebar. |
| Git | Official Installer | Standard installer. Used for version control. |
| CMake | Official Installer | Use the Windows x64 Installer (.msi). Important: Select "Add CMake to the system PATH for all users" during installation. |
| LLVM (Clang) | GitHub Releases | Download the LLVM-xx.x.x-win64.exe Important: Select "Add LLVM to the system PATH" during installation. |
| Ninja Build | GitHub Releases | Download ninja-win.zip. Action Required: Extract ninja.exe to a folder (e.g., C:\Program Files\Ninja\) and manually add that folder to your System PATH. |
| Vulkan SDK | LunarG Website | Must include: • Validation Layers • SlangC |
| ImageMagick | Official Installer | Download the Q16-HDRI-x64-dll.exe. Important: Check "Add application directory to your system path". |
| Tool | Notes |
|---|---|
| cmake | Standard package manager installation. |
| ninja-build | Standard package manager installation. |
| clang | The required C++ compiler. |
| ImageMagick | Standard package manager (sudo apt install imagemagick or equivalent). |
| Vulkan SDK | Standard package manager (ensure validation layers are included). |
| slangc | Extract from Vulkan SDK tarball if not in repo. |
| System Libraries | Additional libraries for Wayland and X11 support are required. |
This step builds the Core Engine library, the ProjectBuilder CLI tool, and the Editor.
- Navigate to the
Enginedirectory in your terminal. - Run the script for your platform:
- Windows:
build-windows.bat - Linux:
./build-linux.sh
- Windows:
Upon completion:
VexEditorandVexProjectSelectorwill be inEngine/Editor/bin.
Note: If you opted-in during the build process, shortcuts will be automatically created on your Desktop and Start Menu.
ProjectBuilderwill be inEngine/BuildTools/build.
The recommended workflow is to use the VexEditor:
- Launch
VexProjectSelector(via the Vex Engine desktop shortcut or directly from thebinfolder) to create a new project or select an existing one. - This will automatically open the VexEditor.
- Inside the Editor, click the Run button (on the right-hand side) to compile and launch your game instantly.
You can use the compiled ProjectBuilder to build your game project manually from the command line.
# Windows (Debug Mode)
.\Engine\BuildTools\build\ProjectBuilder.exe C:\Path\To\MyProject -d
# Linux (Release Mode)
./Engine/BuildTools/build/ProjectBuilder /path/to/MyProject -r| Argument | Description |
|---|---|
<path> |
Absolute path to your project's root directory. |
-d |
Debug mode (for development and hot-reloading). |
-r |
Release mode (optimized). |
-dist |
Distribution mode (stripped binaries without hot reloading). |
- API Documentation: Detailed, doxygen-generated reference for engine modification and development. https://odevu.github.io/VEX/
- Code Samples: Simple, system-by-system examples focused on game creation and engine usage. https://odevu.github.io/VEX/samples/
- Status: Early development. Making a full game is possible but expect API changes.
- Testing: Primarily tested on Linux (AMD GPUs). Windows builds are functional but less rigorously tested.
- Editor: Work in progress, Currently focuses on Scene composition and Asset management.
- Support for animated 3D models
- Vertex colors for models (for AO or better model detail)
- offscreen rendering (to a texture for example, with support for multiple render targets)
- Better shader pipeline (like custom user programamble shaders / custom materials)
All libraries are included as git submodules. Their respective licenses may differ from engine license but all of them are on some sort of opensource license.
