DecodeStudios

Untitled

Jul 30th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.25 KB | None | 0 0
  1. #include <GL/glew.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <fstream>
  5. #include <string>
  6. #include <GLFW/glfw3.h>
  7. #include <GL/GL.h>
  8.  
  9. unsigned int g_programId = 0;
  10. unsigned int g_vertexSaderId = 0, g_fragmentShaderId = 0;
  11.  
  12. unsigned int createShader(unsigned int type, const std::string &source)
  13. {
  14.     unsigned int _id = glCreateShader(type);
  15.      
  16.     auto _source = source.c_str();
  17.     glShaderSource(_id, 1, &_source, 0);
  18.  
  19.     glCompileShader(_id);
  20.  
  21.     int _compile = false;
  22.     glGetShaderiv(_id, GL_COMPILE_STATUS, &_compile);
  23.  
  24.     if (_compile == GL_FALSE)
  25.     {
  26.         int _length = 0;
  27.         glGetShaderiv(_id, GL_INFO_LOG_LENGTH, &_length);
  28.  
  29.         std::vector<char> _info(_length);
  30.         glGetShaderInfoLog(_id, _length, &_length, _info.data());
  31.  
  32.         std::cout << std::string(_info.begin(), _info.end()) << std::endl;
  33.  
  34.         glDeleteShader(_id);
  35.  
  36.         return 0;
  37.     }
  38.  
  39.     return _id;
  40. }
  41.  
  42. unsigned int createShaderProgram(const std::string &vertextShaderSource, const std::string &fragmentShaderSource)
  43. {
  44.     g_vertexSaderId = createShader(GL_VERTEX_SHADER, vertextShaderSource);
  45.     g_fragmentShaderId = createShader(GL_FRAGMENT_SHADER, fragmentShaderSource);
  46.  
  47.     if (g_vertexSaderId && g_fragmentShaderId)
  48.     {
  49.         unsigned int _prgramId = glCreateProgram();
  50.  
  51.         glAttachShader(_prgramId, g_vertexSaderId);
  52.         glAttachShader(_prgramId, g_fragmentShaderId);
  53.  
  54.         glLinkProgram(_prgramId);
  55.  
  56.         int _linked = 0;
  57.         glGetProgramiv(_prgramId, GL_LINK_STATUS, &_linked);
  58.  
  59.         if (_linked == GL_FALSE)
  60.         {
  61.             int _length = 0;
  62.             glGetProgramiv(_prgramId, GL_INFO_LOG_LENGTH, &_length);
  63.  
  64.             std::vector<char> _info(_length);
  65.             glGetShaderInfoLog(_prgramId, _length, &_length, _info.data());
  66.  
  67.             std::cout << std::string(_info.begin(), _info.end()) << std::endl;
  68.  
  69.             glDeleteShader(g_vertexSaderId);
  70.             glDeleteShader(g_fragmentShaderId);
  71.  
  72.             return 0;
  73.         }
  74.  
  75.         glDetachShader(_prgramId, g_vertexSaderId);
  76.         glDetachShader(_prgramId, g_fragmentShaderId);
  77.  
  78.         return _prgramId;
  79.     }
  80.  
  81.     return 0;
  82. }
  83.  
  84. void changeDisplayColor()
  85. {
  86.     glClearColor(1.0, 0.0, 0.0, 1.0);
  87.     glClear(GL_COLOR_BUFFER_BIT);
  88. }
  89.  
  90. void init()
  91. {
  92.     std::ifstream file;
  93.     file.open("shaders/frag.glsl");
  94.    
  95.     std::string file_string;
  96.  
  97.     file >> file_string;
  98.     std::cout << "Reading Shader...";
  99.     std::cout << file_string;
  100.  
  101.     std::string _vertexShaderSource = file_string;
  102.     std::string _fragmentShaderSource = "";
  103.  
  104.     g_programId = createShaderProgram(_vertexShaderSource, _fragmentShaderSource);
  105.  
  106.     std::cout << "PROGRAM ID: " << g_programId << std::endl;
  107.  
  108. }
  109.  
  110. int main(void)
  111. {
  112.     GLFWwindow* window;
  113.  
  114.     /* Initialize the library */
  115.     if (!glfwInit())
  116.         return -1;
  117.  
  118.     /* Create a windowed mode window and its OpenGL context */
  119.     window = glfwCreateWindow(1280, 720, "Shader", NULL, NULL);
  120.     if (!window)
  121.     {
  122.         glfwTerminate();
  123.         return -1;
  124.     }
  125.  
  126.     /* Make the window's context current */
  127.     glfwMakeContextCurrent(window);
  128.  
  129.     glewInit();
  130.     init();
  131.  
  132.     /* Loop until the user closes the window */
  133.     while (!glfwWindowShouldClose(window))
  134.     {
  135.         changeDisplayColor();
  136.  
  137.         /* Swap front and back buffers */
  138.         glfwSwapBuffers(window);
  139.  
  140.         /* Poll for and process events */
  141.         glfwPollEvents();
  142.     }
  143.  
  144.     glfwTerminate();
  145.     glDeleteShader(g_vertexSaderId);
  146.     glDeleteShader(g_fragmentShaderId);
  147.     glDeleteProgram(g_programId);
  148.  
  149.     return 0;
  150. }
Add Comment
Please, Sign In to add comment