IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

SDL2, Glad et ImGui: problème d'affichage


Sujet :

SDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Mathématiques
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Mathématiques
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Par défaut SDL2, Glad et ImGui: problème d'affichage
    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();
        }
    }

  2. #2
    Candidat au Club
    Homme Profil pro
    Mathématiques
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Mathématiques
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Par défaut
    En passant ce code est tirer de l'exemple de Imgui, sdl2 et opengl3 du depôt

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 115
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    // 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");
    Est-ce que c'est le même contexte ou bien deux contextes séparés ? J'aurais pensé que la SDL 2 vous fournit l'accès à OpenGL, du coup, pas besoin de faire un init d'OpenGL, c'est déjà fait ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [SDL 2.0] Problème d'affichage (Animation Tile SDL2)
    Par Jeano81 dans le forum SDL
    Réponses: 8
    Dernier message: 24/09/2015, 13h07
  2. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59
  3. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo