---
# System prepended metadata

title: Architecture moteur 3D
tags: [' ENGINE', ' ARCHITECTURE', ARCHITECTURE MOTEUR 3D, ' 3D']

---

---
title: "Architecture moteur 3D"
tags: ARCHITECTURE MOTEUR 3D, 3D, ENGINE, ARCHITECTURE
---

# Session #1
### Why do we need architecture anyway?
### Architecture principle: rely on lower level, cannot access to higher level.
### Overview of a typical game engine architecture.
# Session #2
### Dependency cycles to be avoided.
### Singletons can facilitate architecture breaches.
### Division of responsibilities.
### Interfaces to break dependency cycles.
### Dependency injection.
### Dependency inversion.
### pImpl.
### void*: C-style pointer to user data.
# Session #3
### RAII.
### Ownership.
Lorsqu'on alloue une certaine zone mémoire, il est utile que cette zone mémoire n'ait qu'un seul propriétaire.

```cpp=
S* s1 = new S();
auto s2 = s1;
s1 = nullptr; // VERY IMPORTANT
```

Si la zone mémoire mémoire avait plusieurs propriétaires, on risque potentiellement de libérer plusieurs fois la même zone (segfault), et si jamais il n'y en a aucun on peut aboutir à ne jamais la libérer (leak).

:::success
D'où le fait d'utiliser RUST
:::

### std::unique_ptr

En C++ pour garantir le fait d'avoir un seul owner par zone mémoire, on utilise les unique_ptr

### std::shared_ptr

Etant donné le fait qu'il faut toujours essayer d'avoir un seul ownership par zone mémoire, l'utilisation de shared_ptr est généralement déconseillé. 

Bien entendu, il arrive certains cas (rare) où l'utilisation de shared_ptr est utilisé.

### Move semantics

Le principe du move semantics est d'éviter de copier à chaque fois le contenu d'une zone mémoire tout en gardant qu'un seul propriétaire de la zone mémoire concerné.

https://www.youtube.com/watch?v=ehMg6zvXuMY


### Interface with opaque structures through handlers.
# Session #4
### Specialization through inheritance.
### Specialization through components, entity-component-system.
### Camera system.
### Separation between Model and View.
### Visitor pattern.
# Session #5
### Serialization.
### Visitor pattern, again.
### Model-View, again.
### Command pattern.
### Test-driven development, unit tests, integration tests...
### Metrics