./vis source tree boilerplate

This commit is contained in:
David Allemang
2022-10-09 21:24:04 -04:00
parent 164d4f6d29
commit f740fb26c6
6 changed files with 201 additions and 97 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

12
vis/CMakeLists.txt Normal file
View File

@@ -0,0 +1,12 @@
add_executable(vis
src/main.cpp
)
target_link_libraries(vis
tc::tc
fmt::fmt
glfw
glad
imgui
eigen
nlohmann_json
)

80
vis/src/debug.hpp Normal file
View File

@@ -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

91
vis/src/main.cpp Normal file
View File

@@ -0,0 +1,91 @@
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <imgui.h>
#include <backends/imgui_impl_glfw.h>
#include <backends/imgui_impl_opengl3.h>
#include <fmt/core.h>
#include <fstream>
#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;
}