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.
¿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
| Aspecto | Modo retenido (Qt, WPF…) | Modo inmediato (Dear ImGui) |
|---|---|---|
| Estado de los widgets | Vive en objetos persistentes | Vive en tus propias variables |
| Actualización de la UI | Callbacks y eventos | Se redescribe cada frame |
| Curva de aprendizaje | Media/alta (jerarquías, señales) | Baja para prototipar |
| Uso típico | Aplicaciones de usuario final | Herramientas internas, debug, editores |
| Personalización visual | Muy alta (temas, estilos) | Funcional, no orientada a diseño final |
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:
- El core de la biblioteca (
imgui.h,imgui.cpp, etc.), independiente de la plataforma. - Un backend que conecte ImGui con tu ventana y tu API gráfica, por ejemplo
imgui_impl_glfw+imgui_impl_opengl3, oimgui_impl_win32+imgui_impl_dx11.
Un vistazo a la API
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.
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.