Skip to content

Latest commit

 

History

368 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VEX (Vulkan Early eXperiences)

Vex logo rendered in engine 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 screen_shot_low_res

⚠️ Installation Philosophy

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.


Current Project State:

Retro Graphics Pipeline

Build-in stylistic features designed to emulate 90s hardware limitations, including affine texture warping, vertex snapping (jitter), CRT emulation, and color quantization. ObjectTest release build 03-10-2025

Full control over these effects is exposed to the user: ObjectTest release build 03-10-2025

The Editor: Your Creative Hub

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. StraterProjects/LightingTest

Physics & Simulation

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

Asset & Build System

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. StraterProjects/LightingTest

Engine Systems

  • 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.

Building the Project

Dependencies

You must install all the following dependencies for your specific operating system before proceeding.

Windows Requirements

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".

Linux Requirements

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.

Build Steps

1. Build the Engine & Tools

This step builds the Core Engine library, the ProjectBuilder CLI tool, and the Editor.

  1. Navigate to the Engine directory in your terminal.
  2. Run the script for your platform:
    • Windows: build-windows.bat
    • Linux: ./build-linux.sh

Upon completion:

  • VexEditor and VexProjectSelector will be in Engine/Editor/bin.

Note: If you opted-in during the build process, shortcuts will be automatically created on your Desktop and Start Menu.

  • ProjectBuilder will be in Engine/BuildTools/build.

2. Create & Build Your Game

The recommended workflow is to use the VexEditor:

  1. Launch VexProjectSelector (via the Vex Engine desktop shortcut or directly from the bin folder) to create a new project or select an existing one.
  2. This will automatically open the VexEditor.
  3. Inside the Editor, click the Run button (on the right-hand side) to compile and launch your game instantly.

Alternative: CLI Build

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).

Documentation

Roadmap & Notes

  • 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.

TODO:

Must haves to create games:

  • Support for animated 3D models

Should be implemented but can make games without:

  • Vertex colors for models (for AO or better model detail)

Things that will make me happy but wont help me do games:

  • offscreen rendering (to a texture for example, with support for multiple render targets)
  • Better shader pipeline (like custom user programamble shaders / custom materials)

Libraries used by engine:

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.

Funny meme, really

About

Retro style game engine written in C++ and Vulkan

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages