mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-03 17:24:24 +00:00 
			
		
		
		
	Examples: refactor all examples with a MainLoopStep() function, to facilitate use with Emscripten. (#2492, #3699)
Aligned all examples.
This commit is contained in:
		@@ -19,22 +19,95 @@
 | 
			
		||||
#include "imgui_impl_opengl2.h"
 | 
			
		||||
#define GL_SILENCE_DEPRECATION
 | 
			
		||||
#ifdef __APPLE__
 | 
			
		||||
    #include <GLUT/glut.h>
 | 
			
		||||
#include <GLUT/glut.h>
 | 
			
		||||
#else
 | 
			
		||||
    #include <GL/freeglut.h>
 | 
			
		||||
#include <GL/freeglut.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#pragma warning (disable: 4505) // unreferenced local function has been removed
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Forward declarations of helper functions
 | 
			
		||||
void MainLoopStep();
 | 
			
		||||
 | 
			
		||||
// Our state
 | 
			
		||||
static bool show_demo_window = true;
 | 
			
		||||
static bool show_another_window = false;
 | 
			
		||||
static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
 | 
			
		||||
 | 
			
		||||
void my_display_code()
 | 
			
		||||
int main(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
    // Create GLUT window
 | 
			
		||||
    glutInit(&argc, argv);
 | 
			
		||||
#ifdef __FREEGLUT_EXT_H__
 | 
			
		||||
    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
 | 
			
		||||
#endif
 | 
			
		||||
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE);
 | 
			
		||||
    glutInitWindowSize(1280, 720);
 | 
			
		||||
    glutCreateWindow("Dear ImGui GLUT+OpenGL2 Example");
 | 
			
		||||
 | 
			
		||||
    // Setup GLUT display function
 | 
			
		||||
    // We will also call ImGui_ImplGLUT_InstallFuncs() to get all the other functions installed for us,
 | 
			
		||||
    // otherwise it is possible to install our own functions and call the imgui_impl_glut.h functions ourselves.
 | 
			
		||||
    glutDisplayFunc(MainLoopStep);
 | 
			
		||||
 | 
			
		||||
    // Setup Dear ImGui context
 | 
			
		||||
    IMGUI_CHECKVERSION();
 | 
			
		||||
    ImGui::CreateContext();
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO(); (void)io;
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;     // Enable Keyboard Controls
 | 
			
		||||
 | 
			
		||||
    // Setup Dear ImGui style
 | 
			
		||||
    ImGui::StyleColorsDark();
 | 
			
		||||
    //ImGui::StyleColorsLight();
 | 
			
		||||
 | 
			
		||||
    // Setup Platform/Renderer backends
 | 
			
		||||
    // FIXME: Consider reworking this example to install our own GLUT funcs + forward calls ImGui_ImplGLUT_XXX ones, instead of using ImGui_ImplGLUT_InstallFuncs().
 | 
			
		||||
    ImGui_ImplGLUT_Init();
 | 
			
		||||
    ImGui_ImplOpenGL2_Init();
 | 
			
		||||
 | 
			
		||||
    // Install GLUT handlers (glutReshapeFunc(), glutMotionFunc(), glutPassiveMotionFunc(), glutMouseFunc(), glutKeyboardFunc() etc.)
 | 
			
		||||
    // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
 | 
			
		||||
    // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
 | 
			
		||||
    // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
 | 
			
		||||
    // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
 | 
			
		||||
    ImGui_ImplGLUT_InstallFuncs();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Load Fonts
 | 
			
		||||
    // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them.
 | 
			
		||||
    // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple.
 | 
			
		||||
    // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit).
 | 
			
		||||
    // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call.
 | 
			
		||||
    // - Use '#define IMGUI_ENABLE_FREETYPE' in your imconfig file to use Freetype for higher quality font rendering.
 | 
			
		||||
    // - Read 'docs/FONTS.md' for more instructions and details.
 | 
			
		||||
    // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ !
 | 
			
		||||
    //io.Fonts->AddFontDefault();
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeui.ttf", 18.0f);
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f);
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f);
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f);
 | 
			
		||||
    //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese());
 | 
			
		||||
    //IM_ASSERT(font != NULL);
 | 
			
		||||
 | 
			
		||||
    // Main loop
 | 
			
		||||
    glutMainLoop();
 | 
			
		||||
 | 
			
		||||
    // Cleanup
 | 
			
		||||
    ImGui_ImplOpenGL2_Shutdown();
 | 
			
		||||
    ImGui_ImplGLUT_Shutdown();
 | 
			
		||||
    ImGui::DestroyContext();
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainLoopStep()
 | 
			
		||||
{
 | 
			
		||||
    // Start the Dear ImGui frame
 | 
			
		||||
    ImGui_ImplOpenGL2_NewFrame();
 | 
			
		||||
    ImGui_ImplGLUT_NewFrame();
 | 
			
		||||
 | 
			
		||||
    // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!).
 | 
			
		||||
    if (show_demo_window)
 | 
			
		||||
        ImGui::ShowDemoWindow(&show_demo_window);
 | 
			
		||||
@@ -71,15 +144,6 @@ void my_display_code()
 | 
			
		||||
            show_another_window = false;
 | 
			
		||||
        ImGui::End();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void glut_display_func()
 | 
			
		||||
{
 | 
			
		||||
    // Start the Dear ImGui frame
 | 
			
		||||
    ImGui_ImplOpenGL2_NewFrame();
 | 
			
		||||
    ImGui_ImplGLUT_NewFrame();
 | 
			
		||||
 | 
			
		||||
    my_display_code();
 | 
			
		||||
 | 
			
		||||
    // Rendering
 | 
			
		||||
    ImGui::Render();
 | 
			
		||||
@@ -93,66 +157,3 @@ void glut_display_func()
 | 
			
		||||
    glutSwapBuffers();
 | 
			
		||||
    glutPostRedisplay();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
 | 
			
		||||
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
 | 
			
		||||
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
 | 
			
		||||
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
 | 
			
		||||
 | 
			
		||||
int main(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
    // Create GLUT window
 | 
			
		||||
    glutInit(&argc, argv);
 | 
			
		||||
#ifdef __FREEGLUT_EXT_H__
 | 
			
		||||
    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
 | 
			
		||||
#endif
 | 
			
		||||
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE);
 | 
			
		||||
    glutInitWindowSize(1280, 720);
 | 
			
		||||
    glutCreateWindow("Dear ImGui GLUT+OpenGL2 Example");
 | 
			
		||||
 | 
			
		||||
    // Setup GLUT display function
 | 
			
		||||
    // We will also call ImGui_ImplGLUT_InstallFuncs() to get all the other functions installed for us,
 | 
			
		||||
    // otherwise it is possible to install our own functions and call the imgui_impl_glut.h functions ourselves.
 | 
			
		||||
    glutDisplayFunc(glut_display_func);
 | 
			
		||||
 | 
			
		||||
    // Setup Dear ImGui context
 | 
			
		||||
    IMGUI_CHECKVERSION();
 | 
			
		||||
    ImGui::CreateContext();
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO(); (void)io;
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;     // Enable Keyboard Controls
 | 
			
		||||
 | 
			
		||||
    // Setup Dear ImGui style
 | 
			
		||||
    ImGui::StyleColorsDark();
 | 
			
		||||
    //ImGui::StyleColorsLight();
 | 
			
		||||
 | 
			
		||||
    // Setup Platform/Renderer backends
 | 
			
		||||
    // FIXME: Consider reworking this example to install our own GLUT funcs + forward calls ImGui_ImplGLUT_XXX ones, instead of using ImGui_ImplGLUT_InstallFuncs().
 | 
			
		||||
    ImGui_ImplGLUT_Init();
 | 
			
		||||
    ImGui_ImplGLUT_InstallFuncs();
 | 
			
		||||
    ImGui_ImplOpenGL2_Init();
 | 
			
		||||
 | 
			
		||||
    // Load Fonts
 | 
			
		||||
    // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them.
 | 
			
		||||
    // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple.
 | 
			
		||||
    // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit).
 | 
			
		||||
    // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call.
 | 
			
		||||
    // - Use '#define IMGUI_ENABLE_FREETYPE' in your imconfig file to use Freetype for higher quality font rendering.
 | 
			
		||||
    // - Read 'docs/FONTS.md' for more instructions and details.
 | 
			
		||||
    // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ !
 | 
			
		||||
    //io.Fonts->AddFontDefault();
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeui.ttf", 18.0f);
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f);
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f);
 | 
			
		||||
    //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f);
 | 
			
		||||
    //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese());
 | 
			
		||||
    //IM_ASSERT(font != NULL);
 | 
			
		||||
 | 
			
		||||
    glutMainLoop();
 | 
			
		||||
 | 
			
		||||
    // Cleanup
 | 
			
		||||
    ImGui_ImplOpenGL2_Shutdown();
 | 
			
		||||
    ImGui_ImplGLUT_Shutdown();
 | 
			
		||||
    ImGui::DestroyContext();
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user