-
-
Save envyen/77e6c1daa0dde4e8213ff21de75e56be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ImGui - standalone example application for Glfw + OpenGL 3, using programmable pipeline | |
// If you are new to ImGui, see examples/README.txt and documentation at the top of imgui.cpp. | |
#include <imgui.h> | |
#include "imgui_impl_glfw_gl3.h" | |
#include <stdio.h> | |
#include <GL/gl3w.h> | |
#include <GLFW/glfw3.h> | |
static void error_callback(int error, const char* description) | |
{ | |
fprintf(stderr, "Error %d: %s\n", error, description); | |
} | |
int main(int, char**) | |
{ | |
// Setup window | |
glfwSetErrorCallback(error_callback); | |
if (!glfwInit()) | |
return 1; | |
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | |
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); | |
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | |
#if __APPLE__ | |
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); | |
#endif | |
GLFWwindow* window = glfwCreateWindow(1280, 720, "ImGui OpenGL3 example", NULL, NULL); | |
glfwMakeContextCurrent(window); | |
gl3wInit(); | |
ImGuiContext* ctx1 = ImGui::GetCurrentContext(); | |
// Setup ImGui binding | |
ImGui_ImplGlfwGL3_Init(window, true); | |
GLFWwindow* window2 = glfwCreateWindow(1280, 720, "ImGui OpenGL3 example", NULL, NULL); | |
glfwMakeContextCurrent(window2); | |
gl3wInit(); | |
ImGuiContext* ctx2 = ImGui::CreateContext(); | |
ImGui::SetCurrentContext(ctx2); | |
// Setup ImGui binding | |
ImGui_ImplGlfwGL3_Init(window2, true); | |
// Load Fonts | |
// (there is a default font, this is only if you want to change it. see extra_fonts/README.txt for more details) | |
//ImGuiIO& io = ImGui::GetIO(); | |
//io.Fonts->AddFontDefault(); | |
//io.Fonts->AddFontFromFileTTF("../../extra_fonts/Cousine-Regular.ttf", 15.0f); | |
//io.Fonts->AddFontFromFileTTF("../../extra_fonts/DroidSans.ttf", 16.0f); | |
//io.Fonts->AddFontFromFileTTF("../../extra_fonts/ProggyClean.ttf", 13.0f); | |
//io.Fonts->AddFontFromFileTTF("../../extra_fonts/ProggyTiny.ttf", 10.0f); | |
//io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | |
bool show_test_window = true; | |
bool show_another_window = false; | |
ImVec4 clear_color = ImColor(114, 144, 154); | |
// Main loop | |
while (!glfwWindowShouldClose(window)) | |
{ | |
// -- FIRST WINDOW -- | |
glfwMakeContextCurrent(window); | |
ImGui::SetCurrentContext(ctx1); | |
glfwPollEvents(); | |
ImGui_ImplGlfwGL3_NewFrame(); | |
// 1. Show a simple window | |
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" | |
{ | |
static float f = 0.0f; | |
ImGui::Text("Hello, world!"); | |
ImGui::SliderFloat("float", &f, 0.0f, 1.0f); | |
ImGui::ColorEdit3("clear color", (float*)&clear_color); | |
if (ImGui::Button("Test Window")) show_test_window ^= 1; | |
if (ImGui::Button("Another Window")) show_another_window ^= 1; | |
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); | |
} | |
// 2. Show another simple window, this time using an explicit Begin/End pair | |
if (show_another_window) | |
{ | |
ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiSetCond_FirstUseEver); | |
ImGui::Begin("Another Window", &show_another_window); | |
ImGui::Text("Hello"); | |
ImGui::End(); | |
} | |
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() | |
if (show_test_window) | |
{ | |
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiSetCond_FirstUseEver); | |
ImGui::ShowTestWindow(&show_test_window); | |
} | |
// Rendering | |
int display_w, display_h; | |
glfwGetFramebufferSize(window, &display_w, &display_h); | |
glViewport(0, 0, display_w, display_h); | |
glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); | |
glClear(GL_COLOR_BUFFER_BIT); | |
ImGui::Render(); | |
glfwSwapBuffers(window); | |
// -- SECOND WINDOW -- | |
glfwMakeContextCurrent(window2); | |
ImGui::SetCurrentContext(ctx2); | |
glfwPollEvents(); | |
ImGui_ImplGlfwGL3_NewFrame(); | |
// 1. Show a simple window | |
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" | |
{ | |
static float f = 0.0f; | |
ImGui::Text("Hello, world!"); | |
ImGui::SliderFloat("float", &f, 0.0f, 1.0f); | |
ImGui::ColorEdit3("clear color", (float*)&clear_color); | |
if (ImGui::Button("Test Window")) show_test_window ^= 1; | |
if (ImGui::Button("Another Window")) show_another_window ^= 1; | |
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); | |
} | |
// 2. Show another simple window, this time using an explicit Begin/End pair | |
if (show_another_window) | |
{ | |
ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiSetCond_FirstUseEver); | |
ImGui::Begin("Another Window", &show_another_window); | |
ImGui::Text("Hello"); | |
ImGui::End(); | |
} | |
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() | |
if (show_test_window) | |
{ | |
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiSetCond_FirstUseEver); | |
ImGui::ShowTestWindow(&show_test_window); | |
} | |
// Rendering | |
//int display_w, display_h; | |
glfwGetFramebufferSize(window2, &display_w, &display_h); | |
glViewport(0, 0, display_w, display_h); | |
glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); | |
glClear(GL_COLOR_BUFFER_BIT); | |
ImGui::Render(); | |
glfwSwapBuffers(window2); | |
} | |
// Cleanup | |
ImGui_ImplGlfwGL3_Shutdown(); | |
glfwTerminate(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment