Пример #1
0
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;
}
Пример #2
0
	/* 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;
	}