Advertisement
Kiosani

Small Example of GLSL Shader Implementation

Jul 9th, 2021
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. bool ShaderLoad(GLhandleARB programId, char* shaderSrc, GLenum shaderType)
  2. {
  3. FILE *fp;
  4. GLhandleARB h_shader;
  5. GLcharARB *shader_string;
  6. GLint str_length, maxLength;
  7. GLint isCompiled = GL_FALSE, isLinked = GL_FALSE;
  8. GLcharARB *pInfoLog;
  9.  
  10. // open the file of shader source code
  11. if((fp=fopen(shaderSrc, "r")) == NULL)
  12. {
  13. fprintf(stderr, "Error : Failed to read the OpenGL shader source \"%s\".\n", shaderSrc);
  14. return false;
  15. }
  16.  
  17. // allocate memory for program string and load it.
  18. shader_string = (GLcharARB*) malloc(sizeof(GLcharARB) * 65536);
  19. str_length = (GLint) fread(shader_string, 1, 65536, fp);
  20. fclose(fp);
  21.  
  22. // Create and load shader string.
  23. h_shader = glCreateShader(shaderType);
  24. if(h_shader == 0)
  25. {
  26. fprintf(stderr, "Error : Failed to create OpenGL shader object \"%s\".\n", shaderSrc);
  27. return false;
  28. }
  29. glShaderSource(h_shader, 1, (const GLcharARB**)&shader_string, &str_length);
  30. free(shader_string);
  31.  
  32. // Compile the vertex shader, print out the compiler log message.
  33. glCompileShader(h_shader);
  34.  
  35. // get compile state information
  36. glGetObjectParameterivARB(h_shader, GL_OBJECT_COMPILE_STATUS_ARB, &isCompiled);
  37.  
  38. if(!isCompiled)
  39. {
  40. fprintf(stderr, "Error : Failed to compile OpenGL shader source \"%s\".\n", shaderSrc);
  41. glGetObjectParameterivARB(h_shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &maxLength);
  42. pInfoLog = (GLcharARB *) malloc(maxLength * sizeof(GLcharARB));
  43. glGetInfoLogARB(h_shader, maxLength, &str_length, pInfoLog);
  44. fprintf(stderr, "%s\n", pInfoLog);
  45. free(pInfoLog);
  46. return false;
  47. }
  48. glAttachShader(programId, h_shader);
  49.  
  50. // delete the shader object, since we have attached it with the program object.
  51. glDeleteShader(h_shader);
  52.  
  53. // Link the program and print out the linker log message
  54. glLinkProgram(programId);
  55. glGetObjectParameterivARB(programId, GL_OBJECT_LINK_STATUS_ARB, &isLinked);
  56.  
  57. if(!isLinked)
  58. {
  59. fprintf(stderr, "Error : Failed to link OpenGL shader \"%s\".\n", shaderSrc);
  60. glGetObjectParameterivARB(programId, GL_OBJECT_INFO_LOG_LENGTH_ARB, &maxLength);
  61. pInfoLog = (GLcharARB *) malloc(maxLength * sizeof(GLcharARB));
  62. glGetInfoLogARB(programId, maxLength, &str_length, pInfoLog);
  63. fprintf(stderr, "%s\n", pInfoLog);
  64. free(pInfoLog);
  65. return false;
  66. }
  67.  
  68. return true;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement