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