Entity Component System Architecture
Chose ECS over traditional inheritance-based architecture for better performance and flexibility:
class Entity {
EntityID id;
ComponentMask componentMask;
};
template<typename T>
class ComponentManager {
std::vector<T> components;
std::unordered_map<EntityID, size_t> entityToIndex;
public:
void AddComponent(EntityID entity, T component);
T& GetComponent(EntityID entity);
};
Batch Rendering Optimization
Implemented sprite batching to minimize draw calls and maximize GPU efficiency:
class SpriteBatch {
static constexpr size_t MAX_SPRITES = 10000;
std::vector<SpriteVertex> vertices;
GLuint VAO, VBO;
public:
void Begin();
void Draw(const Sprite& sprite, const Transform& transform);
void End(); // Flushes all sprites in one draw call
};
Memory-Efficient Component Storage
Used contiguous memory layout for cache-friendly component iteration:
// Components stored in contiguous arrays for better cache performance
std::vector<TransformComponent> transforms;
std::vector<SpriteComponent> sprites;
std::vector<PhysicsComponent> physics;
// Systems iterate over packed arrays
for (size_t i = 0; i < activeEntities; ++i) {
UpdateTransform(transforms[i]);
UpdatePhysics(physics[i]);
}