First commit.
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
|
||||
add_executable(is3r-basics is3r-basics.cpp)
|
||||
target_link_libraries(is3r-basics PRIVATE hdk-is3r)
|
||||
@@ -0,0 +1,105 @@
|
||||
#include <hdk/sdl.hpp>
|
||||
#include <imgui.h>
|
||||
#include <hdk/sdl/main.hpp>
|
||||
|
||||
#include "hdk/is3r.hpp"
|
||||
|
||||
namespace simui_example {
|
||||
using namespace hdk;
|
||||
|
||||
class SimGuiApp : public is3r::Is3rApp {
|
||||
public:
|
||||
grid::eps::TapScope taps;
|
||||
const sdl::evt::EventConduit::Callback_t LOG_EVENT = [&](SDL_Event* event) {
|
||||
auto description = sdl::Event::GetDescription<1024>(event);
|
||||
AppLog.Debug("Event received: %s", description.c_str());
|
||||
};
|
||||
|
||||
sdl::Window window { nullptr };
|
||||
sdl::Renderer renderer { nullptr };
|
||||
sdl::Surface surface { nullptr };
|
||||
sdl::Texture texture { nullptr };
|
||||
|
||||
float main_scale = 1.0f;
|
||||
ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
|
||||
|
||||
void InitIMUI() {
|
||||
// Setup Dear ImGui context
|
||||
IMGUI_CHECKVERSION();
|
||||
ImGui::CreateContext();
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
(void)io;
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
|
||||
|
||||
// Setup Dear ImGui style
|
||||
ImGui::StyleColorsDark();
|
||||
// ImGui::StyleColorsLight();
|
||||
|
||||
// Setup scaling
|
||||
ImGuiStyle& style = ImGui::GetStyle();
|
||||
style.ScaleAllSizes(main_scale); // Bake a fixed style scale. (until we have a solution for dynamic style
|
||||
// scaling, changing this requires resetting Style + calling this again)
|
||||
style.FontScaleDpi
|
||||
= main_scale; // Set initial font scale. (in docking branch: using io.ConfigDpiScaleFonts=true automatically
|
||||
// overrides this for every window depending on the current monitor)
|
||||
|
||||
// Setup Platform/Renderer backends
|
||||
ImGui_ImplSDL3_InitForSDLRenderer(window, renderer);
|
||||
ImGui_ImplSDLRenderer3_Init(renderer);
|
||||
}
|
||||
|
||||
virtual SDL_AppResult Init(int argc, char* argv[]) override {
|
||||
SDL_SetAppMetadata("SimGui Example", "0.0.1", "institute.ufp.hdk.simui.examples.simgui");
|
||||
sdl::Log::SetPriorities(SDL_LOG_PRIORITY_DEBUG);
|
||||
auto [w, r] = sdl::CreateWindowAndRenderer("SimGui Example", 800, 600, 0);
|
||||
window = w;
|
||||
renderer = r;
|
||||
if (!window || !renderer) {
|
||||
SDL_Log("Failed to create window or renderer: %s", SDL_GetError());
|
||||
return AppStatus = SDL_APP_FAILURE;
|
||||
}
|
||||
InitIMUI();
|
||||
|
||||
taps << events.Quit.Attach([&](SDL_Event* event) {
|
||||
AppStatus = SDL_APP_SUCCESS;
|
||||
printf("Quit event received, exiting...\n");
|
||||
});
|
||||
|
||||
return AppStatus;
|
||||
}
|
||||
|
||||
virtual SDL_AppResult Iterate() override {
|
||||
|
||||
// Start the Dear ImGui frame
|
||||
ImGui_ImplSDLRenderer3_NewFrame();
|
||||
ImGui_ImplSDL3_NewFrame();
|
||||
ImGui::NewFrame();
|
||||
{
|
||||
ImGui::Begin("ImGUI SDL Renderer Basics Example");
|
||||
ImGui::Text("Hello, world!");
|
||||
ImGui::Button("Quit") && (AppStatus = SDL_APP_SUCCESS);
|
||||
ImGui::ColorEdit3("clear color", (float*)&clear_color);
|
||||
ImGui::End();
|
||||
}
|
||||
ImGui::Render();
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
renderer.SetScale(io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
|
||||
renderer.SetDrawColorFloat(clear_color.x, clear_color.y, clear_color.z, clear_color.w);
|
||||
renderer.Clear();
|
||||
ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), renderer);
|
||||
renderer.Present();
|
||||
return AppStatus;
|
||||
}
|
||||
|
||||
virtual void Quit(SDL_AppResult code) override {
|
||||
ImGui_ImplSDLRenderer3_Shutdown();
|
||||
ImGui_ImplSDL3_Shutdown();
|
||||
ImGui::DestroyContext();
|
||||
renderer = nullptr;
|
||||
window = nullptr;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
HDK_SDL_MAIN_CLASS(simui_example::SimGuiApp)
|
||||
Reference in New Issue
Block a user