glh.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /** OpenGL helper functions */
  2. #include "glh.h"
  3. #include "mem.h"
  4. #include "monolog.h"
  5. /*
  6. GLuint glh_shader_make(GLenum type, char * data) {
  7. const GLchar * gldata = (const GLchar *) data;
  8. GLint status;
  9. GLuint shader = glCreateShader(type);
  10. glShaderSource(shader, 1, &gldata, NULL);
  11. glCompileShader(shader);
  12. glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
  13. if (status == GL_FALSE) {
  14. GLint logsize;
  15. const char *typename = "unknown";
  16. GLchar *log;
  17. glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logsize);
  18. log = mem_alloc(logsize);
  19. glGetShaderInfoLog(shader, logsize, NULL, log);
  20. switch(type) {
  21. case GL_VERTEX_SHADER: typename = "vertex"; break;
  22. case GL_GEOMETRY_SHADER: typename = "geometry"; break;
  23. case GL_FRAGMENT_SHADER: typename = "fragment"; break;
  24. }
  25. LOG_ERROR("Compile failure in %s shader:\n%s\n", typename, log);
  26. mem_free(log);
  27. }
  28. return shader;
  29. }
  30. GLuint gl_program_make(GLuint * shaders, int amount) {
  31. GLint status;
  32. int index;
  33. GLuint program = glCreateProgram();
  34. for(index = 0; index < amount; index++) {
  35. glAttachShader(program, shaders[index]);
  36. }
  37. glLinkProgram(program);
  38. glGetProgramiv(program, GL_LINK_STATUS, &status);
  39. if (status == GL_FALSE) {
  40. GLint logsize;
  41. GLchar *log;
  42. glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logsize);
  43. log = mem_alloc(logsize);
  44. glGetProgramInfoLog(program, logsize, NULL, log);
  45. LOG_ERROR("Linker failure: %s\n", log);
  46. mem_free(log);
  47. }
  48. for(index = 0; index < amount; index++) {
  49. glDetachShader(program, shaders[index]);
  50. }
  51. return program;
  52. }
  53. */