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

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++26Rendimiento, 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++26, LSP clangd