A 2D tile-based sandbox game.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

GlProgram.cc 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "GlProgram.h"
  2. #include <iostream>
  3. #include <stdexcept>
  4. namespace Cygnet {
  5. GlShader::GlShader(const char *source, Type type) {
  6. switch (type) {
  7. case Type::VERTEX:
  8. id_ = glCreateShader(GL_VERTEX_SHADER);
  9. break;
  10. case Type::FRAGMENT:
  11. id_ = glCreateShader(GL_FRAGMENT_SHADER);
  12. break;
  13. }
  14. glShaderSource(id_, 1, &source, NULL);
  15. glCompileShader(id_);
  16. char log[4096];
  17. GLsizei length;
  18. glGetShaderInfoLog(id_, sizeof(log), &length, log);
  19. if (length != 0) {
  20. std::cerr << "Shader compile info:\n" << log << '\n';
  21. }
  22. GLint status;
  23. glGetShaderiv(id_, GL_COMPILE_STATUS, &status);
  24. if (status == GL_FALSE) {
  25. id_ = -1;
  26. throw std::runtime_error("GL shader compilation failed.");
  27. }
  28. valid_ = true;
  29. }
  30. GlShader::~GlShader() {
  31. if (valid_) {
  32. glDeleteShader(id_);
  33. }
  34. }
  35. void GlProgram::link() {
  36. std::cout << "link\n";
  37. glLinkProgram(id_);
  38. char log[4096];
  39. GLsizei length;
  40. glGetProgramInfoLog(id_, sizeof(log), &length, log);
  41. if (length != 0) {
  42. std::cerr << "Program link info:\n" << log << '\n';
  43. }
  44. GLint status;
  45. glGetProgramiv(id_, GL_LINK_STATUS, &status);
  46. if (status == GL_FALSE) {
  47. id_ = -1;
  48. throw std::runtime_error("GL program link failed.");
  49. }
  50. valid_ = true;
  51. }
  52. GlProgram::~GlProgram() {
  53. if (valid_) {
  54. glDeleteProgram(id_);
  55. }
  56. }
  57. }