Shader *ShadersManager::createShader(const unsigned int type, const std::string &fileName) { const std::string str = Files::loadTextFileString(fileName); const char *ptrStr = str.c_str(); GLuint shaderId = mglCreateShader(type); mglShaderSource(shaderId, 1, &ptrStr, nullptr); mglCompileShader(shaderId); GLint isCompiled = 0; mglGetShaderiv(shaderId, GL_COMPILE_STATUS, &isCompiled); if (isCompiled == GL_TRUE) return new Shader(shaderId); GLint len = 0; mglGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &len); char *buf = new char[CAST_SIZE(len) + 1]; mglGetShaderInfoLog(shaderId, len, &len, buf); buf[len] = 0; logger->log("Shader '%s' compilation error: %s", fileName.c_str(), buf); delete [] buf; mglDeleteShader(shaderId); return nullptr; }
Shader::~Shader() { if (mShaderId) mglDeleteShader(mShaderId); }