https://github.com/albin-johansson/glow
A 3D graphics engine, developed for fun.
https://github.com/albin-johansson/glow
3d 3d-engine 3d-graphics cpp cross-platform ecs graphics opengl rendering vulkan
Last synced: 3 months ago
JSON representation
A 3D graphics engine, developed for fun.
- Host: GitHub
- URL: https://github.com/albin-johansson/glow
- Owner: albin-johansson
- License: mit
- Created: 2023-02-20T17:34:06.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-09T20:52:09.000Z (almost 3 years ago)
- Last Synced: 2025-04-04T07:12:24.595Z (over 1 year ago)
- Topics: 3d, 3d-engine, 3d-graphics, cpp, cross-platform, ecs, graphics, opengl, rendering, vulkan
- Language: C++
- Homepage:
- Size: 785 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Glow
[](https://github.com/albin-johansson/glow/actions/workflows/ci.yml)
A work in progress 3D graphics engine, developed for fun.
## Purpose
This project is developed for recreational and educational purposes.
The goal is to be able to render nice looking scenes using modern graphics APIs, with a performant and readable code base.
### What this project is not
* A game engine
* A 3D model editor
## Features
* Written in C++23
* ECS architecture
* Support for common 3D model file formats, such as `.dae`, `.fbx`, and `.obj`.
* OpenGL 4.1.0 backend
* Vulkan 1.2 backend
## Build
This project uses [Vcpkg](https://github.com/microsoft/vcpkg) for dependency management.
However, you will need to install the [Vulkan SDK](https://vulkan.lunarg.com/) to build the Vulkan backend.
You can verify your Vulkan installation by checking the value of the `VULKAN_SDK` environment variable.
Information on Vcpkg triplets can be found [here](https://github.com/microsoft/vcpkg/docs/users/triplets.md).
```
> export VCPKG_ROOT=
> mkdir build && cd build
> cmake .. -GNinja \
-DCMAKE_BUILD_TYPE= \
-DVCPKG_TARGET_TRIPLET=
> ninja
```
## Usage
```
Usage: glow [options]
Options:
--api, -a 'OpenGL' or 'Vulkan', defaults to 'OpenGL' (optional)
--env, -e Path to an environment texture to load at startup (optional)
--models, -m Space-separated list of model file paths to load at startup (optional)
--log, -l Verbosity of log output, valid values are within [0, 6], defaults to 4 (optional)
```
Some examples are provided below.
```shell
# Use default graphics API, and no initial environment texture or models
> ./glow
# Use a specific graphics API
> ./glow --api Vulkan
# Disable all logging output
> ./glow --log 0
# Load an environment texture and several models
> ./glow --env textures/env.hdr --models models/teapot.dae models/kettle.fbx
```
## Dependencies
See [vcpkg.json](vcpkg.json) for the full Vcpkg manifest file.
* [argparse](https://github.com/p-ranav/argparse)
* [assimp](https://github.com/assimp/assimp)
* [Boost](https://www.boost.org/)
* [entt](https://github.com/skypjack/entt)
* [fmt](https://github.com/fmtlib/fmt)
* [Font Awesome](https://github.com/FortAwesome/Font-Awesome)
* [glad](https://github.com/Dav1dde/glad)
* [glm](https://github.com/g-truc/glm)
* [Dear ImGui](https://github.com/ocornut/imgui) (with modifications from [this](https://github.com/albin-johansson/imgui) fork)
* [IconFontCppHeaders](https://github.com/juliettef/IconFontCppHeaders)
* [ImGuizmo](https://github.com/CedricGuillemet/ImGuizmo)
* [Magic Enum C++](https://github.com/Neargye/magic_enum)
* [SDL2](https://github.com/libsdl-org/SDL)
* [spdlog](https://github.com/gabime/spdlog)
* [stb](https://github.com/nothings/stb)
* [Vulkan Memory Allocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)