WCGE (W Custom Game Engine) is a lightweight C++ game engine built from scratch as a learning-oriented project, focused on understanding the internals of modern real-time engines: rendering, math, input, resource management, an entity–component layer, and a custom physics module.
- Custom Math Library — vectors, matrices, and transforms implemented from scratch
- OpenGL Renderer — built on GLAD and GLFW, with shader, texture, mesh, and material abstractions
- Entity–Component System — composable entities with reusable components (Transform, etc.)
- Resource Manager — centralized loading and caching of shaders, textures, and meshes
- Input System — keyboard and mouse polling
- Physics Module — work-in-progress physics engine, including 2D collision primitives
- Logging & Time — minimal utilities for diagnostics and frame timing
- Sandbox Application — example client app demonstrating engine usage
WCGE/
├── WCGE/ # Engine static library
│ └── src/WCGE/
│ ├── Core/ # Math, Logging, Time
│ ├── Graphics/ # Renderer, Window, Shader, Texture, Mesh, Material
│ ├── Input/ # Input handling
│ ├── EntityComponent/
│ ├── Physics/
│ └── Resources/
├── Sandbox/ # Example application using the engine
├── ThirdParty/ # GLAD, GLFW, FastNoiseLite
└── WCGE.sln # Visual Studio solution
- Visual Studio 2019 or later (with the C++ Desktop workload)
- Windows 10 / 11
- A GPU supporting OpenGL 3.3+
Third-party dependencies (GLAD, GLFW, FastNoiseLite) are vendored under ThirdParty/ — no external setup is required.
- Clone the repository:
git clone https://github.com/<your-user>/WCGE.git
- Open
WCGE.slnin Visual Studio. - Select the
Sandboxproject as the startup project. - Build and run (
F5).
A minimal client application looks like this:
#include <WCGE.hpp>
#include <WCGE/EntryPoint.hpp>
using namespace WCGE;
class MyGame final : public Application
{
public:
MyGame()
{
window = new Graphics::Window(1280, 720, "My Game", false);
}
void Start() override { /* initialize entities */ }
void Update() override { /* per-frame logic */ }
void LateUpdate() override
{
if (Input::GetKey(Key::Escape)) isRunning = false;
}
};
Application* WCGE::CreateApplication() { return new MyGame(); }See Sandbox/src/Application.cpp for a complete example.
WCGE is an active learning project. APIs are not stable and may change between commits. The physics engine in particular is in early development.
- GLFW — windowing and input
- GLAD — OpenGL loader
- stb_image — image loading
- FastNoiseLite — procedural noise
Released under the MIT License.