(Esta biblioteca está disponible bajo una licencia gratuita y permisiva, pero necesita apoyo financiero para sostener sus mejoras continuas. Además del mantenimiento y la estabilidad, aún quedan muchas características deseables por agregar. Si su empresa utiliza Dear ImGui, considere comunicarse con .)
Empresas: respaldan el desarrollo y mantenimiento continuo a través de contratos de patrocinio/soporte facturados:
Correo electrónico: contacto @ dearimgui punto com
Individuos: apoyen el desarrollo y mantenimiento continuo aquí. Consulte también la página de Financiación.
El discurso - Uso - Cómo funciona - Lanzamientos y registros de cambios - Demostración - Introducción e integración |
---|
Galería - Soporte, Preguntas frecuentes - Cómo ayudar - Financiamiento y patrocinadores - Créditos - Licencia |
Wiki - Extensiones - Enlaces de idiomas y marcos backends - Software que utiliza Dear ImGui - Citas de usuarios |
Dear ImGui es una biblioteca de interfaz gráfica de usuario libre de sobrecargas para C++ . Genera buffers de vértices optimizados que puede renderizar en cualquier momento en su aplicación habilitada para canalizaciones 3D. Es rápido, portátil, independiente del renderizador y autónomo (sin dependencias externas).
Dear ImGui está diseñado para permitir iteraciones rápidas y capacitar a los programadores para crear herramientas de creación de contenido y herramientas de visualización/depuración (a diferencia de la interfaz de usuario para el usuario final promedio). Favorece la simplicidad y la productividad hacia este objetivo y carece de ciertas características que se encuentran comúnmente en bibliotecas de más alto nivel. Entre otras cosas, no se admiten la internacionalización completa (texto de derecha a izquierda, texto bidireccional, configuración de texto, etc.) ni las funciones de accesibilidad.
Dear ImGui es particularmente adecuado para la integración en motores de juegos (para herramientas), aplicaciones 3D en tiempo real, aplicaciones de pantalla completa, aplicaciones integradas o cualquier aplicación en plataformas de consola donde las características del sistema operativo no son estándar.
El núcleo de Dear ImGui está contenido en unos pocos archivos independientes de la plataforma que puede compilar fácilmente en su aplicación/motor. Son todos los archivos en la carpeta raíz del repositorio (imgui*.cpp, imgui*.h). No se requiere ningún proceso de construcción específico . Puede agregar los archivos .cpp a su proyecto existente.
Los backends para una variedad de API de gráficos y plataformas de renderizado se proporcionan en la carpeta backends/, junto con aplicaciones de ejemplo en la carpeta ejemplos/. También puedes crear tu propio backend. En cualquier lugar donde puedas renderizar triángulos texturizados, puedes renderizar Dear ImGui.
Consulte la sección Introducción e integración de este documento para obtener más detalles.
Después de configurar Dear ImGui en su aplicación, puede usarlo desde _cualquier lugar_ en el bucle de su programa:
ImGui::Text ( " Hello, world %d " , 123 );
if (ImGui::Button( " Save " ))
MySaveFunction ();
ImGui::InputText ( " string " , buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat ( " float " , &f, 0 . 0f , 1 . 0f );
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin ( " My First Tool " , &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
if ( ImGui::BeginMenu ( " File " ))
{
if ( ImGui::MenuItem ( " Open.. " , " Ctrl+O " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Save " , " Ctrl+S " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Close " , " Ctrl+W " )) { my_tool_active = false ; }
ImGui::EndMenu ();
}
ImGui::EndMenuBar ();
}
// Edit a color stored as 4 floats
ImGui::ColorEdit4 ( " Color " , my_color);
// Generate samples and plot them
float samples[ 100 ];
for ( int n = 0 ; n < 100 ; n++)
samples[n] = sinf(n * 0 . 2f + ImGui::GetTime() * 1 . 5f );
ImGui::PlotLines ( " Samples " , samples, 100 );
// Display contents in a scrolling region
ImGui::TextColored (ImVec4( 1 , 1 , 0 , 1 ), "Important Stuff");
ImGui::BeginChild ( " Scrolling " );
for ( int n = 0 ; n < 50 ; n++)
ImGui::Text ( " %04d: Some text " , n);
ImGui::EndChild ();
ImGui::End ();
Dear ImGui te permite crear herramientas elaboradas y otras de muy corta duración. En el extremo de la corta duración: usando la función Editar y Continuar (recarga de código activo) de los compiladores modernos, puede agregar algunos widgets para modificar las variables mientras su aplicación se está ejecutando y eliminar el código un minuto después. Estimado ImGui no es solo para modificar valores. Puede usarlo para rastrear un algoritmo en ejecución simplemente emitiendo comandos de texto. Puede usarlo junto con sus propios datos de reflexión para explorar su conjunto de datos en vivo. Puedes usarlo para exponer los aspectos internos de un subsistema en tu motor, para crear un registrador, una herramienta de inspección, un generador de perfiles, un depurador, un editor/marco completo de creación de juegos, etc.
El paradigma IMGUI a través de su API intenta minimizar la duplicación de estado, la sincronización y la retención de estado superfluas desde el punto de vista del usuario. Es menos propenso a errores (menos código y menos errores) que las interfaces tradicionales en modo retenido y se presta para crear interfaces de usuario dinámicas. Consulte la sección Acerca del paradigma IMGUI de Wiki para obtener más detalles.
Estimado ImGui genera búferes de vértices y listas de comandos que puede representar fácilmente en su aplicación. La cantidad de llamadas de sorteo y cambios de estado necesarios para renderizarlos es bastante pequeña. Debido a que Dear ImGui no conoce ni toca el estado de los gráficos directamente, puede llamar a sus funciones en cualquier parte de su código (por ejemplo, en medio de un algoritmo en ejecución o en medio de su propio proceso de renderizado). Consulte las aplicaciones de muestra en la carpeta ejemplos/ para obtener instrucciones sobre cómo integrar Dear ImGui con su código base existente.
Un malentendido común es confundir la GUI en modo inmediato con la representación en modo inmediato, lo que generalmente implica dañar su controlador/GPU con un montón de llamadas de extracción y cambios de estado ineficientes a medida que se llaman las funciones de la GUI. Esto NO es lo que hace Dear ImGui. Estimado ImGui genera buffers de vértices y una pequeña lista de lotes de llamadas de sorteo. Nunca toca tu GPU directamente. Los lotes de llamadas de sorteo son bastante óptimos y puedes renderizarlos más tarde, en tu aplicación o incluso de forma remota.
Consulte la página de lanzamientos para ver los registros de cambios decorados. Leer los registros de cambios es una buena manera de mantenerse actualizado con las cosas que Dear ImGui tiene para ofrecer, ¡y tal vez le dé ideas de algunas características que ha estado ignorando hasta ahora!
Llamar a la función ImGui::ShowDemoWindow()
creará una ventana de demostración que muestra una variedad de características y ejemplos. El código siempre está disponible como referencia en imgui_demo.cpp
. Así es como se ve la demostración.
Debería poder crear ejemplos a partir de fuentes. Si no lo haces, ¡háznoslo saber! Si desea echar un vistazo rápido a algunas funciones de Dear ImGui, puede descargar los archivos binarios de Windows de la aplicación de demostración aquí:
Las aplicaciones de demostración no son compatibles con DPI, por lo que se espera algo de borrosidad en una pantalla 4K. Para el reconocimiento de DPI en su aplicación, puede cargar/recargar su fuente en una escala diferente y escalar su estilo con style.ScaleAllSizes()
(consulte las preguntas frecuentes).
Consulte la guía de introducción para obtener más detalles.
En la mayoría de las plataformas y cuando se utiliza C++, debería poder utilizar una combinación de los backends imgui_impl_xxxx sin modificaciones (por ejemplo, imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
). Si su motor admite múltiples plataformas, considere usar más archivos imgui_impl_xxxx en lugar de reescribirlos: esto le supondrá menos trabajo y podrá ejecutar Dear ImGui inmediatamente. Más adelante podrá decidir reescribir un backend personalizado utilizando las funciones de su motor personalizado si así lo desea.
Integrar Dear ImGui dentro de su motor personalizado es una cuestión de 1) cablear las entradas del mouse/teclado/gamepad 2) cargar una textura a su GPU/motor de renderizado 3) proporcionar una función de renderizado que pueda unir texturas y renderizar triángulos texturizados, que es esencialmente lo que Los backends están funcionando. La carpeta de ejemplos/ está llena de aplicaciones que hacen precisamente eso: configurar una ventana y usar backends. Si sigue la guía de introducción, en teoría le llevará menos de una hora integrar Dear ImGui. ¡Asegúrese de dedicar tiempo a leer las preguntas frecuentes, los comentarios y las aplicaciones de ejemplo!
Backends/enlaces mantenidos oficialmente (en el repositorio):
Página wiki de enlaces/backends de terceros:
Página wiki de extensiones/widgets útiles:
Consulte también Wiki para obtener más enlaces e ideas.
Ejemplos de proyectos que utilizan Dear ImGui: Tracy (perfilador), ImHex (editor hexadecimal/análisis de datos), RemedyBG (depurador) y cientos de otros.
Para obtener más capturas de pantalla enviadas por usuarios de proyectos que utilizan Dear ImGui, consulte los hilos de la galería.
Para obtener una lista de widgets y extensiones de terceros, consulte la página wiki de Extensiones/Widgets útiles.
Motor personalizado erhe (rama de atraque) | Motor personalizado para Wonder Boy: The Dragon's Trap (2017) |
Motor personalizado (sin título) | Tracy Profiler (github) |
Consulte: Preguntas frecuentes (FAQ) donde se responden las preguntas más comunes.
Consulte: Introducción y Wiki para obtener muchos enlaces, referencias y artículos.
Consulte: Artículos sobre el paradigma IMGUI para leer/aprender sobre el paradigma GUI en modo inmediato.
Ver: Próximos cambios.
Consulte: Estimado ImGui Test Engine + Test Suite para automatización y pruebas.
Con el fin de lograr que los motores de búsqueda rastreen el wiki, aquí hay un enlace al Wiki rastreable (no para humanos, he aquí por qué).
¿Empezando? Para los usuarios nuevos que tienen problemas para compilar/vincular/ejecutar o problemas para cargar fuentes, utilice las Discusiones de GitHub. Para CUALQUIER otra pregunta, informes de errores, solicitudes o comentarios, publique en Problemas de GitHub. Lea y complete atentamente la plantilla de nueva edición.
El soporte privado está disponible para clientes comerciales que pagan (correo electrónico: contact @ dearimgui punto com ).
¿Qué versión debería obtener?
Ocasionalmente etiquetamos Lanzamientos (con buenas notas de lanzamiento), pero generalmente es seguro y se recomienda sincronizar con la última rama master
o docking
. La biblioteca es bastante estable y las regresiones tienden a corregirse rápidamente cuando se informan. Es posible que los usuarios avanzados quieran utilizar la rama docking
con las funciones Multi-Viewport y Docking. Esta rama se mantiene sincronizada con la maestra regularmente.
¿Quién utiliza Dear ImGui?
Consulte las páginas Cotizaciones, Financiamiento y patrocinadores y Software que utiliza Dear ImGui Wiki para tener una idea de quién está utilizando Dear ImGui. ¡Agrega tu juego/software si puedes! ¡Consulta también los hilos de la galería!
¿Cómo puedo ayudar?
El desarrollo continuo de Dear ImGui es y ha sido apoyado financieramente por usuarios y patrocinadores privados.
Consulte la lista detallada de patrocinadores y patrocinadores actuales y anteriores de Dear ImGui para obtener más detalles.
Desde noviembre de 2014 hasta diciembre de 2019, el desarrollo continuo también ha contado con el apoyo financiero de sus usuarios en Patreon y mediante donaciones individuales.
¡GRACIAS a todos los seguidores pasados y presentes por ayudar a mantener este proyecto vivo y próspero!
Estimado ImGui, utiliza software y servicios proporcionados de forma gratuita para proyectos de código abierto:
Desarrollado por Omar Cornut y todos los contribuyentes directos o indirectos de GitHub. La primera versión de esta biblioteca se desarrolló con el apoyo de Media Molecule y se utilizó por primera vez internamente en el juego Tearaway (PS Vita).
Los contribuyentes recurrentes incluyen a Rokas Kupstys @rokups (2020-2022): una buena parte del trabajo sobre el sistema de automatización y las pruebas de regresión ahora están disponibles en Dear ImGui Test Engine.
Disco Hello aloja y gestiona los contratos de mantenimiento/soporte, las facturas de patrocinio y otras transacciones B2B.
Omar: "Descubrí por primera vez el paradigma IMGUI en Q-Games, donde Atman Binstock había dejado caer su propia implementación simple en el código base, en la que pasé bastante tiempo mejorando y pensando. Resultó que Atman estuvo expuesto al concepto directamente trabajando con Casey Cuando me mudé a Media Molecule, reescribí una nueva biblioteca tratando de superar los defectos y limitaciones de la primera con la que trabajé. Se convirtió en esta biblioteca y desde entonces he pasado una cantidad excesiva de tiempo iterando. y mejorarlo."
Incorpora la fuente ProggyClean.ttf de Tristan Grimmer (licencia MIT).
Incorpora stb_textedit.h, stb_truetype.h, stb_rect_pack.h de Sean Barrett (dominio público).
Inspiración, comentarios y pruebas para las primeras versiones: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. También gracias a todos los que publican comentarios, preguntas y parches en GitHub.
Estimado ImGui tiene la licencia MIT; consulte LICENSE.txt para obtener más información.