Skip to content

Game development framework under heavy development used as a personal testbed for rendering techniques and game mechanics. Have a look around. You might find some code worth copy&pasting.

License

IonutCava/Divide-Framework

Repository files navigation

Win64 - MSVC Win64 - Clang Linux - Clang Linux - GCC

Divide-Framework MIT Licensed

Website: divide-studio.com

ToDo List: Trello.com/divide-todo

Twitter: Twitter.com/KIonutzR

Mastodon: peoplemaking.games/@KIonutzR

The How and the Why

Yup, YAGE. Yet Another Game Engine. A toy engine, mind you, never intended for general release or something people will ever require support with. It is something I use to experiment on, learn new things, practice, prototype and eventually, try and ship a game or two with.

This code started during my first days in uni. The first iteration looked like this: Youtube link.

Next to no programming experience and it shows in the parts of code that survived since then (all the SceneNode and Resource stuff). Started with a lot of OOP and "Clean Code" with C++98 and currently developed using as much DoD as possible (basic structs and enums, inheritance mostly for interfaces or restrictions {NonCopyable, NonMovable, etc}) but with C++20 for ease of use (constexpr and concepts over templates, threading and filesystem builtin, lambdas over function pointers etc).

It got me through learning old-school OpenGL (1.x, 2.x), core GL (3.x, 4.x) and some AZDO techniques (indirect rendering, bindless textures, persistently mapped buffers, etc). Currently using it to learn Vulkan 1.3 (why would I learn about framebuffers, subpasses and renderpasses now? Maybe for mobile, but I don't see myself doing that now, and if I did, I'd learn that as required).

The reason it's published on GitHub are:

  • so I can store the code somewhere central and keep track of changes.
  • if people do as I do and search for various things (functions, enums, etc) on GitHub, maybe my code can help.
  • if anyone is struggling with solving a problem that I already banged my head against, feel free to get inspired by it.

If you plan to use any parts of this code in a commercial product, a couple of things:

  • Are you sure?
  • Please let me know as I'm curious to see where and why and also, I'd highly appreciate it.

How to build & run

All:

  • Clone with recursive submodules (e.g. git clone --recurse-submodules). Needed for vcpkg.

Visual Studio Code:

  • Open the root folder in VSCode (with CMake and C++ extensions installed).
  • Under CMake Project Status view, select the desired Configure preset followed by the desired Build preset.
  • Build and Run as needed.
  • Works on both Windows and Linux.

Windows:

  • Engine / Game builds:
    • Open the root folder in Visual Studio (with CMake tools installed).
    • Select the desired preset from the Build Preset dropdown.
    • Build and Run as needed.
  • Project Manager:
    • Same as above (VS/VSCode) but with the ProjectManager subfolder as a root.
    • Alternatively. RUN.bat will attempt to build a release version and launch that.
      • The Project Manager has an option to launch Visual Studio with the proper path set.

Linux:

  • Only tested the VSCode steps outlined above.

MacOS:

  • ToDo

Features:

  • OpenGL 4.6 (AZDO) renderer

  • Experimental Vulkan renderer

  • C++17/20

  • Windows only (but with functional Linux platform code).

Screenshots

Framework Screenshot Framework Screenshot

Scene Manipulation Screenshot Scene Manipulation Screenshot

Vulkan Rendering Backend Vulkan Rendering Backend

Day night cycle Day night cycle

Editor Grid Editor_Grid

Sponza rendering Sponza rendering

ImGUI Docking ImGUI Docking

SSR SSR

Grass/Sky/Fog Grass/Sky/Fog

Third Party libs:

If I accidentally breached any license, please open an issue and I will address it immediately.
I did try to comply with all of them, but I may have missed something.

About

Game development framework under heavy development used as a personal testbed for rendering techniques and game mechanics. Have a look around. You might find some code worth copy&pasting.

Topics

Resources

License

Stars

Watchers

Forks