Giter Club home page Giter Club logo

glory's Introduction

Glory Engine

A modular game engine and editor.

Glory is an under development, modular game engine and editor, written in C++. It has a detailed profiler, comes with a clustered renderer supporting 3000+ dynamic lights, is fully customizable and is platform independant thanks to its modularity.

Glory Editor

Features

  • Extremely expandable due to modular design
  • Customizable editor made using ImGui
  • Scripting in any language your hearth desires
  • Write custom modules
  • Built-in asset management
  • Use any graphics API
  • Project HUB
  • Runtime shader compilation and in the future cross platform shader compilation
  • Built-in profiler
  • Launcher/Hub with support for multiple editor installations (similar to Unity)
  • Built-in version checking

Built-in Modules

  • Clustered Renderer
  • OpenGL Graphics API
  • Model loader using ASSIMP
  • ECS Scene System
  • Texture loading using SDL image
  • SDL Window
  • Physics engine using the Jolt Physics library
  • Scripting in C# using mono
  • Input processing with SDL
  • Vulkan Graphics API (WIP)

Tech

Glory uses the following libraries:

  • Dear ImGui - Open-source GUI library used by the editor.
  • ImGuizmo - Amazing library for 3D gizmos and grids rendered using ImGui.
  • ImPlot - Epic library for plotting graphs in ImGui.
  • RapidJSON - The fastest json parser and writer in existance.
  • ASSIMP - Open asset import library for importing 3D files like FBX, OBJ, CAD and many more.
  • yaml-cpp - YAML file parser for C++.
  • SDL - Simple Direct Media Layer library, used for opening a window.
  • SDL_Image - Image loading library for SDL.
  • Vulkan SDK - The future of computer graphics.
  • GLEW - OpenGL extension wrangler library.
  • GLM - Mathematics library for graphics software.
  • Premake5 - Powerfully simple build configuration.
  • shaderc - A collection of tools, libraries and tests for shader compilation.
  • SPIRV-cross - Tool designed for parsing and converting SPIR-V to other shader languages.
  • SPIRV-tools - Tool that provides an API and commands for processing SPIR-V modules.
  • glslang
  • Mono - Software platform designed to allow developers to easily create cross platform applications.
  • Jolt Physics - A multi core friendly rigid body physics and collision detection library suitable for games and VR applications, used by Horizon Forbidden West.
  • curl - Command line tool and library for transferring data with URLs (since 1998)
  • stb_image.h - Single-file public domain (or MIT licensed) libraries for C/C++.
  • esfw - Simple and fast cross platform filewatch.
  • tinyfiledialogs - Simple and fast cross platform file dialog.
  • FontAwesome - Large collection of icons contained in a font.
  • zlib - A Massively Spiffy Yet Delicately Unobtrusive Compression Library.

Installation

Install Dependencies

To build and install dependencies, run the install-dependencies.sh script using the following command line: ./install-dependencies.sh [configuration] There are currently 2 options for configuration, Debug and Release.

Build the engine

Run the generateprojects.bat file to run the premake scripts and generate the visual studio project files. Open GloryEngine.sln and build the whole solution. Run the editor by running Glorious.

Run the luncher/hub by running GloriousLauncher.

License

The current version of Glory is under a Personal Use Only license. This will change in the near future to allow commercial usage under limitations.

glory's People

Contributors

themaddodger avatar

Stargazers

空白咯 avatar Harald Reingruber avatar TCGM avatar  avatar Seppe Dekeyser avatar Yusuf Sabbag avatar Braedon avatar Alexander Gunger avatar Bartłomiej Kalemba avatar Wenbo Chen avatar Chen Tao avatar Hubert avatar Amer Koleci avatar Robert Campbell avatar  avatar

Watchers

 avatar  avatar  avatar

glory's Issues

Multi selection

Selection currently only supports 1 object at a time, which is annoying if you are working on larger scenes.

Runtime module swapping

You currently cannot swap modules at runtime, what if we make a game that supports both Vulkan and OpenGL? Then we need to be able to switch between the 2 based on the users settings.

Packaging

A build pipeline that performs the necessary actions to make the game playable without the editor.

Following steps need to be taken to achieve this:

  • Global extensions
  • Importer system (#274)
  • #273
  • #272
  • Asset loading
  • Asset groups
  • Shader packaging
  • Glory runtime
  • Scene compilation
  • Packaging editor
  • Packaging
  • Package scripting
  • Package input
  • Packaging progress popup
  • Splash screen
  • #327
  • Binary Prefabs
  • Binary script component properties
  • #322

Drag and drop system

Generic drag and drop system with customizable behavior for all editor windows

Undo/Redo History

A window showing history of actions in a list, you can click on any item in the history to jump to that state.
A "Clear" button clears the history.

#15

Config vars

Id tech engine style config vars for the console

Undo/Redo

Options in MenuBar to Undo/Redo the last action, shortcuts not included see #24 for shortcuts.

Module management window

An editor window where you can manage the modules used by the project and edit their settings.

Geometry tools

Geometry tools for level creation without the need of a modeling software. Something like Hammer's toolset would be nice.

Hierarchy colors

Objects inside the hierarchy currently have a static grey color, an option inside the inspector to change this color would be nice.

Asset reloading

When you right click an asset in the editor you should get the option to reload/reimport it

Input Module

Input system for handling user input from keyboard and mouse, controller, etc

Launcher/Hub editor Locate button

Locate should open a file browser to allow you to add an editor installation from any location on you computer.
These installed editors need to be saved to a file so the hub can remember where these are later.

Set parent action

An action that stores a set parent state for the undo/redo stack.
Requires parenting to be fixed #19 hence why it was not included in issue #15

Built-in assets

An asset system that imports assets from modules and the core engine, should be able to relink assets when switching modules so that for example when you switch renderers the default shader is automatically relinked to the one of the new renderer.

Worker threads

Expand the job and thread management to allow for worker threads, to be used for the ECS system.

Play mode

Play mode allows you to test in editor.

For this to work a copy of the scene must be made at runtime, when exiting playmode the copy is deleted and the scene is restored to the original.
Update calls of objects also must not be called while not in play mode, unless a component requires this!

Asset loading debug window

An editor window displaying all the assets currently active.
A status shows whether they are loaded or currently loading.
Right click options: Reload, Unload, Select
Optional: usage counter?

Import pipeline

Dragging any file into the content browser (or preferably anywhere inside the editor with different behavior depending on what window it was dropped on) should start an import process, this may open a popup with some importation settings. Once confirmed the editor copies the necessary files to the asset folder currently opened or highlighted during drag and drop, and sets up the import settings in its meta file.

C# scripting

Implement scripting system and write a C# implementation for it.

Asset Groups

A system that can compact assets into single larger files and store where to find specific assets inside these larger files, goes hand in hand with the build pipeline and should be customizable by the user.

Import a model as scene

Some model file types such as FBX can have other objects like cameras and lights, if we import such a model the user should get the option to import it as a scene, in which case all objects will be converted to glory objects/entities. The meshes will still be created as assets off course but will be automatically linked to the new scene.

Editor Launcher/Hub

A launcher that creates projects and opens them, launches the editor with command line args to open a project and loads its engine config file to load the correct modules.

Dynamic module loading

Modules should be loaded it at startup based on a config rather than be statically linked.

Shortcuts

Rebind-able shortcuts to trigger any editor functionality.

Shader cross compilation

A system that can automatically cross compile the shaders in use to the platform currently being used or being built for.

Render optimization

  • CPU occlusion culling
  • Automatic sorting of duplicate objects and materials
  • Instancing
  • Batching

Prefab system

Unity style prefab system

  • Prefab asset
  • Prefab creation
  • Prefab instantiation
  • Automatically find and replace object references in script components
  • Prefab is not named correctly
  • Use ID remapping seed instead of a giant map
  • Drag drop object to folder to create prefab
  • Drag drop object to filebrowser to create prefab
  • Drag drop prefab from filebrowser to scene to instantiate
  • Drag drop prefab from resources view to scene to instantiate
  • Fix undo/redo duplication of a prefab object crash
  • Unpack prefab option
  • Lock editors for child objects in a prefab
  • Instantiate prefab CS API
  • Allow to instantiate prefab with a starting transform

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.