2019-03-11 11:11:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// ImGui
  
						 
					
						
							
								
									
										
										
										
											2019-03-11 12:12:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "imgui.h" 
  
						 
					
						
							
								
									
										
										
										
											2019-03-11 11:11:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  "imgui_impl_win32.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "imgui_impl_dx11.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <tchar.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// easy2d
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "easy2d.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								using  namespace  easy2d ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  int  WINDOW_WIDTH  =  1280 ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  int  WINDOW_HEIGHT  =  800 ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								E2D_DECLARE_SMART_PTR ( ImGuiScene ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ImGuiScene  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									:  public  Scene 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  show_demo_window  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  show_another_window  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Color  clear_color  =  Color ( 0.45f ,  0.55f ,  0.6f ,  1.f ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  OnEnter ( )  override 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// 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::StyleColorsClassic();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Setup Platform/Renderer bindings
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplWin32_Init ( Window : : Instance ( ) . GetHandle ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplDX11_Init ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Renderer : : Instance ( ) . GetDeviceResources ( ) - > GetD3DDevice ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Renderer : : Instance ( ) . GetDeviceResources ( ) - > GetD3DDeviceContext ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  OnRender ( )  override 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Start the Dear ImGui frame
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplDX11_NewFrame ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplWin32_NewFrame ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui : : 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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											static  float  f  =  0.0f ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											static  int  counter  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											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 : : 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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ImGui : : Button ( " Button " ) )                             // Buttons return true when clicked (most widgets return true when edited/activated)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												counter + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ImGui : : SameLine ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ImGui : : Text ( " counter = %d " ,  counter ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ImGui : : Text ( " Application average %.3f ms/frame (%.1f FPS) " ,  1000.0f  /  ImGui : : GetIO ( ) . Framerate ,  ImGui : : GetIO ( ) . Framerate ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ImGui : : End ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// 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 : : Text ( " Hello from another window! " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ImGui : : Button ( " Close Me " ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												show_another_window  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ImGui : : End ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Rendering
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui : : Render ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplDX11_RenderDrawData ( ImGui : : GetDrawData ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Renderer : : Instance ( ) . SetClearColor ( clear_color ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  OnExit ( )  override 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplDX11_Shutdown ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui_ImplWin32_Shutdown ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGui : : DestroyContext ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								extern  LRESULT  ImGui_ImplWin32_WndProcHandler ( HWND ,  UINT ,  WPARAM ,  LPARAM ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ImGuiApp  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									:  public  Application 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ImGuiApp ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Options  options ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										options . title  =  L " ImGui Demo " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										options . width  =  WINDOW_WIDTH ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										options . height  =  WINDOW_HEIGHT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										options . clear_color  =  Color ( 0.45f ,  0.55f ,  0.6f ,  1.f ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Init ( options ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										SetPreMessageProc ( ImGui_ImplWin32_WndProcHandler ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  OnStart ( )  override 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGuiScenePtr  scene  =  new  ImGuiScene ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										EnterScene ( scene ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  main ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									try 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ImGuiApp  app ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										app . Run ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									catch  ( std : : exception &  e ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										: : MessageBoxA ( nullptr ,  e . what ( ) ,  " An exception has occurred! " ,  MB_ICONERROR  |  MB_OK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}