Bonsoir a tous et toute.
Je travail actuellement sur un moteur de jeu 2D/3D avec la SDL, OpenGL/Vulkan et ImGui.
Je rencontre actuellement des problèmes lorsque j'affiche une fenêtre ImGui.
1- je suis obliger de configurer io.ConfigViewportsNoAutoMerge a true pour afficher une fenetre imgui
2- quand ma fenêtre imgui est afficher elle n'ai pas au dessus de la fenetre SDL2
comment résoudre ces problème merci.
Je vous donne le code de ma classe qui initialise et afficher une fenetre imgui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 namespace nkentseu { OpenGLImGui::OpenGLImGui(){ } void OpenGLImGui::Init() { // 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 io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows //io.ConfigFlags |= ImGuiConfigFlags_ViewportsTopMost; // Enable Top-Most Viewports //io.ConfigWindowsMoveFromTitleBarOnly = true; io.ConfigViewportsNoTaskBarIcon = true; io.ConfigViewportsNoAutoMerge = true; Application& app = Application::Get(); io.DisplaySize = ImVec2((float)app.GetWindow().GetWidth(), (float)app.GetWindow().GetHeight()); // Setup Dear ImGui style ImGui::StyleColorsDark(); //ImGui::StyleColorsLight(); // When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones. ImGuiStyle& style = ImGui::GetStyle(); if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) { style.WindowRounding = 0.0f; style.Colors[ImGuiCol_WindowBg].w = 1.0f; } // Setup Platform/Renderer backends ImGui_ImplSDL2_InitForOpenGL(static_cast<SDL_Window*>(Application::Get().GetWindow().GetNativeWindow()), static_cast<SDL_GLContext>(Application::Get().GetWindow().GetContext())); ImGui_ImplOpenGL3_Init("#version 450"); } void OpenGLImGui::Clear() { // Cleanup ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); } void OpenGLImGui::BeginRender() { // Start the Dear ImGui frame ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplSDL2_NewFrame(static_cast<SDL_Window*>(Application::Get().GetWindow().GetNativeWindow())); ImGui::NewFrame(); } void OpenGLImGui::EndRender() { ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); ImGuiIO& io = ImGui::GetIO(); if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) { ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); } } OpenGLImGui::~OpenGLImGui(){ Clear(); } }
Partager