@ -18,7 +18,6 @@
// Emscripten requires to have full control over the main loop. We're going to store our SDL book-keeping variables globally.
// Having a single function that acts as a loop prevents us to store state in the stack of said function. So we need some location for this.
SDL_Window * g_Window = NULL ;
SDL_GLContext g_GLContext = NULL ;
// For clarity, our main loop code is declared at the end.
static void main_loop ( void * ) ;
@ -49,13 +48,14 @@ int main(int, char**)
SDL_DisplayMode current ;
SDL_GetCurrentDisplayMode ( 0 , & current ) ;
SDL_WindowFlags window_flags = ( SDL_WindowFlags ) ( SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI ) ;
g_W indow = SDL_CreateWindow ( " Dear ImGui SDL+Emscripten example " , SDL_WINDOWPOS_CENTERED , SDL_WINDOWPOS_CENTERED , 1280 , 720 , window_flags ) ;
g_GLC ontext = SDL_GL_CreateContext ( g_W indow) ;
if ( ! g_GLC ontext )
SDL_Window * w indow = SDL_CreateWindow ( " Dear ImGui SDL+Emscripten example " , SDL_WINDOWPOS_CENTERED , SDL_WINDOWPOS_CENTERED , 1280 , 720 , window_flags ) ;
SDL_GLContext gl_c ontext = SDL_GL_CreateContext ( w indow) ;
if ( ! gl_c ontext )
{
fprintf ( stderr , " Failed to initialize Web GL context! \n " ) ;
fprintf ( stderr , " Failed to initialize GL context! \n " ) ;
return 1 ;
}
SDL_GL_MakeCurrent ( window , gl_context ) ;
SDL_GL_SetSwapInterval ( 1 ) ; // Enable vsync
// Setup Dear ImGui context
@ -74,7 +74,7 @@ int main(int, char**)
//ImGui::StyleColorsLight();
// Setup Platform/Renderer backends
ImGui_ImplSDL2_InitForOpenGL ( g_Window , g_GLC ontext) ;
ImGui_ImplSDL2_InitForOpenGL ( window , gl_c ontext) ;
ImGui_ImplOpenGL3_Init ( glsl_version ) ;
// Load Fonts
@ -98,6 +98,7 @@ int main(int, char**)
# endif
// This function call won't return, and will engage in an infinite loop, processing events from the browser, and dispatching them.
g_Window = window ;
emscripten_set_main_loop_arg ( main_loop , NULL , 0 , true ) ;
}
@ -137,16 +138,16 @@ static void main_loop(void* arg)
static float f = 0.0f ;
static int counter = 0 ;
ImGui : : Begin ( " Hello, world! " ) ; // Create a window called "Hello, world!" and append into it.
ImGui : : Begin ( " Hello, world! " ) ; // Create a window called "Hello, world!" and append into it.
ImGui : : Text ( " This is some useful text. " ) ; // Display some text (you can use a format strings too)
ImGui : : Checkbox ( " Demo Window " , & show_demo_window ) ; // Edit bools storing our window open/close state
ImGui : : Text ( " This is some useful text. " ) ; // Display some text (you can use a format strings too)
ImGui : : Checkbox ( " Demo Window " , & show_demo_window ) ; // Edit bools storing our window open/close state
ImGui : : Checkbox ( " Another Window " , & show_another_window ) ;
ImGui : : SliderFloat ( " float " , & f , 0.0f , 1.0f ) ; // Edit 1 float using a slider from 0.0f to 1.0f
ImGui : : ColorEdit3 ( " clear color " , ( float * ) & clear_color ) ; // Edit 3 floats representing a color
ImGui : : SliderFloat ( " float " , & f , 0.0f , 1.0f ) ; // Edit 1 float using a slider from 0.0f to 1.0f
ImGui : : ColorEdit3 ( " clear color " , ( float * ) & clear_color ) ; // Edit 3 floats representing a color
if ( ImGui : : Button ( " Button " ) ) // Buttons return true when clicked (most widgets return true when edited/activated)
if ( ImGui : : Button ( " Button " ) ) // Buttons return true when clicked (most widgets return true when edited/activated)
counter + + ;
ImGui : : SameLine ( ) ;
ImGui : : Text ( " counter = %d " , counter ) ;
@ -158,7 +159,7 @@ static void main_loop(void* arg)
// 3. Show another simple window.
if ( show_another_window )
{
ImGui : : Begin ( " Another Window " , & show_another_window ) ; // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked)
ImGui : : Begin ( " Another Window " , & show_another_window ) ; // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked)
ImGui : : Text ( " Hello from another window! " ) ;
if ( ImGui : : Button ( " Close Me " ) )
show_another_window = false ;
@ -167,7 +168,6 @@ static void main_loop(void* arg)
// Rendering
ImGui : : Render ( ) ;
SDL_GL_MakeCurrent ( g_Window , g_GLContext ) ;
glViewport ( 0 , 0 , ( int ) io . DisplaySize . x , ( int ) io . DisplaySize . y ) ;
glClearColor ( clear_color . x * clear_color . w , clear_color . y * clear_color . w , clear_color . z * clear_color . w , clear_color . w ) ;
glClear ( GL_COLOR_BUFFER_BIT ) ;