A game engine made as part of the Kohi Game Engine series on YouTube (and Twitch!), where we make a game engine from the ground up using C and Vulkan.

kohiengine.com

Topics
#game #windows #macos #linux #gamedev #game-engine #engine #vulkan #game-development #kohi #c #c11

Travis Vroman ed2a707228 WIP tuning Vulkan performance 2 luni în urmă
.github b2b1239581 Create task.md 2 ani în urmă
.vscode 1489c24fcf Removed illumina build references 11 luni în urmă
images 6f9990cbe0 WIP Asset System 1 an în urmă
kohi.core 56732d143a Various input fixes. Added event codes for animations, and fire anim complete on non-looping animations 2 luni în urmă
kohi.core.tests b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
kohi.plugin.audio.openal b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
kohi.plugin.renderer.vulkan ed2a707228 WIP tuning Vulkan performance 2 luni în urmă
kohi.plugin.ui.standard a3b39196fa Performance optimizations 2 luni în urmă
kohi.plugin.utils a66d2e6904 Various bugfixes 2 luni în urmă
kohi.runtime 56732d143a Various input fixes. Added event codes for animations, and fire anim complete on non-looping animations 2 luni în urmă
kohi.tools 01825119bc Minor bugfixes 2 luni în urmă
kohi.tools.versiongen b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
overdrive2069.kapp b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
overdrive2069.klib b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
testbed.kapp 01825119bc Minor bugfixes 2 luni în urmă
testbed.klib b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
.clang-format b8b1b2be6c Codebase formatting run (spaces->tabs) 2 luni în urmă
.clangd 409af507c6 Grids and boxes (#157) 2 ani în urmă
.gitignore a8b464e9f9 WIP audio redux, still needs some troubleshooting but works now (kinda). 1 an în urmă
.gitmodules ad44f6527f WIP animation system, added assimp submodule for imports 4 luni în urmă
ATTRIBUTION.md 3ee3ecddd3 WIP kname 1 an în urmă
CHANGELOG 71a3d29b24 Added knames to printf types, code cleanup 2 luni în urmă
CREDIT.md 2fd7dcff36 texture->kresource_texture mostly complete. Needs cleanup pass 1 an în urmă
Doxyfile 873e3a9ccf Standard UI (#203) 2 ani în urmă
LICENSE 6146ccc940 Initial commit 5 ani în urmă
Makefile.executable.mak d01908b52f Reworked audio system to match the renderer's frontend/backend architecture. Audio emitters reworked and added to scenes. Build system fixes. 1 an în urmă
Makefile.library.mak 6d549da1d1 Disable error preventing stb_vorbis.c to build. 8 luni în urmă
TODO.md a66d2e6904 Various bugfixes 2 luni în urmă
build-all.bat 1bee5842c2 Initial game commit (will move later). Also a few small bugfixes 1 an în urmă
build-all.sh 1489c24fcf Removed illumina build references 11 luni în urmă
build-debug.bat 9f932130ab Updated Windows build processes 2 ani în urmă
build-debug.sh 8cf14746f6 Feature/raycast (#160) 2 ani în urmă
build-release.bat 9f932130ab Updated Windows build processes 2 ani în urmă
build-release.sh 8cf14746f6 Feature/raycast (#160) 2 ani în urmă
build_testbed_lib.bat ac2fbb713b V0.7.0 (#231) 1 an în urmă
build_testbed_lib.sh ac2fbb713b V0.7.0 (#231) 1 an în urmă
clean.bat 9f932130ab Updated Windows build processes 2 ani în urmă
clean.sh 8cf14746f6 Feature/raycast (#160) 2 ani în urmă
doxygen-style.css 873e3a9ccf Standard UI (#203) 2 ani în urmă
k3d_format.html ffa85d71a6 K3D model format, importer and loader code complete. Still need to hook into engine for rendering 3 luni în urmă
kohi retrospective notes.md ff01ded9d5 WIP image/texture asset/resource refactor 9 luni în urmă
readme.md 3d57a26817 Win32 key repeat fixes. Also fixed win32 build. Various pipeline barrier optimizations 2 luni în urmă

readme.md

Kohi Game Engine

Kohi Logo

This engine is made as part of the Kohi Game Engine series on YouTube (now live-streamed on Twitch), where we make a game engine from the ground up using C and Vulkan.

The name Kohi (コーヒー, pronounced "koh-hee") is a simplification of the Japanese word for "coffee", which makes sense given how much I love the stuff.

The original YouTube series is located here: https://www.youtube.com/watch?v=dHPuU-DJoBM&list=PLv8Ddw9K0JPg1BEO-RS-0MYs423cvLVtj.

The Twitch stream happens here: https://twitch.tv/travisvroman.

Screenshot of Kohi Screenshot of Kohi

Important Links

Socials

Twitch YouTube Patreon Twitter

Project Links

Goal

IMPORTANT: This engine is not, and will not be for quite a while, production-ready. It is a learning tool and as such is not yet optimized for use in production-quality products. This will eventually change, but for now it is not production-ready.

The goal here is simple, to provide a resource that I wish I had when learning game development; a complete guide on building a game engine from scratch, including not only design decisions, but why those decisions were made. It should also be noted that, while this is a way of building a game engine, it is not the only way to build one and sometimes not even the correct way to build one. There is a lot of trial-and-error along the way, complete with deep dives. Sometimes we do things the wrong way to illustrate why it's the wrong way before then fixing it. Sometimes things work, sometimes they don't. The idea is to try things and explore along the way.

Kohi has been a 3D engine from the start, with most of it built from scratch.

The series starts off as more of a tutorial to get up and running, with explanations becoming higher level as things progress to keep the pacing up. We eventually transition to live-streaming (simulcast on Twitch and YouTube), with most coding being done on stream with some offline work that is less interesting being done offline.

Ultimately, there is also the goal of having a game engine capable of making games. Once the project is far enough along, making a game will be done as a series on my Twitch/YouTube channels as well.

Platform support

Windows, Linux and macOS are all officially supported. Other platforms such as Android and iOS runtime support may also be added down the road.

Prerequisites

While the highest effort is made to reduce dependencies, each platform has things that must be installed for this to work.

Prerequisites for Windows

NOTE: This project does not work under WSL, nor will it in the forseeable future. Don't bother trying it. Even if you do get it working, it won't be supported.

  • Make for Windows: winget install exwinports.make OR https://gnuwin32.sourceforge.net/packages/make.htm (Yes, the last update was in 2006. But if ain't broke, why fix it?)
  • Visual Studio Build Tools: winget install Microsoft.VisualStudio.2022.BuildTools
  • Git for Windows: winget install git.git OR https://gitforwindows.org/
  • Vulkan SDK: winget install khronosgroup.vulkansdk OR download from https://vulkan.lunarg.com/
  • Assimp: Go here to get an installer: https://www.assimp.org/, then downloads. Yes it takes you to an itch.io page, but it's legit.
    • After the installer runs, reboot, then add the install dir to PATH (probably C:\Program Files\Assimp)

Prerequisites for Linux

Install these via package manager:

  • sudo apt install llvm or sudo pacman -S llvm
  • sudo apt install git or sudo pacman -S git
  • sudo apt install make
  • Assimp (for tooling/model imports): sudo apt install assimp or sudo pacman -S assimp

Required for X11:

  • sudo apt install libx11-dev
  • sudo apt install libxkbcommon-x11-dev
  • sudo apt install libx11-xcb-dev

NOTE: Wayland not natively supported (yet)

Prerequisites for macOS

  • XCode command line tools: xcode-select --install. This should install the latest XCode and command-line tools (most importantly clang). At the time of install, this installs Apple Clang 15.0.0.

Install these via homebrew (brew) or other package manager:

  • Git: brew install git
  • Make: brew install make
  • Assimp (for tooling/model imports): brew install assimp

The Vulkan SDK

  • Vulkan SDK: download from https://vulkan.lunarg.com/
    • NOTE: Ensure the 'global install' option is selected, which places a copy of the files in /usr/local/lib.

NOTE: If you want a newer version of clang, you can also do brew install llvm and point to it when compiling.

NOTE: On newer macOS environments, /usr/local/lib isn't automaticaly searched for when resolving dependencies. A quick fix for now is to symlink any missing libraries in the bin folder so they resolve. This will be fixed in a future version of the engine. To do this, simply run the following:

For vulkan: ln -s /usr/local/lib/vulkan.1.dylib vulkan.1.dylib

For shaderc: ln -s /usr/local/lib/libshaderc_shared.1.dylib libshaderc_shared.1.dylib

Only do this when and where needed.

Cross-Platform Prerequisites:

Audio Plugin Prerequisites

The audio plugin requires an installatiion of OpenAL.

  • Linux: use a package manager to install OpenAL, if not already installed (i.e. sudo apt install openal for Ubuntu or sudo pacman -S openal on Arch)
  • macOS: install openal-soft via homebrew: brew install openal-soft. Note on M1 macs this installs to /opt/homebrew/opt/openal-soft/, where the include, lib, and 'bin directories can be found. The build-all.sh script accounts for this version of the install.
  • Windows: winget install OpenAL.OpenAL OR Install the SDK from here: https://www.openal.org/downloads/

Start

To get started, get all of the prerequisites for your current platform (see above). NOTE: Kohi's tools (i.e. importers) now requires Assimp. The runtime does not require this, however. In the future the tools will likely be split into a separate repo to avoid this dependency in the main repo. After this, clone the repository recursively: git clone --recurse-submodules https://github.com/travisvroman/kohi.

Note that you are free to use other compilers (such as gcc), but they are not officially supported at this time (although it shouldn't be much work to get them setup).

See the setup videos in the series for Windows or Linux for details. macOS setup happens significantly later in the series at video 76, when support is officially added for that platform.

Building

There are 2 build types available, Debug and Release. Debug includes debug symbols and is optimal for development and exploration, while Release is ideal for performance. There is also a "clean" available to clean out the built files, which is useful when switching between Debug/Release, or when strange linking errors occur because of missing files (i.e. switching branches).

Building: Windows

Open up a command prompt or Powershell instance and run the build-debug.bat file for a debug build, or build-release.bat for a release build. There is also a clean.bat available.

Building: Linux/macOS

Open up a terminal and run the build-debug.sh file for a debug build, or build-release.sh for a release build. There is also a clean.sh available.

Running

At the moment, "Testbed" is the executable that uses Kohi. It should be run with the working directory of /bin. In command prompt/Powershell in Windows, or a terminal in Linux/macOS, cd bin to get into the bin folder, then run testbed.exe on Windows or just testbed for Linux/macOS.

Project Structure

This structure breakdown is based on the root folder of the repository. Some files/folders are omitted from this description as they aren't important to the overall picture.

  • kohi.core - Shared library/.dll. Contains types, containers, string lib, math lib, utils, etc. as well as the platform layer (Win32, Linux, macOS).
  • kohi.core.tests - A small collection of unit tests for the core library. Needs to be expanded.
  • kohi.runtime - Shared library/.dll. Contains the core engine logic as well as many of the core engine systems.
  • kohi.plugin.audio.openal - Shared library/.dll. Contains the audio plugin which uses OpenAL as the audio backend.
  • kohi.plugin.renderer.vulkan - Shared library/.dll. Contains the Vulkan renderer plugin, which serves as the renderer backend to the engine for Vulkan.
  • kohi.plugin.ui.standard - Shared library/.dll. Contains the Kohi Standard UI, which contains a general-use collection of controls such as buttons, labels, textboxes, etc. This is a retained-mode UI.
  • testbed.kapp - Application/.exe. The consuming application executable, loads up testbed.klib, configures/uses plugins and other Kohi libraries.
  • testbed.klib = Shared library/.dll. Contains the application code (or "game code") specific to the application. Hot-reloadable.
  • kohi.tools.versiongen - Application/.exe. A small utility which generates a version using passed-in major and minor version numbers, and auto-generated build and revision numbers based on date and time. Used to version builds of Kohi and plugins.
  • kohi.tools - A collection of command-line tools. Mostly empty at the moment, but will be expended when editor development begins.
  • .vscode A folder containing VS Code-specific project setup.

Roadmap

See here.

Contributions

As the project progresses, community contributions are welcome via Pull Requests on GitHub.

Features should be contributed via a branch name in the format of feature/<feature name> where <feature name> is replaced with either the name of a feature or, ideally, the number of a reported feature issue (ex: feature/80 or feature/terrain).

Bug fixes must be contributed via a branch name in the format of bugfix/<issue#> where <issue#> is replaced with the number of a reported feature issue (ex: bugfix/80). Bug fixes therefore must have an associated issue created on GitHub.

Code should match the general style of the code in the repo. A code style guide will be published here at some point in the near future.

All contributions are subject to review and may or may not be accepted, or have change requests made before being accepted.

Support Me

I am developing Kohi in my spare time. I don't have any sponsors at the moment. If you like my work, please feel free to support me in these places:

I would also greatly appreciate follows/subscriptions on YouTube and Twitch. Please spread the word!

Your support is greatly appreciated and will be re-invested back into the project.