Created
March 2, 2020 20:54
-
-
Save malustewart/e23db37d90e66f42f1ea1c2461fd04dd to your computer and use it in GitHub Desktop.
Dear ImGui basic loop pseudocode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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