</>waridocu

C++

¿Qué es Dear ImGui?

Qué es Dear ImGui, en qué se diferencia de una GUI tradicional y para qué se usa en la práctica.

imguiguiherramientascpp

¿Qué es Dear ImGui?

Dear ImGui es una biblioteca de interfaz gráfica para C++ creada por Omar Cornut, pensada para construir herramientas de depuración, paneles de control y editores dentro de aplicaciones gráficas en tiempo real, principalmente videojuegos y motores. Es de código abierto, ligera, y no depende de ningún sistema operativo o backend gráfico concreto: se integra sobre el que ya esté usando tu aplicación (OpenGL, DirectX, Vulkan, Metal…).

Su nombre viene de su técnica de diseño: modo inmediato (immediate mode), en contraposición al modo retenido (retained mode) que usan la mayoría de frameworks de UI tradicionales (Qt, WPF, sistemas de UI de escritorio en general).

Modo inmediato vs modo retenido

En una GUI de modo retenido, creas objetos persistentes (botones, ventanas) que viven en memoria y se actualizan mediante eventos y callbacks. En modo inmediato, no existen esos objetos: la interfaz se “dibuja” (se describe) de nuevo en cada fotograma, con simples llamadas a función. No hay estado oculto que sincronizar entre tu lógica y la UI, porque la UI es tu lógica.

Comparativa rápida

AspectoModo retenido (Qt, WPF…)Modo inmediato (Dear ImGui)
Estado de los widgetsVive en objetos persistentesVive en tus propias variables
Actualización de la UICallbacks y eventosSe redescribe cada frame
Curva de aprendizajeMedia/alta (jerarquías, señales)Baja para prototipar
Uso típicoAplicaciones de usuario finalHerramientas internas, debug, editores
Personalización visualMuy alta (temas, estilos)Funcional, no orientada a diseño final
Importante

Dear ImGui no está pensado para construir la interfaz final que verá el usuario de un videojuego comercial (menús, HUD pulido, tiendas). Su punto fuerte son las herramientas internas: inspectores de escena, paneles de depuración, editores de niveles, tweak de parámetros en tiempo real, etc.

¿Para qué se usa?

  • Herramientas de desarrollo interno en motores de videojuegos (inspectores, profilers, consolas).
  • Prototipado rápido de interfaces cuando la estética final no importa todavía.
  • Paneles de depuración superpuestos sobre una aplicación en ejecución (overlays de FPS, memoria, variables en vivo).
  • Editores de herramientas propias (level editors, shader editors, node editors) gracias a extensiones como ImNodes o ImGuizmo.

Cómo se integra en un proyecto

Dear ImGui se distribuye como código fuente (no como binario precompilado) y se compila directamente junto a tu proyecto. Necesita dos piezas:

  1. El core de la biblioteca (imgui.h, imgui.cpp, etc.), independiente de la plataforma.
  2. Un backend que conecte ImGui con tu ventana y tu API gráfica, por ejemplo imgui_impl_glfw + imgui_impl_opengl3, o imgui_impl_win32 + imgui_impl_dx11.

Un vistazo a la API

Ejemplo: definir un panel simple con un botón y un slidercpp
bool mostrar_panel = true;
float velocidad = 1.0f;

if (mostrar_panel) {
    ImGui::Begin("Panel de control", &mostrar_panel);
    ImGui::Text("Ajustes en tiempo real");
    ImGui::SliderFloat("Velocidad", &velocidad, 0.0f, 5.0f);
    if (ImGui::Button("Reiniciar")) {
        velocidad = 1.0f;
    }
    ImGui::End();
}

Nota cómo el estado (mostrar_panel, velocidad) vive en variables normales de C++, no en objetos de la biblioteca: eso es la esencia del modo inmediato.

Tip

Si nunca has escrito C++ antes, la sección de fundamentos es un buen punto de partida antes de meterte con ImGui: revisa ¿Qué es C++? para tener el contexto del lenguaje sobre el que corre todo esto.