Skip to content

Instantly share code, notes, and snippets.

@malustewart
Created March 2, 2020 20:54
Show Gist options
  • Save malustewart/e23db37d90e66f42f1ea1c2461fd04dd to your computer and use it in GitHub Desktop.
Save malustewart/e23db37d90e66f42f1ea1c2461fd04dd to your computer and use it in GitHub Desktop.
Dear ImGui basic loop pseudocode
int main(int, char**)
{
// ---------- Inicializacion de Allegro. ----------
//config imgui
//config allegro
while (running)
{
// ---------- Obtencion de eventos ----------
ALLEGRO_EVENT ev;
while (al_get_next_event(queue, &ev))
{
ImGui_ImplAllegro5_ProcessEvent(&ev); // Mandar el evento a Dear ImGui para que lo procese
if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
running = false;
if (ev.type == ALLEGRO_EVENT_DISPLAY_RESIZE)
{
ImGui_ImplAllegro5_InvalidateDeviceObjects();
al_acknowledge_resize(display);
ImGui_ImplAllegro5_CreateDeviceObjects();
}
// io.WantCaptureKeyboard devuelve true si el ultimo evento fue de teclado y ademas fue
// usado por el usuario para interactuar con las ventanas de Dear Imgui. Por este motivo,
// sabemos que no estaba dirigido a nuestra aplicacion principal y no debemos mandarselo a
// su dispatcher. Idem para io.WantCaptureMouse y los eventos de mouse
if (!io.WantCaptureKeyboard && !io.WantCaptureMouse)
{
// Dispatch a nuestra aplicacion principal
}
}
// ---------- Inicializacion frame ----------
// Inicio el frame. Se realiza una vez por cada pantalla que dibujo.
ImGui_ImplAllegro5_NewFrame();
ImGui::NewFrame();
// ---------- Widgets y ventanas ----------
//...
// ---------- Rendering ----------
ImGui::Render(); //No dibuja! Solamente calcula que es lo que tiene que dibujarse
// Puedo usar funciones de dibujo de Allegro ademas de las de
// ImGui.
// Todo lo que dibuje antes de ImGui_ImplAllegro5_RenderDrawData
// va a quedar detras de las ventanas de DearImGui, y todo lo
// que dibuje despues va a quedar encima de las ventanas de
// DearImGui.
al_clear_to_color(al_map_rgba_f(1,1,0.8,1)); //Va a quedar detras de las ventanas
ImGui_ImplAllegro5_RenderDrawData(ImGui::GetDrawData()); //Dibuja las ventanas, pero no hace al_flip_display()
//Todo lo que dibuje aca va a quedar por encima de las ventanas de DearImGui
al_flip_display(); //DearImGui nunca hace al_flip_display()
}
// ---------- Cleanup final ----------
ImGui_ImplAllegro5_Shutdown();
ImGui::DestroyContext();
// Cleanup de allegro (shutdown addons, etc.)
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment