Advertisement
atm959

Laul

Feb 9th, 2021
980
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1.     unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
  2.     unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  3.  
  4.     FILE* vertexFile;
  5.     FILE* fragmentFile;
  6.     fopen_s(&vertexFile, vertexFilePath.c_str(), "r");
  7.     fopen_s(&fragmentFile, fragmentFilePath.c_str(), "r");
  8.  
  9.     std::string vertexShaderCode = "";
  10.     std::string fragmentShaderCode = "";
  11.  
  12.     if(vertexFile && fragmentFile) {
  13.         char cV = fgetc(vertexFile);
  14.         while(cV != EOF) {
  15.             vertexShaderCode += cV;
  16.             cV = fgetc(vertexFile);
  17.         }
  18.         char cF = fgetc(fragmentFile);
  19.         while(cF != EOF) {
  20.             fragmentShaderCode += cF;
  21.             cF = fgetc(fragmentFile);
  22.         }
  23.         fclose(vertexFile);
  24.         fclose(fragmentFile);
  25.  
  26.         const char* vertexShaderCodeCStr = vertexShaderCode.c_str();
  27.         const char* fragmentShaderCodeCStr = fragmentShaderCode.c_str();
  28.         glShaderSource(vertexShader, 1, &vertexShaderCodeCStr, NULL);
  29.         glShaderSource(fragmentShader, 1, &fragmentShaderCodeCStr, NULL);
  30.  
  31.         glCompileShader(vertexShader);
  32.         GLint vertexSuccess = 0;
  33.         glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vertexSuccess);
  34.         if(!vertexSuccess) {
  35.             GLint infoLogLength = 0;
  36.             glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &infoLogLength);
  37.  
  38.             std::vector<GLchar> errorLog(infoLogLength);
  39.             glGetShaderInfoLog(vertexShader, infoLogLength, &infoLogLength, &errorLog[0]);
  40.  
  41.             printf("VERTEX SHADER COMPILE ERROR (%s):\n%s\n", vertexFilePath.c_str(), &errorLog[0]);
  42.         }
  43.         glCompileShader(fragmentShader);
  44.         GLint fragmentSuccess = 0;
  45.         glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &fragmentSuccess);
  46.         if(!fragmentSuccess) {
  47.             GLint infoLogLength = 0;
  48.             glGetShaderiv(fragmentShader, GL_INFO_LOG_LENGTH, &infoLogLength);
  49.  
  50.             std::vector<GLchar> errorLog(infoLogLength);
  51.             glGetShaderInfoLog(fragmentShader, infoLogLength, &infoLogLength, &errorLog[0]);
  52.  
  53.             printf("FRAGMENT SHADER COMPILE ERROR (%s):\n%s\n", fragmentFilePath.c_str(), &errorLog[0]);
  54.         }
  55.  
  56.         this->program = glCreateProgram();
  57.         glAttachShader(this->program, vertexShader);
  58.         glAttachShader(this->program, fragmentShader);
  59.  
  60.         glLinkProgram(this->program);
  61.         GLint linkSuccess = 0;
  62.         glGetProgramiv(this->program, GL_LINK_STATUS, &linkSuccess);
  63.         if(!linkSuccess) {
  64.             GLint infoLogLength = 0;
  65.             glGetProgramiv(this->program, GL_INFO_LOG_LENGTH, &infoLogLength);
  66.  
  67.             std::vector<GLchar> errorLog(infoLogLength);
  68.             glGetProgramInfoLog(this->program, infoLogLength, &infoLogLength, &errorLog[0]);
  69.  
  70.             printf("PROGRAM LINK ERROR:\n%s\n", &errorLog[0]);
  71.         }
  72.     } else {
  73.         if(!vertexFile) {
  74.             printf("Shader(Vertex): %s couldn't be opened!\n", vertexFilePath.c_str());
  75.         } else {
  76.             fclose(vertexFile);
  77.         }
  78.         if(!fragmentFile) {
  79.             printf("Shader(Fragment): %s couldn't be opened!\n", fragmentFilePath.c_str());
  80.         } else {
  81.             fclose(fragmentFile);
  82.         }
  83.     }
  84.  
  85.     glDeleteShader(vertexShader);
  86.     glDeleteShader(fragmentShader);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement