| 89 | )"; |
| 90 | |
| 91 | GLuint LoadShader(GLenum shader_type, const char* shader_source) |
| 92 | { |
| 93 | GLuint shader = glCreateShader(shader_type); |
| 94 | if (!shader) |
| 95 | { |
| 96 | throw std::runtime_error{ "Failed to create shader" }; |
| 97 | } |
| 98 | |
| 99 | glShaderSource(shader, 1, &shader_source, nullptr); |
| 100 | glCompileShader(shader); |
| 101 | GLint compileStatus = GL_FALSE; |
| 102 | glGetShaderiv(shader, GL_COMPILE_STATUS, &compileStatus); |
| 103 | |
| 104 | if (compileStatus != GL_TRUE) |
| 105 | { |
| 106 | GLint infoLogLength = 0; |
| 107 | |
| 108 | glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength); |
| 109 | if (!infoLogLength) |
| 110 | { |
| 111 | throw std::runtime_error{ "Unknown error compiling shader" }; |
| 112 | } |
| 113 | |
| 114 | std::string infoLog; |
| 115 | infoLog.resize(static_cast<size_t>(infoLogLength)); |
| 116 | glGetShaderInfoLog(shader, infoLogLength, nullptr, infoLog.data()); |
| 117 | glDeleteShader(shader); |
| 118 | throw std::runtime_error("Error compiling shader: " + infoLog); |
| 119 | } |
| 120 | |
| 121 | return shader; |
| 122 | } |
| 123 | |
| 124 | GLuint CreateShaderProgram() |
| 125 | { |
no outgoing calls
no test coverage detected