144 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			144 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // ImGui
 | ||
|  | #include "imgui/imgui.h"
 | ||
|  | #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; | ||
|  | } |