Allegro 5 example: main.cpp matches other examples. added window title.

This commit is contained in:
ocornut 2015-07-08 11:46:18 -06:00
parent 1845ff4690
commit 489e28ec11
4 changed files with 88 additions and 74 deletions

View File

@ -4,11 +4,10 @@ I choose to provide Visual Studio 10 .sln files and Makefile for Linux/OSX.
Please let me know if they don't work with your setup! Please let me know if they don't work with your setup!
You can probably just import the .cpp files into your own system and figure out the linkage from there. You can probably just import the .cpp files into your own system and figure out the linkage from there.
opengl_example/ opengl_example/
OpenGL example, using GLFW + fixed pipeline. OpenGL example, using GLFW + fixed pipeline.
This is simple and should work for all OpenGL enabled applications. This is simple and should work for all OpenGL enabled applications.
Prefer following this example since it is the shortest one! Prefer following this example to learn how ImGui works, because it is the simplest shortest one!
opengl3_example/ opengl3_example/
OpenGL example, using GLFW/GL3W + programmable pipeline. OpenGL example, using GLFW/GL3W + programmable pipeline.
@ -28,3 +27,6 @@ ios_example/
sdl_opengl_example/ sdl_opengl_example/
SDL2 + OpenGL example. SDL2 + OpenGL example.
allegro5_example/
Allegro 5 example.

View File

@ -1,7 +1,6 @@
// ImGui Allegro 5 bindings // ImGui Allegro 5 bindings
// by @birthggd
// public domain
// https://github.com/ocornut/imgui // https://github.com/ocornut/imgui
// by @birthggd, public domain
#include <stdint.h> // uint64_t #include <stdint.h> // uint64_t
#include <cstring> // memcpy #include <cstring> // memcpy

View File

@ -1,16 +1,18 @@
// public domain // ImGui Allegro 5 bindings
// https://github.com/ocornut/imgui
// by @birthggd, public domain
#pragma once #pragma once
struct ALLEGRO_DISPLAY; struct ALLEGRO_DISPLAY;
union ALLEGRO_EVENT; union ALLEGRO_EVENT;
bool ImGui_ImplA5_Init(ALLEGRO_DISPLAY *disp); bool ImGui_ImplA5_Init(ALLEGRO_DISPLAY* display);
void ImGui_ImplA5_ProcessEvent(ALLEGRO_EVENT *ev); void ImGui_ImplA5_Shutdown();
void ImGui_ImplA5_Shutdown(); void ImGui_ImplA5_NewFrame();
void ImGui_ImplA5_NewFrame(); void ImGui_ImplA5_ProcessEvent(ALLEGRO_EVENT* event);
bool Imgui_ImplA5_CreateDeviceObjects();
void ImGui_ImplA5_InvalidateDeviceObjects();
// Use if you want to reset your rendering device without losing ImGui state.
bool Imgui_ImplA5_CreateDeviceObjects();
void ImGui_ImplA5_InvalidateDeviceObjects();

View File

@ -1,3 +1,4 @@
// ImGui - standalone example application for Allegro 5
// public domain // public domain
#include <stdint.h> #include <stdint.h>
@ -6,75 +7,85 @@
#include <imgui.h> #include <imgui.h>
#include "imgui_impl_a5.h" #include "imgui_impl_a5.h"
int main(int argc, char **argv) int main(int, char**)
{ {
ALLEGRO_DISPLAY *disp; // Setup Allegro
ALLEGRO_EVENT_QUEUE *queue; al_init();
al_install_keyboard();
al_install_mouse();
al_init_primitives_addon();
ALLEGRO_DISPLAY* display = al_create_display(1280, 720);
al_set_window_title(display, "ImGui Allegro 5 example");
ALLEGRO_EVENT_QUEUE* queue = al_create_event_queue();
al_register_event_source(queue, al_get_display_event_source(display));
al_register_event_source(queue, al_get_keyboard_event_source());
al_register_event_source(queue, al_get_mouse_event_source());
al_init(); // Setup ImGui binding
al_install_keyboard(); ImGui_ImplA5_Init(display);
al_install_mouse(); //ImGuiIO& io = ImGui::GetIO();
//ImFont* my_font0 = io.Fonts->AddFontDefault();
//ImFont* my_font1 = io.Fonts->AddFontFromFileTTF("../../extra_fonts/DroidSans.ttf", 16.0f);
//ImFont* my_font2 = io.Fonts->AddFontFromFileTTF("../../extra_fonts/Karla-Regular.ttf", 16.0f);
//ImFont* my_font3 = io.Fonts->AddFontFromFileTTF("../../extra_fonts/ProggyClean.ttf", 13.0f); my_font3->DisplayOffset.y += 1;
//ImFont* my_font4 = io.Fonts->AddFontFromFileTTF("../../extra_fonts/ProggyTiny.ttf", 10.0f); my_font4->DisplayOffset.y += 1;
//ImFont* my_font5 = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, io.Fonts->GetGlyphRangesJapanese());
al_init_primitives_addon(); bool show_test_window = true;
bool show_another_window = false;
//al_set_new_display_option(ALLEGRO_VSYNC, 1, ALLEGRO_DONTCARE); ImVec4 clear_color = ImColor(114, 144, 154);
disp = al_create_display(1280, 800);
queue = al_create_event_queue();
al_register_event_source(queue, al_get_display_event_source(disp));
al_register_event_source(queue, al_get_keyboard_event_source());
al_register_event_source(queue, al_get_mouse_event_source());
ImGui_ImplA5_Init(disp);
bool show_test_window = true;
bool show_another_window = false;
ImVec4 clear_color = ImColor(114, 144, 154);
bool running = true;
while (running) {
ALLEGRO_EVENT ev;
while (al_get_next_event(queue, &ev)) {
ImGui_ImplA5_ProcessEvent(&ev);
if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) running = false;
}
ImGui_ImplA5_NewFrame();
// Main loop
bool running = true;
while (running)
{ {
static float f; ALLEGRO_EVENT ev;
ImGui::Text("Hello, world!"); while (al_get_next_event(queue, &ev))
ImGui::SliderFloat("float", &f, 0.0f, 1.0f); {
ImGui::ColorEdit3("clear color", (float*)&clear_color); ImGui_ImplA5_ProcessEvent(&ev);
if (ImGui::Button("Test Window")) show_test_window ^= 1; if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) running = false;
if (ImGui::Button("Another Window")) show_another_window ^= 1; }
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f/ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui_ImplA5_NewFrame();
// 1. Show a simple window
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
{
static float f;
ImGui::Text("Hello, world!");
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
ImGui::ColorEdit3("clear color", (float*)&clear_color);
if (ImGui::Button("Test Window")) show_test_window ^= 1;
if (ImGui::Button("Another Window")) show_another_window ^= 1;
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f/ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
}
// 2. Show another simple window, this time using an explicit Begin/End pair
if (show_another_window)
{
ImGui::SetNextWindowSize(ImVec2(200, 100), ImGuiSetCond_FirstUseEver);
ImGui::Begin("Another Window", &show_another_window);
ImGui::Text("Hello");
ImGui::End();
}
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow()
if (show_test_window)
{
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiSetCond_FirstUseEver);
ImGui::ShowTestWindow(&show_test_window);
}
// Rendering
al_clear_to_color(al_map_rgba_f(clear_color.x, clear_color.y, clear_color.z, clear_color.w));
ImGui::Render();
al_flip_display();
} }
if (show_another_window) { // Cleanup
ImGui::SetNextWindowSize(ImVec2(200, 100), ImGuiSetCond_FirstUseEver); ImGui_ImplA5_Shutdown();
ImGui::Begin("Another Window", &show_another_window); al_destroy_event_queue(queue);
ImGui::Text("Hello"); al_destroy_display(display);
ImGui::End();
}
if (show_test_window) { return 0;
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiSetCond_FirstUseEver);
ImGui::ShowTestWindow(&show_test_window);
}
al_clear_to_color(al_map_rgba_f(clear_color.x, clear_color.y, clear_color.z, clear_color.w));
ImGui::Render();
al_flip_display();
}
ImGui_ImplA5_Shutdown();
al_destroy_event_queue(queue);
al_destroy_display(disp);
return 0;
} }