diff --git a/CMakeLists.txt b/CMakeLists.txt index da7e51d..44bca57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,26 +14,27 @@ include(External/imgui.cmake) include(External/json.cmake) include(External/peglib.cmake) -include_directories(include) +#include_directories(include) enable_testing() add_subdirectory(tc) +add_subdirectory(vis) -add_custom_target(resources DEPENDS resources_output) -add_custom_command( - OUTPUT resources_output - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/res ${CMAKE_CURRENT_BINARY_DIR}/res - COMMENT "Copying Resources") - -add_executable(vis - src/main.cpp - src/gl/debug.hpp - src/gl/shader.hpp - src/gl/buffer.hpp - src/gl/vertexarray.hpp - src/gl/types.hpp) -target_link_libraries(vis glfw glad imgui eigen nlohmann_json) -add_dependencies(vis resources) +#add_custom_target(resources DEPENDS resources_output) +#add_custom_command( +# OUTPUT resources_output +# COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/res ${CMAKE_CURRENT_BINARY_DIR}/res +# COMMENT "Copying Resources") +# +#add_executable(vis +# src/main.cpp +# src/gl/debug.hpp +# src/gl/shader.hpp +# src/gl/buffer.hpp +# src/gl/vertexarray.hpp +# src/gl/types.hpp) +#target_link_libraries(vis glfw glad imgui eigen nlohmann_json) +#add_dependencies(vis resources) #add_executable(serial src/serialtest.cpp) #target_link_libraries(serial eigen nlohmann_json) diff --git a/src/gl/debug.hpp b/src/gl/debug.hpp deleted file mode 100644 index 4bd4ee4..0000000 --- a/src/gl/debug.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#ifndef NDEBUG - -void GLAPIENTRY log_gl_debug_callback( - GLenum source, - GLenum type, - GLuint id, - GLenum severity, - GLsizei length, - const GLchar *message, - const void *userParam -) { - std::string s_source; - switch(type){ - case GL_DEBUG_SOURCE_API: - s_source = "API:"; - case GL_DEBUG_SOURCE_WINDOW_SYSTEM: - s_source = "WINDOW:"; - case GL_DEBUG_SOURCE_SHADER_COMPILER: - s_source = "SHADER:"; - case GL_DEBUG_SOURCE_THIRD_PARTY: - s_source = "3P:"; - case GL_DEBUG_SOURCE_APPLICATION: - s_source = "APP:"; - default: - s_source = ""; - } - - std::string s_type; - switch (type) { - case GL_DEBUG_TYPE_ERROR: - s_type = "ERROR:"; - break; - case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: - s_type = "DEPRECATED:"; - break; - case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: - s_type = "UNDEFINED:"; - break; - case GL_DEBUG_TYPE_PORTABILITY: - s_type = "PORTABILITY:"; - break; - case GL_DEBUG_TYPE_PERFORMANCE: - s_type = "PERFORMANCE:"; - break; - case GL_DEBUG_TYPE_MARKER: - s_type = "MARKER:"; - break; - case GL_DEBUG_TYPE_PUSH_GROUP: - s_type = "PUSH_GROUP:"; - break; - case GL_DEBUG_TYPE_POP_GROUP: - s_type = "POP_GROUP:"; - break; - default: - s_type = ""; - break; - } - - std::string s_severity; - switch (severity) { - case GL_DEBUG_SEVERITY_HIGH: - s_severity = "HIGH:"; - break; - case GL_DEBUG_SEVERITY_MEDIUM: - s_severity = "MED:"; - break; - case GL_DEBUG_SEVERITY_LOW: - s_severity = "LOW:"; - break; - default: - s_severity = "INFO:"; - break; - } - - std::cerr << "GL:" << s_source << s_type << s_severity << " " << message << std::endl; -} - -#endif diff --git a/tc/CMakeLists.txt b/tc/CMakeLists.txt index f7c28c9..aed8e25 100644 --- a/tc/CMakeLists.txt +++ b/tc/CMakeLists.txt @@ -9,7 +9,7 @@ add_library(tc src/groups.cpp src/lang.cpp ) -target_link_libraries(tc PUBLIC peglib::peglib fmt::fmt) +target_link_libraries(tc peglib::peglib fmt::fmt) target_include_directories(tc PUBLIC include) add_library(tc::tc ALIAS tc) diff --git a/vis/CMakeLists.txt b/vis/CMakeLists.txt new file mode 100644 index 0000000..532c309 --- /dev/null +++ b/vis/CMakeLists.txt @@ -0,0 +1,12 @@ +add_executable(vis + src/main.cpp + ) +target_link_libraries(vis + tc::tc + fmt::fmt + glfw + glad + imgui + eigen + nlohmann_json + ) diff --git a/vis/src/debug.hpp b/vis/src/debug.hpp new file mode 100644 index 0000000..41c0c0d --- /dev/null +++ b/vis/src/debug.hpp @@ -0,0 +1,80 @@ +#pragma once + +#ifndef NDEBUG + +void GLAPIENTRY log_gl_debug_callback( + GLenum source, + GLenum type, + GLuint id, + GLenum severity, + GLsizei length, + const GLchar *message, + const void *userParam +) { + std::string s_source; + switch (type) { + case GL_DEBUG_SOURCE_API: + s_source = "API:"; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM: + s_source = "WINDOW:"; + case GL_DEBUG_SOURCE_SHADER_COMPILER: + s_source = "SHADER:"; + case GL_DEBUG_SOURCE_THIRD_PARTY: + s_source = "3P:"; + case GL_DEBUG_SOURCE_APPLICATION: + s_source = "APP:"; + default: + s_source = ""; + } + + std::string s_type; + switch (type) { + case GL_DEBUG_TYPE_ERROR: + s_type = "ERROR:"; + break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: + s_type = "DEPRECATED:"; + break; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: + s_type = "UNDEFINED:"; + break; + case GL_DEBUG_TYPE_PORTABILITY: + s_type = "PORTABILITY:"; + break; + case GL_DEBUG_TYPE_PERFORMANCE: + s_type = "PERFORMANCE:"; + break; + case GL_DEBUG_TYPE_MARKER: + s_type = "MARKER:"; + break; + case GL_DEBUG_TYPE_PUSH_GROUP: + s_type = "PUSH_GROUP:"; + break; + case GL_DEBUG_TYPE_POP_GROUP: + s_type = "POP_GROUP:"; + break; + default: + s_type = ""; + break; + } + + std::string s_severity; + switch (severity) { + case GL_DEBUG_SEVERITY_HIGH: + s_severity = "HIGH:"; + break; + case GL_DEBUG_SEVERITY_MEDIUM: + s_severity = "MED:"; + break; + case GL_DEBUG_SEVERITY_LOW: + s_severity = "LOW:"; + break; + default: + s_severity = "INFO:"; + break; + } + + fmt::print(stderr, "GL:{}{}{} {}", s_source, s_type, s_severity, message); +} + +#endif diff --git a/vis/src/main.cpp b/vis/src/main.cpp new file mode 100644 index 0000000..85dd786 --- /dev/null +++ b/vis/src/main.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include + +#include +#include + +#include "debug.hpp" + +int run(GLFWwindow *window, ImGuiContext *ctx) { + glClearColor(0.1, 0.1, 0.9, 1.0); + + while (!glfwWindowShouldClose(window)) { + glfwPollEvents(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + ImGui_ImplOpenGL3_NewFrame(); + ImGui_ImplGlfw_NewFrame(); + ImGui::NewFrame(); + ImGui::Begin("Hello There!", nullptr, ImGuiWindowFlags_None); + ImGui::Text("General Kenobi."); + ImGui::End(); + ImGui::Render(); + + ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); + glfwSwapBuffers(window); + } + + return EXIT_SUCCESS; +} + +int main() { + if (!glfwInit()) { + fmt::print(stderr, "GLFW : Failed Initialization\n"); + return EXIT_FAILURE; + } + + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + GLFWwindow *window = glfwCreateWindow( + 1280, 720, + "Cosets Visualization", + nullptr, nullptr + ); + + if (!window) { + fmt::print("GLFW : Failed to create window.\n"); + return EXIT_FAILURE; + } + + glfwMakeContextCurrent(window); + glfwSwapInterval(1); + gladLoadGLLoader((GLADloadproc) glfwGetProcAddress); + +#ifndef NDEBUG + glEnable(GL_DEBUG_OUTPUT); + glDebugMessageCallback(log_gl_debug_callback, nullptr); + glDebugMessageControl( + GL_DONT_CARE, GL_DEBUG_TYPE_OTHER, + GL_DEBUG_SEVERITY_NOTIFICATION, + 0, nullptr, GL_FALSE + ); +#endif + + IMGUI_CHECKVERSION(); + ImGuiContext *ctx = ImGui::CreateContext(); + ImGui_ImplGlfw_InitForOpenGL(window, true); + ImGui_ImplOpenGL3_Init("#version 130"); + + int code = EXIT_SUCCESS; + + try { + code = run(window, ctx); + } catch (const std::exception &ex) { + fmt::print(stderr, "{}\n", ex.what()); + code = EXIT_FAILURE; + } + + ImGui_ImplOpenGL3_Shutdown(); + ImGui_ImplGlfw_Shutdown(); + ImGui::DestroyContext(); + + glfwDestroyWindow(window); + glfwTerminate(); + + return code; +}