Learn · concepts

O que é ImGui? ImGui Explicado

ImGui (Dear ImGui) é uma biblioteca de interface gráfica imediata para C++. Ela desenha menus a cada frame sem uma árvore de widgets retida, comum em ferramentas de jogos e clientes nativos.

TRtrolPublished 5 min read

O que é ImGui?

ImGui, abreviação de Dear ImGui, é uma pequena biblioteca de GUI de modo imediato para C++. Ela desenha um menu novo a cada frame a partir de chamadas de função simples, em vez de manter uma árvore de objetos de widget. Isso a torna rápida de configurar e fácil de adicionar em cima do loop de renderização existente de um jogo, o que é o motivo pelo qual ferramentas e clientes nativos a utilizam para sobreposições de baixa latência.

A principal ideia é o "modo imediato": em vez de criar um objeto Button e armazená-lo, você chama uma função que diz "desenhe um botão aqui", e essa chamada tanto desenha o botão quanto informa se ele foi clicado neste frame.

O que modo imediato significa

ImGui reconstrói a interface a cada frame. Você não cria um objeto de botão e o armazena. Você chama uma função que diz "desenhe um botão aqui", e essa chamada tanto desenha o botão quanto informa se ele foi clicado neste frame.

Um toolkit de modo retido funciona de forma oposta. Ele mantém uma árvore de widgets de longa duração na memória, e você atualiza essa árvore quando o estado muda. O modo imediato troca essa estrutura persistente por código que lê de cima para baixo e vive ao lado do seu próprio estado.

  1. A aplicação executa o loop de frame

    O jogo renderiza um quadro e chama o código da interface do usuário como parte dele.

  2. O código da interface do usuário é executado

    Você chama as funções do ImGui para construir o menu de cima para baixo: botões, sliders, checkboxes.

  3. ImGui desenha e responde

    As funções renderizam os widgets e retornam se foram interagidos neste frame.

  4. O seu código reage

    Você lê os valores de retorno e atualiza seu próprio estado, como chamar do_thing() quando o botão foi clicado neste frame.

Por que ferramentas e clientes o escolhem

ImGui é popular para menus que se sobrepõem a uma cena 3D. As razões são práticas:

  • Baixa latência: ele se conecta a um frame que o programa já renderiza, então o menu reage imediatamente.
  • Pouco código de integração: uma janela e alguns controles são apenas algumas chamadas de função. Não há arquivo de layout e nenhum thread de UI separado para gerenciar.
  • Autocontido: a biblioteca tem poucas dependências e se encaixa em backends gráficos comuns, então não importa um framework pesado.
  • Amigável para depuração: as mesmas chamadas que constroem um menu de lançamento também constroem os painéis descartáveis de depuração que os desenvolvedores usam ao construir uma funcionalidade

Modo imediato vs. modo retido

AspectoModo Imediato (ImGui)Toolkit de modo Retido
Propriedade do estadoSeu código mantém os dadosO toolkit mantém uma árvore de widgets
Trabalho por frameReconstrua a UI a cada frameAtualize a árvore em caso de mudança
Custo de configuraçãoAlgumas chamadas de funçãoMais estrutura inicialmente
Melhor paraSobreposições, ferramentas, menus de jogosAplicativos do estilo de documentos grandes

O modo imediato é ideal para algo que precisa atualizar a cada frame e responder à entrada instantaneamente. O modo retido é melhor para algo que permanece estático na maior parte do tempo e muda raramente

Como se encaixa para um cliente nativo

Um cliente utilitário nativo, construído em C++, frequentemente desenha seu menu com ImGui sobre o frame do jogo. O código do menu é executado dentro do loop de renderização, lê as configurações do próprio cliente e escreve as alterações diretamente de volta. Não há um processo de UI separado, então alternar um recurso é apenas uma chamada de função contra um valor que o cliente já possui.

Este é um padrão em C++. Um mod Fabric escrito em Java alcança sua interface através dos próprios hooks de GUI do jogo, então o ImGui geralmente aparece em clientes que são enviados como código nativo, e não como mods Java.

Perguntas Frequentes