Cada decisión tecnológica en MasbitsEngine fue deliberada. Este post explica el razonamiento detrás de cada elección.

Lenguaje: C++23

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

APIPor qué se consideróPor qué se descartó
VulkanRendimiento, control explícito, multiplataforma— elegido
OpenGLMás sencillo, maduroVarianza entre drivers, API obsoleta
DirectX 12Rendimiento en WindowsSolo 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 Release

Resumen

ComponenteElecciónRazón principal
LenguajeC++23Rendimiento, diseño orientado a datos
RenderizadoVulkanControl explícito, multiplataforma
VentanaSDL3Soporte Wayland, API limpia
FísicaBox2DProbado, ligero, determinista
GUIImGuiModo inmediato, iteración rápida
BuildCMake + NinjaMulti-config, soporte de toolchains
CompiladorClangSoporte C++23, LSP clangd