#include #include #include #include "VoxelGame.h" // ImGui headers (make sure these files are available in your include path) #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" // Initialize GLFW and create a window GLFWwindow* initWindow(int width, int height, const char* title) { if (!glfwInit()) { std::cerr << "Failed to initialize GLFW\n"; return nullptr; } // Request OpenGL 3.3 Core Profile glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow* window = glfwCreateWindow(width, height, title, nullptr, nullptr); if (!window) { std::cerr << "Failed to create GLFW window\n"; glfwTerminate(); return nullptr; } glfwMakeContextCurrent(window); // Initialize GLAD to load OpenGL function pointers if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cerr << "Failed to initialize GLAD\n"; return nullptr; } return window; } int main() { GLFWwindow* window = initWindow(800, 600, "Voxel Game"); if (!window) return -1; // Setup ImGui context IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO &io = ImGui::GetIO(); (void)io; ImGui::StyleColorsDark(); ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init("#version 330"); // Create game instance and initialize it VoxelGame game; if (!game.init()) { std::cerr << "Failed to initialize game\n"; return -1; } // Main loop while (!glfwWindowShouldClose(window)) { glfwPollEvents(); // Update game logic (assume fixed deltaTime for demo) game.update(0.016f); // Start new ImGui frame ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); // Draw debug UI from game game.debugUI(); ImGui::Render(); // Clear the screen glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // Render the voxel game (mesh drawing, etc.) game.render(); // Render ImGui on top ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); glfwSwapBuffers(window); } // Cleanup ImGui and GLFW ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); glfwDestroyWindow(window); glfwTerminate(); return 0; }