Demo mínimo de ImGui en VS2022 (Configuración del entorno)

Requisitos previos

Estamos trabajando en Windows de 64 bits, así que solo tienes que descargar los binarios de Windows 64-bit.

Crear proyecto

Abre VS2022 y crea un «Proyecto vacío C++»

Asigna un nombre al proyecto, por ejemplo ImGuiDemo

Haz clic derecho en el proyecto >>> Propiedades >>> Cambia la configuración a Release x64

Importar archivos

Descomprime los dos archivos descargados, renombra las carpetas imgui y glfw, y cópialas en la raíz del proyecto.

No anides subcarpetas dentro de estos dos directorios; los archivos del proyecto deben estar directamente visibles.

├─ imgui/
│  ├─ backends/
│  ├─ imgui.h, imgui.cpp ...
├─ glfw/
│  ├─ include/GLFW/
│  ├─ lib-vc2022/Lenguaje del código: PHP (php)

La estructura debe quedar así.

Configuraciones adicionales

Directorios de inclusión adicionales

Clic derecho sobre el proyecto y selecciona Propiedades

Haz clic en Directorios VC++ que aparece en la ventana

Luego accede a General

En Directorios de inclusión pulsa el botón editar

Agrega estas tres líneas:

$(SolutionDir)imgui
$(SolutionDir)imgui\backends
$(SolutionDir)glfw\includeLenguaje del código: JavaScript (javascript)

Directorios de bibliotecas

Mantente en esta pantalla de configuración, busca Directorios de bibliotecas y escribe la ruta de la carpeta lib de GLFW

Agrega la ruta $(SolutionDir)glfw\lib-vc2022

Dependencias lib del enlazador

Enlazador >>> Entrada >>> Dependencias adicionales

glfw3.lib
opengl32.lib
user32.lib
gdi32.lib
shell32.libLenguaje del código: CSS (css)

Agregar código fuente al proyecto

Clic derecho en Archivos de código fuente, Agregar elemento existente y selecciona estos archivos:

imgui/imgui.cpp
imgui/imgui_draw.cpp
imgui/imgui_widgets.cpp
imgui/imgui_tables.cpp
imgui/imgui_demo.cpp
imgui/backends/imgui_impl_glfw.cpp
imgui/backends/imgui_impl_opengl3.cpp

Crear punto de entrada del proyecto

Crea un archivo nuevo main.cpp

#include <GLFW/glfw3.h>
#include "imgui.h"
#include "backends/imgui_impl_glfw.h"
#include "backends/imgui_impl_opengl3.h"
#include <cstdio>

int main()
{
    // Inicializar GLFW
    if (!glfwInit())
    {
        printf("Fallo al inicializar GLFW\n");
        return -1;
    }

    // OpenGL 3.3
    const char* glsl_version = "#version 330";
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // Crear ventana
    GLFWwindow* window = glfwCreateWindow(1000, 600, "ImGui Minimal Demo (VS2022)", nullptr, nullptr);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glfwSwapInterval(1); // Activar VSync

    // Inicializar ImGui
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    ImGui::StyleColorsDark();

    // Conectar backends GLFW + OpenGL3
    ImGui_ImplGlfw_InitForOpenGL(window, true);
    ImGui_ImplOpenGL3_Init(glsl_version);

    // Variables de interfaz
    float slider_value = 0.5f;
    int click_count = 0;
    bool show_full_demo = false;

    // Bucle de renderizado principal
    while (!glfwWindowShouldClose(window))
    {
        glfwPollEvents();

        // Nuevo frame ImGui
        ImGui_ImplOpenGL3_NewFrame();
        ImGui_ImplGlfw_NewFrame();
        ImGui::NewFrame();

        // Panel personalizado
        ImGui::Begin("Panel de control");
        ImGui::Text("Hola ImGui + VS2022");
        ImGui::SliderFloat("Valor del slider", &slider_value, 0.f, 1.f);

        if (ImGui::Button("Pulsa para contar"))
            click_count++;
        ImGui::SameLine();
        ImGui::Text("Clics: %d", click_count);

        ImGui::Checkbox("Mostrar ventana demo completa de ImGui", &show_full_demo);
        ImGui::End();

        if (show_full_demo)
            ImGui::ShowDemoWindow(&show_full_demo);

        // Renderizar ImGui
        ImGui::Render();
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
        glViewport(0, 0, width, height);
        glClearColor(0.12f, 0.12f, 0.12f, 1.f);
        glClear(GL_COLOR_BUFFER_BIT);
        ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());

        glfwSwapBuffers(window);
    }

    // Liberar recursos
    ImGui_ImplOpenGL3_Shutdown();
    ImGui_ImplGlfw_Shutdown();
    ImGui::DestroyContext();
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}Lenguaje del código: C++ (cpp)

Si aparecen rayas rojas como en la imagen superior, el error viene de la configuración incorrecta de los directorios de inclusión.

Nuestra ruta completa es D:\Demos\ImGuiDemo\ImGuiDemo: las carpetas imgui y glfw están dentro de este subdirectorio ImGuiDemo que no tuvimos en cuenta al configurar. Esto depende de cómo crees tu proyecto en VS, revisa si tienes una carpeta intermedia extra.

Modifica los directorios de inclusión:

$(SolutionDir)ImGuiDemo\imgui
$(SolutionDir)ImGuiDemo\imgui\backends
$(SolutionDir)ImGuiDemo\glfw\includeLenguaje del código: JavaScript (javascript)

Tras guardar los cambios, las líneas rojas desaparecen.

Pulsa el botón Ejecutar de la parte superior

Si aparece el error cannot open file ‘glfw3.lib’:

La causa es la misma del fallo anterior: las rutas de las librerías GLFW están mal definidas. Agrega el prefijo ImGuiDemo\ a las rutas configuradas antes.

Actualiza la ruta de librerías:

$(SolutionDir)ImGuiDemo\glfw\lib-vc2022Lenguaje del código: JavaScript (javascript)

Vuelve a ejecutar el programa

Listo, este es nuestro primer ejemplo funcional completo: desde descargar dependencias hasta ejecutar el código. Puedes repetir todos los pasos por tu cuenta. Más adelante profundizaremos en ImGui.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *