#include #include // glad must be loaded before GLFW #include "graphics.hpp" #include "main.hpp" #include using namespace std; /* class ShaderProgram Implementations */ string ShaderProgram::baseName() { switch (this->base) { case Empty: return "Empty"; case Triangle: return "Triangle"; default: throw exception(); } } ShaderProgram::ShaderProgram(Base base, char** vertexSource, char** fragSource) { // NOTE: char arrays and char pointers are not actually the same. // glShaderSource requires a char[] as it appears. We pass the // variable by reference to avoid duplication in memory. BOOST_LOG_TRIVIAL(trace) << "creating empty shaders"; this->vertex = glCreateShader(GL_VERTEX_SHADER); this->frag = glCreateShader(GL_FRAGMENT_SHADER); BOOST_LOG_TRIVIAL(trace) << "loading vertex shader"; glShaderSource(this->vertex, 1, vertexSource, NULL); BOOST_LOG_TRIVIAL(trace) << "compiling vertex shader"; glCompileShader(this->vertex); BOOST_LOG_TRIVIAL(trace) << "loading fragments shader"; glShaderSource(this->frag, 2, fragSource, NULL); BOOST_LOG_TRIVIAL(trace) << "compiling fragments shader"; glCompileShader(this->frag); } int ShaderProgram::run() { return 255; } void framebuffer_size_callback(GLFWwindow *window, int width, int height) { glViewport(0, 0, width, height); } int initGl() { /* 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 EXIT_GL; } glfwMakeContextCurrent(window); if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { printf("Failed to initialize GLAD\n"); return EXIT_GL; } glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); return 0; } int mainWindow(ShaderProgram *shaderProgram) { int result = shaderProgram->run(); glfwTerminate(); return result; }