A Vulkan game engine with a focus on data oriented design

Overview

Fling Engine Logo

The Fling Engine aims to be a cross platform Vulkan game engine that will experiment with the following:

  • Low-level engine systems such as render API abstraction, file systems, and custom allocators.
  • Multithreaded engine architecture
  • The Vulkan graphics API for real time rendering

Build Status Build status Open Source Helpers GitHub license Work in progress badge Discord Chat

Getting Started

There are a few basic steps to compiling Fling on your platform.

CMake 3.13 or higher!

This project requires CMake 3.13 or higher, you can install it here.

For Linux

This project uses GLFW, so you will need to install those libraries to your machine. GLFW also depends on having Doxygen, so you may want to have that as well.

Ubuntu:

sudo apt-get update
sudo apt-get install doxygen
sudo apt-get install -y libglm-dev libxcb-dri3-0 libxcb-present0
sudo apt-get install -y libpciaccess0 libpng-dev libxcb-keysyms1-dev
sudo apt-get install -y libxcb-dri3-dev libx11-dev libmirclient-dev
sudo apt-get install -y libwayland-dev libxrandr-dev
sudo apt-get install -y libglfw3-dev
sudo apt-get install -y xorg-dev

Vulkan SDK

Obviously this project is build using Vulkan, so you will need to install it before compiling or running the program.

You can download the SDK from the LunarG website here.

If you are having trouble with the Vulkan SDK then check out some of these resources:

Init.bat and Init.sh

After installing the SDK, you can simply run one of the provided scripts.

Running either one of these scripts will simply get all submodules and external libraries that the engine uses and create a folder called build. The build folder will have your platform specific build files (Visual Studio, Makefiles, etc).

Packaging a project

For ease of development and iteration the file paths to Assets (shaders, textures, models, etc) are all absolute paths generated by CMake. If you want to have a copy of your executeable with asset paths relative to the program, then generate your project files with CMake with this flag:

cmake -DDEFINE_SHIPPING=ON -B build .

Notice the -DDEFINE_SHIPPING option is set to ON. This sets a definiton that you can use in C++:

#ifdef FLING_SHIPPING
// Do some nice stuff
#else
// Do non-shipping code, perhaps with a lot of log messages
#endif

Wanna contribute?

If you have any contributions or fixes that you want to contribute, then feel free to open an issue or a pull request! I'm happy to talk about the project, so feel free to reach out to me on Twitter or here on GitHub. Eventually a goal is to have some more specific PR templates/coding standards but for now that is not a priority.

The master branch is where we keep our stable releases only. For the most up to date development see the staging branch

Cool Resources

Some great resources are the Vulkan Tutorial and SaschaWillems's repo with different Vulkan examples

Issues
  • Fatal crash on Ubuntu systems

    Fatal crash on Ubuntu systems

    Fatal crash when running the new Lighting tests on Linux

    1. Build with GCC or Clang on Ubuntu
    2. Run
    3. Notice the black screen that only displays ImGUI, but does not update FPS
    bug PRI 0 Linux 
    opened by BenjaFriend 4
  • Scripting language binding

    Scripting language binding

    Eventually there should be a scripting language bound to the gameplay framework that makes it easier to iterate on games.

    Right now I am leaning towards Python, because I think it would fit well into our object model.

    Another option is Lua, but I don't like how easily lua can break typing or change global variables.

    PRI 3 big feature 
    opened by BenjaFriend 4
  • Deferred Rendering

    Deferred Rendering

    The goal for this project is to use a deferred rendering pipeline. Currently out PBR and MSAA are both using forward rendering. We need to get our G-Buffer set up to use deferred rendering!

    PRI 1 
    opened by BenjaFriend 3
  • Mesh Renderer Component

    Mesh Renderer Component

    With Entt integrated and the ability to load both models and textures, we can now create a MeshRenderer component. The MeshRenderer will be POD

    • Pointer to the Model that it uses
    • Pointer to the Material that should be uses
    enhancement PRI 1 
    opened by BenjaFriend 3
  • Pool Allocator

    Pool Allocator

    We should have a pool allocator for things like the Buffer class and other graphics resources that are gonna stick around throughout the lifetime of the program

    https://blog.molecular-matters.com/2012/09/17/memory-allocation-strategies-a-pool-allocator/

    This will be a really nice feature to provide to people for the Gameplay framework

    A good place for this to go is in the FlingEngine/Utils folder.

    good first issue PRI 2 
    opened by BenjaFriend 3
  • Physically based Deferred Rendering Pipeline

    Physically based Deferred Rendering Pipeline

    We need PBR and deferred rendering in the engine.

    The pipeline should include point, directional, and spot lights.

    See the Acid Engine for an example of this in Vulkan

    enhancement PRI 1 big feature 
    opened by BenjaFriend 3
  • Fork EnTT and use a stable fixed verison of

    Fork EnTT and use a stable fixed verison of

    We need to do this to keep stability over time, because I really don't have a ton of time to work on this engine. EnTT is ever changing (for the better) and being upgraded, and its one of the only submodules we are using that is not in our own fork.

    opened by BenjaFriend 2
  • Clean up Third Party library warnings

    Clean up Third Party library warnings

    In json.hpp and <cereal/archives/json.hpp> there are multiple warnings about unused private fields, unused member functions, etc.

    We should wrap include of these into our own header so that we can disable the warnings for our builds

    enhancement good first issue PRI 2 
    opened by BenjaFriend 2
  • Add example scenes

    Add example scenes

    We should have a set of different example scenes that we can use to build some basic worlds in our engine.

    This should take the form of Level files that the user can load in (there is an example of saving/loading in the SandboxGame.cpp.

    Throughout this process it might be useful to provide some basic editor functionality through ImGui as we see fit (File menu, transform editors, etc)

    enhancement good first issue PRI 2 
    opened by BenjaFriend 2
  • Editor functionality setup with ImGUI

    Editor functionality setup with ImGUI

    We need to provide an extendable layer for editor utilities in the engine. Right now the ImGui setup works but is NOT extendable and only exists in the engine module. This is a known issue and we are working on getting a better solution up and running

    Here is a basic layout of what we need:

    • Pre-processor definition that can be set from CMake such as WITH_EDITOR
    • Editor Class that has a simple draw callback for our ImGUI renderer. Allow this editor class to be set via template when the engine is created just like our Game class

    The base class should provide some easy to call functions such as :

    • FPS Graph
    • File save/open for loading of our level files
    • Component editor (such as this)
    • Material viewing

    If anyone thinks of other useful features then please post them here!

    enhancement good first issue PRI 2 
    opened by BenjaFriend 2
  • Graphics Pipeline Abstraction

    Graphics Pipeline Abstraction

    We should abstract the graphics pipeline so it will be easier to maintain our code down the road. Suggestions for implementation :

    Base class : GetDescriptorSetLayout() GetDescriptorPool() GetPipeline() GetPipelineLayout() GetPipelineBindPoint()

    Child classes : GraphicsPipeline, (maybe) ComputePipeline

    enhancement PRI 3 
    opened by ArturoKuang 2
  • Split up the engine into

    Split up the engine into "Modules"

    We need to separate out each feature of the engine into a modular build target. We should have "Modules" for different parts of the engine to reduce dependencies and make for a scalable compile infrastructure.

    For example, no gameplay code needs to know anything about rendering, so it should be in it's own separate build module and have a separate "_API" export.

    We can accomplish this with CMake I think, but I'm not an expert in CMake by any means to this may be tricky to get to a state where adding new modules is simple and easy. I basically want something conceptually similar to how Unreal handles this with the build.cs files, so that for each module can have it's own set of dependencies.

    We could even go as far as to break certain modules out into their own Submodules, so that active development on something like rendering for example has no effect on development on Gameplay.

    enhancement PRI 1 big feature 
    opened by BenjaFriend 0
  • Clean up comments to be in a better and more modern C++ style

    Clean up comments to be in a better and more modern C++ style

    Right now the codebase uses xml style comments. These are pretty ugly and need to be updated to use a more standard style like this:

    /**
    * A general description of blah blah 
    * 
    * @param Foo bar param
    * /
    
    opened by BenjaFriend 1
  • Make an actual asset database

    Make an actual asset database

    Right now we just read all files in right from disk and read them in with some trivial JSON parsing. We need to create an actual Fling asset type that we can add metadata to, have work with version control, and be loaded in with a database to be displayed in the editor and at runtime.

    This issue is obviously pretty big and needs to be broken up into smaller tasks for tracking

    opened by BenjaFriend 0
  • Docker build test suite

    Docker build test suite

    It would be really nice to have a docker file that can build on Linux with your local changes, so that you can quickly test clang compilation and unit test suites.

    enhancement good first issue 
    opened by BenjaFriend 2
  • Fix skybox Cubemaps

    Fix skybox Cubemaps

    Previously we had skyboxes and cubemaps loading in, but I never got around to adding them in a proper Subpass now that we have the rendering refactor completed.

    See Cubemap.h and Cubemap.cpp for examples on how we loaded them in before.

    I want to change this so that you don't have to pass in so many arguments to the Cubemap class, but need to do some more reading on the best ways to implement this in Vulkan specifically.

    bug enhancement 
    opened by BenjaFriend 0
Releases(Preview.0.3)
Owner
Fling Engine
Fling Engine is an open source Vulkan Game engine with a clean and simple usage of data orient entity component systems.
Fling Engine
Cytopia is a free, open source retro pixel-art city building game with a big focus on mods.

Cytopia is a free, open source retro pixel-art city building game with a big focus on mods. It utilizes a custom isometric rendering engine based on SDL2.

CytopiaTeam 1.5k Jun 27, 2022
A high speed C++17 Vulkan game engine

Acid is an open-source, cross-platform game engine written in modern C++17 and structured to be fast, simple, and extremely modular. Vulkan is the sol

Equilibrium Games 1.3k Jun 22, 2022
Intrinsic is a Vulkan based cross-platform game and rendering engine

Intrinsic is a Vulkan based cross-platform game and rendering engine

Benjamin Wrensch 1k Jun 6, 2022
Design-agnostic node editor for scripting game’s flow in Unreal Engine

Flow plug-in for Unreal Engine provides a graph editor tailored for scripting flow of events in virtual worlds. It's based on a decade of experie

Moth Cocoon 424 Jun 24, 2022
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

null 2.8k Jun 20, 2022
An OpenGL 4.3 / C++ 11 rendering engine oriented towards animation

aer-engine About An OpenGL 4.3 / C++ 11 rendering engine oriented towards animation. Features: Custom animation model format, SKMA, with a Blender exp

Thibault Coppex 26 Jul 25, 2021
CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine

CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine. This engine has been designed with a cross-platform design in mind. Thanks to Vulkan API it delivers a next-gen experience with ray tracing to both Linux and Windows platforms

Jakub Biliński 27 Jun 12, 2022
Ground Engine is an easy to use Game Engine for 3D Game Development written in C++

Ground Engine is an easy to use Game Engine Framework for 3D Game Development written in C++. It's currently under development and its creation will b

 PardCode 51 Jun 10, 2022
A model viewer for Quake 1 and Hexen 2 with a focus on accurate representation.

LunarViewer A model viewer for Quake 1 and Hexen 2 with a focus on accurate representation. Powered by raylib and dear imgui! Features Support for Qua

Luna Ryuko Zaremba 31 May 4, 2022
Godot Engine – Multi-platform 2D and 3D game engine

Godot Engine 2D and 3D cross-platform game engine Godot Engine is a feature-packed, cross-platform game engine to create 2D and 3D games from a unifie

Godot Engine 49.8k Jun 22, 2022
Flax Engine – multi-platform 3D game engine

Flax Engine – multi-platform 3D game engine

Flax Engine 3.4k Jun 20, 2022
MAZE (My AmaZing Engine) - 🎮 Personal open-source cross-platform game engine

MAZE (My AmaZing Engine) is the self-written open-source cross-platform game engine in the active development stage. At the moment it is my main pet project, developed for the purpose of learning and preserving different game dev technologies.

Dmitriy Nosov 11 Jan 9, 2022
Rogy-Engine- - My 3D game engine source code.

Rogy-Engine Development My 3D game engine. (NOT THE FINAL VERSION- Windows only) Features: PBR shading and reflection probes with parallax correction.

AlaX 92 Jun 18, 2022
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

null 2.7k Jun 19, 2022
Hyperion Engine is a 3D game engine written in C++

Hyperion Engine About Hyperion Engine is a 3D game engine written in C++. We aim to make Hyperion be easy to understand and use, while still enabling

null 130 Jun 28, 2022
Minetest is an open source voxel game engine with easy modding and game creation

Minetest is an open source voxel game engine with easy modding and game creation

Minetest 7.2k Jun 22, 2022
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 74 May 8, 2022
Game Boy, Game Boy Color, and Game Boy Advanced Emulator

SkyEmu SkyEmu is low level cycle accurate GameBoy, GameBoy Color and Game Boy Advance emulator that I have been developing in my spare time. Its prima

Sky 60 Jun 19, 2022
A Minecraft-clone written in C++/Vulkan

Minecraft A Minecraft-clone written in C++/Vulkan Current state It is currently very bare-bones. Planned features Textures Procedural generation Colli

null 4 Feb 27, 2022