From c03e86cdd365f64f4464a10d22428e0a4d9a3910 Mon Sep 17 00:00:00 2001 From: allem Date: Mon, 15 Jul 2019 22:55:08 -0400 Subject: [PATCH] basic program working --- CMakeLists.txt | 11 +--- cosets/CMakeLists.txt | 8 +-- cosets/src/main.cpp | 124 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 125 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b1b3e1..7cf1940 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_CXX_STANDARD 17) -add_library(glad vendor/glad/src/glad.c cosets/src/main.cpp) +add_library(glad vendor/glad/src/glad.c) target_include_directories(glad PUBLIC vendor/glad/include) option(GLFW_BUILD_DOCS OFF) @@ -13,13 +13,4 @@ add_subdirectory(vendor/glfw) option(GLM_TEST_ENABLE OFF) add_subdirectory(vendor/glm) -set(BOOST_ROOT vendor/boost) -find_package(Boost REQUIRED COMPONENTS format) - -if (Boost_FOUND) - message('boost found!') -else() - message('boost not found!') -endif () - add_subdirectory(cosets) diff --git a/cosets/CMakeLists.txt b/cosets/CMakeLists.txt index aec3d41..79a4510 100644 --- a/cosets/CMakeLists.txt +++ b/cosets/CMakeLists.txt @@ -3,8 +3,8 @@ project(cosets) add_executable(${PROJECT_NAME} src/main.cpp) -target_include_directories(${PROJECT_NAME} PRIVATE - include) +target_link_libraries(${PROJECT_NAME} + PRIVATE glad glm glfw) -target_link_libraries(${PROJECT_NAME} PRIVATE - glad glm glfw) +target_include_directories(${PROJECT_NAME} + PRIVATE include) diff --git a/cosets/src/main.cpp b/cosets/src/main.cpp index af3849c..0da7e0a 100644 --- a/cosets/src/main.cpp +++ b/cosets/src/main.cpp @@ -1,9 +1,125 @@ -#include +#include +#include + +#include +#include using namespace std; -int main(int argc, char *argv[]) { - cout << "hello, world!\n"; +class Window { +protected: + GLFWwindow *_window = nullptr; - return 0; +public: + virtual void init() {} + + virtual void update() {} + + virtual void render() {} + + virtual void deinit() {} + + void getBounds(int &width, int &height) { + glfwGetFramebufferSize(_window, &width, &height); + } + + void swapbuffers() { + glfwSwapBuffers(_window); + } + + void run() { + int _gl_major = 4, _gl_minor = 0; + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, _gl_major); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, _gl_minor); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + + + _window = glfwCreateWindow(640, 480, "GLFW App", nullptr, nullptr); + if (!_window) { + fprintf(stderr, "Failed to create window;"); + glfwTerminate(); + exit(EXIT_FAILURE); + } + + glfwMakeContextCurrent(_window); + gladLoadGLLoader((GLADloadproc) glfwGetProcAddress); + glfwSwapInterval(0); + + init(); + + while (!glfwWindowShouldClose(_window)) { + update(); + render(); + + glfwPollEvents(); + } + + deinit(); + + glfwDestroyWindow(_window); + } +}; + +class CosetsWindow : public Window { + GLint program; + + GLint build_shader(GLenum type, const string &name, const string &src) { + const char *c_str = src.c_str(); + + auto s = glCreateShader(type); + glShaderSource(s, 1, &c_str, nullptr); + glCompileShader(s); + + GLint stat; + glGetShaderiv(s, GL_COMPILE_STATUS, &stat); + if (!stat) { + GLint log_len; + glGetShaderiv(s, GL_INFO_LOG_LENGTH, &log_len); + char log[log_len]; + glGetShaderInfoLog(s, log_len, nullptr, log); + fprintf(stderr, "SHADER LOG (%s):\n%s", name.c_str(), log); + } + + return s; + } + +public: + void init() override { + auto vs = build_shader(GL_VERTEX_SHADER, "vertex", + "#version 400\n" + "" + "void main(){" + " int" + "}"); + + auto fs = build_shader(GL_FRAGMENT_SHADER, "fragment", + "#version 400\n" + "" + "void main(){" + " int" + "}" + ); + + program = glCreateProgram(); + glAttachShader(program, vs); + glAttachShader(program, fs); + glLinkProgram(program); + } + + void render() override { + + } +}; + +int main(int argc, char *argv[]) { + if (!glfwInit()) { + fprintf(stderr, "Failed to initialize GLFW\n"); + return EXIT_FAILURE; + } + + Window *window = new CosetsWindow(); + window->run(); + + glfwTerminate(); + return EXIT_SUCCESS; } \ No newline at end of file