Skip to content

ajweeks/FlexEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fe7d4b1 · Aug 29, 2023
Oct 11, 2022
Apr 24, 2023
Jul 8, 2023
Feb 17, 2023
Apr 19, 2021
Jul 1, 2021
Jul 24, 2021
May 17, 2021
Feb 20, 2021
Nov 24, 2022
Mar 6, 2022
Aug 29, 2023

Repository files navigation

linux MIT licensed

Flex Engine is a personal game engine I began work on in early 2017. I use it as a playground for learning about real-time rendering and simulation techniques. Flex Engine is not a commercial game engine nor is it intended for public use.

Building Flex

See build.md

Notable Features

  • Vulkan rendering backend (VulkanRenderer.cpp)
  • In-game scripting language compiler/editor & virtual machine (VirtualMachine.cpp)
  • Conditional checksum-based shader recompilation (ShaderCompiler.cpp)
  • File modification monitoring for textures, meshes, prefabs, shaders, config files, etc. (ResourceManager.cpp)
  • Scene editor with serialization (BaseScene.cpp)
  • Editor tools (transform gizmo, property editor, keybinding editor, etc.) (Editor.cpp)
  • Basic profiling capture/inspection tools
  • Support for Windows & linux
  • Rendering:
    • Marching cubes terrain generator & renderer
    • Gerstner wave ocean renderer
    • Rectangular area lights (direct-only diffuse & specular)
    • Physically-based shading model
    • Image-based lighting
    • Screen-space ambient occlusion
    • Stable cascaded shadow mapping
    • Temporal anti-aliasing
    • Signed distance field (SDF) font generation & rendering
    • GPU-based particle simulation

Procedural terrain generated on the GPU

Gerstner wave ocean simulation

Cascaded Shadow Mapping

Two million particles simulated and rendered entirely on the GPU

Profiler overlay showing a breakdown the CPU-time of a single frame

Some editor windows

Screen-Space Ambient Occlusion (SSAO)

GBuffer (top-left to bottom-right): position, albedo, normal, final image, depth, metallic, AO, roughness

View into editor

See more screenshots here

Dependencies

Flex Engine uses the following open-source libraries:

  • Bullet - Collision detection & rigid body simulation
  • FreeType - Font loading
  • glfw - Window creation, input handling
  • glm - Math operations
  • ImGui - User interface
  • OpenAL - Audio loading and playback
  • stb - Image loading
  • cgltf - Mesh loading
  • volk - Vulkan meta-loader

License

Flex engine is licensed under the MIT license. See LICENSE.md for details.

Acknowledgements

A huge thank you must be given to the following individuals and organizations for their incredibly useful resources:

Blog

Stay (somewhat) up to date about this project on my blog at ajweeks.com/blog