(Esta biblioteca está disponível sob uma licença gratuita e permissiva, mas precisa de apoio financeiro para sustentar suas melhorias contínuas. Além da manutenção e estabilidade, há muitos recursos desejáveis ainda a serem adicionados. Se sua empresa estiver usando Dear ImGui, considere entrar em contato .)
Empresas: apoiam o desenvolvimento e a manutenção contínuos através de contratos de patrocínio/suporte faturados:
E-mail: contato@dearimgui ponto com
Indivíduos: apoiem o desenvolvimento e a manutenção contínuos aqui. Consulte também a página Financiamento.
O argumento de venda - Uso - Como funciona - Lançamentos e registros de alterações - Demonstração - Primeiros passos e integração |
---|
Galeria - Suporte, Perguntas frequentes - Como ajudar - Financiamento e patrocinadores - Créditos - Licença |
Wiki - Extensões - Bindings de linguagens e backends de frameworks - Software usando Dear ImGui - Citações de usuários |
Dear ImGui é uma biblioteca de interface gráfica de usuário livre de inchaço para C++ . Ele gera buffers de vértice otimizados que você pode renderizar a qualquer momento em seu aplicativo habilitado para pipeline 3D. É rápido, portátil, independente de renderização e independente (sem dependências externas).
Dear ImGui foi projetado para permitir iterações rápidas e capacitar os programadores a criar ferramentas de criação de conteúdo e ferramentas de visualização/depuração (em oposição à UI para o usuário final médio). Ele favorece a simplicidade e a produtividade em direção a esse objetivo e carece de alguns recursos comumente encontrados em bibliotecas de mais alto nível. Entre outras coisas, a internacionalização completa (texto da direita para a esquerda, texto bidirecional, modelagem de texto, etc.) e recursos de acessibilidade não são suportados.
Dear ImGui é particularmente adequado para integração em motores de jogos (para ferramentas), aplicativos 3D em tempo real, aplicativos em tela cheia, aplicativos incorporados ou quaisquer aplicativos em plataformas de console onde os recursos do sistema operacional não são padrão.
O núcleo do Dear ImGui é independente de alguns arquivos independentes de plataforma que você pode compilar facilmente em seu aplicativo/mecanismo. São todos os arquivos da pasta raiz do repositório (imgui*.cpp, imgui*.h). Nenhum processo de construção específico é necessário . Você pode adicionar os arquivos .cpp ao seu projeto existente.
Backends para uma variedade de APIs gráficas e plataformas de renderização são fornecidos na pasta backends/, junto com aplicativos de exemplo na pasta samples/. Você também pode criar seu próprio back-end. Em qualquer lugar onde você possa renderizar triângulos texturizados, você pode renderizar Dear ImGui.
Consulte a seção Introdução e integração deste documento para obter mais detalhes.
Depois que Dear ImGui estiver configurado em seu aplicativo, você poderá usá-lo de _qualquer lugar_ em seu loop de 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 permite que você crie ferramentas elaboradas e também de vida muito curta. No lado extremo da curta duração: usando o recurso Edit&Continue (hot code reload) dos compiladores modernos, você pode adicionar alguns widgets para ajustar variáveis enquanto seu aplicativo está em execução e remover o código um minuto depois! Caro ImGui não serve apenas para ajustar valores. Você pode usá-lo para rastrear um algoritmo em execução apenas emitindo comandos de texto. Você pode usá-lo junto com seus próprios dados de reflexão para navegar em seu conjunto de dados ao vivo. Você pode usá-lo para expor as partes internas de um subsistema em seu mecanismo, para criar um registrador, uma ferramenta de inspeção, um criador de perfil, um depurador, um editor/framework completo para criação de jogos, etc.
O paradigma IMGUI, por meio de sua API, tenta minimizar a duplicação de estado supérflua, a sincronização de estado e a retenção de estado do ponto de vista do usuário. É menos sujeito a erros (menos código e menos bugs) do que as interfaces tradicionais de modo retido e se presta à criação de interfaces de usuário dinâmicas. Confira a seção Sobre o paradigma IMGUI do Wiki para mais detalhes.
Caro ImGui gera buffers de vértices e listas de comandos que você pode renderizar facilmente em seu aplicativo. O número de chamadas de desenho e mudanças de estado necessárias para renderizá-las é bastante pequeno. Como o Dear ImGui não conhece nem toca diretamente no estado dos gráficos, você pode chamar suas funções em qualquer lugar do seu código (por exemplo, no meio de um algoritmo em execução ou no meio do seu próprio processo de renderização). Consulte os aplicativos de exemplo na pasta samples/ para obter instruções sobre como integrar Dear ImGui à sua base de código existente.
Um mal-entendido comum é confundir GUI de modo imediato com renderização de modo imediato, o que geralmente implica martelar seu driver/GPU com um monte de chamadas de desenho ineficientes e mudanças de estado à medida que as funções da GUI são chamadas. Isso NÃO é o que Dear ImGui faz. Caro ImGui gera buffers de vértice e uma pequena lista de lotes de chamadas de desenho. Ele nunca toca sua GPU diretamente. Os lotes de chamadas de sorteio são decentemente ideais e você pode renderizá-los mais tarde, em seu aplicativo ou até mesmo remotamente.
Consulte a página de lançamentos para Changelogs decorados. Ler os changelogs é uma boa maneira de se manter atualizado com o que o Dear ImGui tem a oferecer, e talvez lhe dê ideias de alguns recursos que você tem ignorado até agora!
Chamar a função ImGui::ShowDemoWindow()
criará uma janela de demonstração apresentando uma variedade de recursos e exemplos. O código está sempre disponível para referência em imgui_demo.cpp
. Esta é a aparência da demonstração.
Você deve ser capaz de construir exemplos a partir de fontes. Se não, avise-nos! Se quiser dar uma olhada rápida em alguns recursos do Dear ImGui, você pode baixar os binários do Windows do aplicativo de demonstração aqui:
Os aplicativos de demonstração não reconhecem DPI, portanto, espere algum borrão em uma tela 4K. Para obter reconhecimento de DPI em seu aplicativo, você pode carregar/recarregar sua fonte em uma escala diferente e dimensionar seu estilo com style.ScaleAllSizes()
(consulte FAQ).
Consulte o guia de primeiros passos para obter detalhes.
Na maioria das plataformas e ao usar C++, você poderá usar uma combinação de backends imgui_impl_xxxx sem modificação (por exemplo, imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
). Se o seu mecanismo suportar múltiplas plataformas, considere usar mais arquivos imgui_impl_xxxx em vez de reescrevê-los: isso será menos trabalhoso para você e você poderá colocar o Dear ImGui em execução imediatamente. Posteriormente, você pode decidir reescrever um back-end personalizado usando as funções do mecanismo personalizado, se desejar.
Integrar Dear ImGui em seu mecanismo personalizado é uma questão de 1) conectar entradas de mouse/teclado/gamepad 2) enviar uma textura para seu mecanismo de GPU/renderização 3) fornecer uma função de renderização que pode vincular texturas e renderizar triângulos texturizados, que é essencialmente o que Os back-ends estão funcionando. A pasta samples/ é preenchida com aplicativos que fazem exatamente isso: configurar uma janela e usar back-ends. Se você seguir o guia de primeiros passos, em teoria levará menos de uma hora para integrar o Dear ImGui. Não deixe de passar algum tempo lendo as perguntas frequentes, os comentários e os exemplos de aplicativos!
Back-ends/vinculações mantidos oficialmente (no repositório):
Página wiki de backends/vinculações de terceiros:
Página wiki de extensões/widgets úteis:
Consulte também o Wiki para mais links e ideias.
Exemplos de projetos usando Dear ImGui: Tracy (criador de perfil), ImHex (editor hexadecimal/análise de dados), RemedyBG (depurador) e centenas de outros.
Para mais capturas de tela de projetos enviadas por usuários usando Dear ImGui, confira os Tópicos da Galeria!
Para obter uma lista de widgets e extensões de terceiros, verifique a página wiki de Extensões/Widgets Úteis.
Motor personalizado erhe (ramo de acoplamento) | Motor personalizado para Wonder Boy: The Dragon's Trap (2017) |
Mecanismo personalizado (sem título) | Perfilador Tracy (github) |
Consulte: Perguntas frequentes (FAQ), onde perguntas comuns são respondidas.
Veja: Primeiros passos e Wiki para muitos links, referências, artigos.
Veja: Artigos sobre o paradigma IMGUI para ler/aprender sobre o paradigma GUI do Modo Imediato.
Consulte: Próximas mudanças.
Consulte: Caro ImGui Test Engine + Test Suite para automação e testes.
Para fazer com que os mecanismos de pesquisa rastreiem o wiki, aqui está um link para o Wiki rastreável (não para humanos, aqui está o porquê).
Começando? Para usuários iniciantes com problemas para compilar/vincular/executar ou carregar fontes, use Discussões do GitHub. Para QUAISQUER outras perguntas, relatórios de bugs, solicitações, comentários, poste no GitHub Issues. Por favor, leia e preencha o modelo de Nova Edição com atenção.
O suporte privado está disponível para clientes empresariais pagantes (E-mail: contact @ dearimgui ponto com ).
Qual versão devo obter?
Ocasionalmente marcamos lançamentos (com boas notas de lançamento), mas geralmente é seguro e recomendado sincronizar com o master
mais recente ou branch docking
. A biblioteca é bastante estável e as regressões tendem a ser corrigidas rapidamente quando relatadas. Usuários avançados podem querer usar a ramificação docking
com recursos Multi-Viewport e Docking. Este branch é mantido sincronizado com o master regularmente.
Quem usa o Dear ImGui?
Veja as páginas Cotações, Financiamento e Patrocinadores e Software usando Dear ImGui Wiki para ter uma ideia de quem está usando Dear ImGui. Por favor, adicione seu jogo/software, se puder! Além disso, veja os Tópicos da Galeria!
Como posso ajudar?
O desenvolvimento contínuo do Dear ImGui é e tem sido apoiado financeiramente por usuários e patrocinadores privados.
Por favor, consulte a lista detalhada de apoiadores e patrocinadores atuais e anteriores do Dear ImGui para obter detalhes.
De novembro de 2014 a dezembro de 2019, o desenvolvimento contínuo também foi apoiado financeiramente por seus usuários no Patreon e por meio de doações individuais.
OBRIGADO a todos os apoiadores do passado e do presente por ajudarem a manter este projeto vivo e próspero!
Dear ImGui está usando software e serviços fornecidos gratuitamente para projetos de código aberto:
Desenvolvido por Omar Cornut e todos os colaboradores diretos ou indiretos do GitHub. A versão inicial desta biblioteca foi desenvolvida com o apoio da Media Molecule e usada pela primeira vez internamente no jogo Tearaway (PS Vita).
Contribuidores recorrentes incluem Rokas Kupstys @rokups (2020-2022): uma boa parte do trabalho em sistemas de automação e testes de regressão agora disponíveis no Dear ImGui Test Engine.
Contratos de manutenção/suporte, faturas de patrocínio e outras transações B2B são hospedados e administrados pela Disco Hello.
Omar: "Eu descobri o paradigma IMGUI pela primeira vez na Q-Games, onde Atman Binstock abandonou sua própria implementação simples na base de código, que passei algum tempo melhorando e pensando. Acontece que Atman foi exposto ao conceito diretamente trabalhando com Casey. Quando mudei para a Media Molecule, reescrevi uma nova biblioteca tentando superar as falhas e limitações da primeira com a qual trabalhei. Ela se tornou esta biblioteca e, desde então, passei uma quantidade excessiva de tempo iterando e. melhorando isso."
Incorpora fonte ProggyClean.ttf de Tristan Grimmer (licença MIT).
Incorpora stb_textedit.h, stb_truetype.h, stb_rect_pack.h por Sean Barrett (domínio público).
Inspiração, feedback e testes para versões iniciais: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. Obrigado também a todos que postam comentários, perguntas e patches no GitHub.
Dear ImGui está licenciado sob a licença MIT, consulte LICENSE.txt para obter mais informações.