compile_and_link_program.cpp 950 B

123456789101112131415161718192021222324252627282930313233
  1. #include "compile_and_link_program.h"
  2. #include "compile_shader.h"
  3. #include "report_gl_error.h"
  4. #include <iostream>
  5. #include <cassert>
  6. IGL_INLINE GLuint igl::compile_and_link_program(
  7. const char * v_str, const char * f_str)
  8. {
  9. GLuint vid = compile_shader(GL_VERTEX_SHADER,v_str);
  10. GLuint fid = compile_shader(GL_FRAGMENT_SHADER,f_str);
  11. GLuint prog_id = glCreateProgram();
  12. assert(prog_id != 0 && "Failed to create shader.");
  13. glAttachShader(prog_id,vid);
  14. igl::report_gl_error("glAttachShader (vid): ");
  15. glAttachShader(prog_id,fid);
  16. igl::report_gl_error("glAttachShader (fid): ");
  17. glLinkProgram(prog_id);
  18. igl::report_gl_error("glLinkProgram: ");
  19. GLint status;
  20. glGetProgramiv(prog_id, GL_LINK_STATUS, &status);
  21. if (status != GL_TRUE)
  22. {
  23. char buffer[512];
  24. glGetProgramInfoLog(prog_id, 512, NULL, buffer);
  25. std::cerr << "Linker error: " << std::endl << buffer << std::endl;
  26. prog_id = 0;
  27. }
  28. return prog_id;
  29. }