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();
    }
}