Muto is a lightweight graphics application inspired by TheCherno's Game Engine Architecture series for the Hazel engine.
It provides a renderer, scene & entity system, editor UI, input handling, and utilities to build simple games and interactive applications in C++ (C++17).
Quick overview
- Third-party libraries:
- entt (entity-component system)
- Glad (OpenGL function loading)
- GLFW (windowing and input)
- glm (math library)
- ImGui (editor UI)
- ImGuizmo (editor gizmos)
- spdlog (logging)
- stb (image loading)
- Core features:
- Scene / Entity / Component system
- 2D renderer with orthographic and perspective cameras
- ImGui-based editor layer
- Input and event handling
- Starter particle system and instrumentation
New Project example code
The easiest way to get started with Muto is to simply modify the Sandbox project. The following is an example of a simple application that creates a layer and renders a simple ImGui window.
#include "imgui/imgui.h"
{
public:
{
}
ImGui::Begin("Example Layer");
ImGui::Text("Hello from ExampleLayer!");
ImGui::End();
}
};
{
public:
}
};
return new YourAppNameHere();
}
Main header file for the Muto engine. For use by clients in Vesper applications.
Definition SandboxApp.cpp:17
ExampleLayer()
Definition SandboxApp.cpp:19
void OnImGuiRender() override
Called when the layer should render its ImGui components.
Definition SandboxApp.cpp:165
void OnEvent(Muto::Event &e) override
Called when an event is dispatched to the layer.
Definition SandboxApp.cpp:167
void OnUpdate(Muto::Timestep ts) override
Called every frame to update the layer with the given timestep.
Definition SandboxApp.cpp:136
The core application class that manages the main loop, window, layers, and event handling.
Definition Application.h:70
void PushLayer(Layer *layer)
Adds a layer to the application layer stack.
Definition Application.cpp:89
Abstract base class for all events.
Definition Event.h:35
Represents a reusable application layer that receives lifecycle callbacks (attach,...
Definition Layer.h:17
Layer(const std::string &name="Layer")
Constructs a Layer with an optional name for debugging purposes.
Definition Layer.cpp:6
virtual void OnDetach()
Called when the layer is detached from the application.
Definition Layer.h:31
virtual void OnAttach()
Called when the layer is attached to the application.
Definition Layer.h:28
Represents a time step in seconds.
Definition Timestep.h:11
Application * CreateApplication()
Definition SandboxApp.cpp:200
constexpr Scope< T > CreateScope(Args &&... args)
Creates a Scope (unique_ptr) for the given type and constructor arguments.
Definition Defines_Macros.h:51
Muto's Author: Damon S. Green II (nomad_ii_damon)
For more information about the author, please visit
https://www.damonsgreen2.com
Contributing
For full contributing guidlines view Contributing Guidelines.
Licensing
License status: Proprietary (subject to change)
Muto itself is not currently released under any specific license and is provided as-is. Copyright © 2025 by Damon S. Green II (nomad_ii_damon). All rights reserved unless otherwise stated.
This project contains code derived from the Hazel Engine by TheCherno, licensed under the Apache License 2.0, obtained through public tutorialization and source code access.
Original Hazel code and derivative works thereof are licensed under the Apache License 2.0. Other original code in this repository is Copyright © 2025 Damon S. Green II (nomad_ii_damon).
See the LICENSE file for details.
Fully-Modified File Header for Licensing
Copyright © TheCherno Modifications Copyright © 2025 Damon S. Green II (nomad_ii_damon)
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Modified File Header for Licensing
Based on Hazel Engine (Apache 2.0) Modified by Damon S. Green II, 2025