From 72740547d1245a974cee885c1fd8708c5398884d Mon Sep 17 00:00:00 2001 From: PlexSheep Date: Wed, 18 Oct 2023 11:02:08 +0200 Subject: [PATCH] graphics submodule --- CMakeLists.txt | 5 ++-- build.sh | 4 ++- run.sh | 3 ++ src/graphics.cpp | 63 +++++++++++++++++++++++++++++++++++++++++ src/graphics.hpp | 1 + src/main.cpp | 73 ++++++++++++++++-------------------------------- 6 files changed, 96 insertions(+), 53 deletions(-) create mode 100755 run.sh create mode 100644 src/graphics.cpp create mode 100644 src/graphics.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index fbbe1b7..5f57cb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,14 +36,13 @@ find_package(Boost 1.56 REQUIRED COMPONENTS set(EXE_1_NAME loader) file( GLOB EXE_1_SOURCES - src/main.cpp - include/glad/glad.h + src/*.cpp ) set(CMAKE_BINARY_DIR "bin") add_executable(${EXE_1_NAME} ${EXE_1_SOURCES} ${PROJECT_HEADERS} ${PROJECT_SHADERS} ${VENDORS_SOURCES}) -target_link_libraries(${EXE_1_NAME} glfw ${GLAD_LIBRARIES} Boost::program_options) +target_link_libraries(${EXE_1_NAME} glfw Boost::program_options) target_include_directories(${EXE_1_NAME} PRIVATE include) set_target_properties(${EXE_1_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${EXE_1_NAME}) diff --git a/build.sh b/build.sh index e1c71e2..b06c961 100755 --- a/build.sh +++ b/build.sh @@ -3,4 +3,6 @@ set -e flags="-DGLFW_USE_WAYLAND=ON" # compile glfw for wayland instead of X11 cmake $flags . cmake --build . -./bin/loader/loader +echo -e "running the program, passing the given args" +echo -e "========================================" +./run.sh $@ diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..a3aeb31 --- /dev/null +++ b/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -e +./bin/loader/loader $@ diff --git a/src/graphics.cpp b/src/graphics.cpp new file mode 100644 index 0000000..303a0aa --- /dev/null +++ b/src/graphics.cpp @@ -0,0 +1,63 @@ +#include +// glad must be loaded before GLFW +#include + +#include "graphics.hpp" + +#include +#include + +void processInput(GLFWwindow *window) { + // if user presses ESC, close the window + if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) + glfwSetWindowShouldClose(window, true); +} + +void framebuffer_size_callback(GLFWwindow *window, int width, int height) { + glViewport(0, 0, width, height); +} + +int mainWindow() { + /* graphics stuff */ + glfwInit(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + // glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); + + GLFWwindow *window = glfwCreateWindow(800, 600, "Shader Loader", NULL, NULL); + if (window == NULL) { + printf("Failed to create GLFW window\n"); + glfwTerminate(); + return -1; + } + glfwMakeContextCurrent(window); + + if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { + printf("Failed to initialize GLAD\n"); + return -1; + } + + glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); + + float vertices[] = {-0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f}; + + unsigned int VBO; + + glGenBuffers(1, &VBO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + + while (!glfwWindowShouldClose(window)) { + processInput(window); + + glClearColor(0.8f, 0.4f, 0.1f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + + glfwSwapBuffers(window); + glfwPollEvents(); + } + + glfwTerminate(); + return 0; +} diff --git a/src/graphics.hpp b/src/graphics.hpp new file mode 100644 index 0000000..1975dcf --- /dev/null +++ b/src/graphics.hpp @@ -0,0 +1 @@ +int mainWindow(); diff --git a/src/main.cpp b/src/main.cpp index 9ef966a..eab1483 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,65 +1,40 @@ #include -#include -#include #include -#include + +#include "graphics.hpp" namespace po = boost::program_options; -void framebuffer_size_callback(GLFWwindow *window, int width, int height); -void processInput(GLFWwindow *window); - int main(int argc, char **argv) { - glfwInit(); - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - // glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); - GLFWwindow *window = glfwCreateWindow(800, 600, "Shader Loader", NULL, NULL); - if (window == NULL) { - printf("Failed to create GLFW window\n"); - glfwTerminate(); - return -1; + printf("argc:\t\t%d\n", argc); + for (int i = 0; i < argc; i++) { + printf("argv[%d]:\t%s\n", i, argv[i]); } - glfwMakeContextCurrent(window); + std::cout << std::endl; - if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { - printf("Failed to initialize GLAD\n"); - return -1; + po::options_description desc("Allowed options"); + desc.add_options()("help", "produce help message")( + "compression", po::value(), "set compression level"); + + po::variables_map vm; + /* po::store(po::parse_command_line(ac, av, desc), vm); */ + po::notify(vm); + + if (vm.count("help")) { + std::cout << desc << "\n"; + return 1; } - glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); - - float vertices[] = {-0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f}; - - unsigned int VBO; - - glGenBuffers(1, &VBO); - glBindBuffer(GL_ARRAY_BUFFER, VBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - while (!glfwWindowShouldClose(window)) { - processInput(window); - - glClearColor(0.8f, 0.4f, 0.1f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); - - glfwSwapBuffers(window); - glfwPollEvents(); + if (vm.count("compression")) { + std::cout << "Compression level was set to " << vm["compression"].as() + << ".\n"; + } else { + std::cout << "Compression level was not set.\n"; } - glfwTerminate(); - return 0; -} + int result = mainWindow(); -void processInput(GLFWwindow *window) { - // if user presses ESC, close the window - if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) - glfwSetWindowShouldClose(window, true); -} - -void framebuffer_size_callback(GLFWwindow *window, int width, int height) { - glViewport(0, 0, width, height); + return result; }