bool wrench::gl::Shader::init(GLenum shaderType, const string &filename) { bool shaderCreated = false; if (GLEW_VERSION_2_0) { m_shaderID = glCreateShader(shaderType); const GLchar* shaderSource = _loadShaderSource(filename); if (shaderSource == nullptr) { Logger::logError("Shader source file not found: " + filename); } else { bool shaderCompileFlag = false; glShaderSource(m_shaderID, 1, &shaderSource, 0); glCompileShader(m_shaderID); shaderCompileFlag = _validateShader(m_shaderID, filename); if (!shaderCompileFlag) return false; } if(nullptr != shaderSource) { delete[] shaderSource; } } return shaderCreated; }
/* Initialize a shader * @params name {string} name of the shader * @params type {GLenum} GL_VERTEX_SHADER or GL_FRAGMENT_SHADER * @params filename {const char*} shader source file name * @returns 0 correct result * @returns -1 invalid file name * @returns -2 can't get shader's source from file * @returns -3 shader compile error */ int Shader::init(string name, GLenum type, const char* filename) { if (!filename) { return -1; } mName = name; mType = type; mCompiled = false; // Create OpenGL shader mId = glCreateShader(type); int source, compile; // Load shader source source = _loadShaderSource(filename); // Compile shader if (!source) { // Compile shader glCompileShader(mId); // Get compile state glGetShaderiv(mId, GL_COMPILE_STATUS, &compile); if (compile == GL_FALSE) { _printInfoLog(); return -3; } else { return 0; } } else // Cant not get shader source return -2; }