Cada decisión tecnológica en MasbitsEngine fue deliberada. Este post explica el razonamiento detrás de cada elección.
Lenguaje: C++26
Elegido por rendimiento, abstracciones de coste cero, diseño orientado a datos con layouts de memoria contiguos y computación en tiempo de compilación con constexpr.
// Matriz identidad en tiempo de compilación
constexpr auto identity_matrix() {
mat4 m{};
for (int i = 0; i < 4; ++i) m[i][i] = 1.0f;
return m;
}
static constexpr mat4 IDENTITY = identity_matrix();Renderizado: Vulkan
| API | Por qué se consideró | Por qué se descartó |
|---|---|---|
| Vulkan | Rendimiento, control explícito, multiplataforma | — elegido |
| OpenGL | Más sencillo, maduro | Varianza entre drivers, API obsoleta |
| DirectX 12 | Rendimiento en Windows | Solo Windows |
En Linux, solo se soporta Wayland — las macros de X11 (None, Success) entran en conflicto con el código del motor.
Ventana y entrada: SDL3
// Bucle de eventos SDL3
SDL_Event event;
while (SDL_WaitEvent(&event)) {
switch (event.type) {
case SDL_EVENT_KEY_DOWN: handleInput(event.key); break;
case SDL_EVENT_MOUSE_MOTION: updateMouse(event.motion); break;
}
}Física: Box2D
Probado en innumerables juegos, ligero y determinista. Integrado en src/EngineCores/PhysicCore/.
GUI: ImGui
GUI de modo inmediato para el editor — sin gestión de estado, iteración rápida, backend Vulkan mediante imgui_impl_vulkan.
Build: CMake + Ninja Multi-Config
# Una configuración genera Debug y Release
cmake --preset linux-clang
cmake --build build --config Debug
cmake --build build --config ReleaseResumen
| Componente | Elección | Razón principal |
|---|---|---|
| Lenguaje | C++26 | Rendimiento, diseño orientado a datos |
| Renderizado | Vulkan | Control explícito, multiplataforma |
| Ventana | SDL3 | Soporte Wayland, API limpia |
| Física | Box2D | Probado, ligero, determinista |
| GUI | ImGui | Modo inmediato, iteración rápida |
| Build | CMake + Ninja | Multi-config, soporte de toolchains |
| Compilador | Clang | Soporte C++26, LSP clangd |