Example #1
0
bool Shader::compile()
{
	assert(mId > 0 && "id is null so the shader source should be loaded first!");
	
	glCompileShader(mId);

	// check:
	int compileStatus = GL_TRUE;
	glGetShaderiv(mId, GL_COMPILE_STATUS, &compileStatus);

	if (compileStatus == GL_FALSE)
	{
		LOG_ERROR("Compilation for %s shader failed!", mName.c_str());
		logShaderInfo();
		return false;
	}

	return true;
}
Example #2
0
GLuint createProgram(const GLchar* vertexShaderSource[], const GLchar* fragmentShaderSource[])
{
	// Generate program (empty here, will add shaders to it below)
	GLuint programId = glCreateProgram();

	// Create vertex shader
	GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);

	// Shaders are written in a C-like language called GLSL. Read more at: http://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0


	// Set vertex source
	glShaderSource( vertexShader, 1, vertexShaderSource, NULL );

	// Compile vertex source
	glCompileShader( vertexShader );


	// Check vertex shader for errors
	GLint vShaderCompiled = GL_FALSE;
	glGetShaderiv( vertexShader, GL_COMPILE_STATUS, &vShaderCompiled );
	if( vShaderCompiled != GL_TRUE )
	{
		printf( "Failed to compile vertex shader %d!\n", vertexShader );
		logShaderInfo( vertexShader );
		return -1;
	}

	// Attach vertex shader to program
	glAttachShader( programId, vertexShader );




	// Create fragment shader
	GLuint fragmentShader = glCreateShader( GL_FRAGMENT_SHADER );


	// Set fragment source
	glShaderSource( fragmentShader, 1, fragmentShaderSource, NULL );

	// Compile fragment source
	glCompileShader( fragmentShader );



	// Check fragment shader for errors
	GLint fShaderCompiled = GL_FALSE;
	glGetShaderiv( fragmentShader, GL_COMPILE_STATUS, &fShaderCompiled );
	if( fShaderCompiled != GL_TRUE )
	{
		printf( "Failed to compile fragment shader %d!\n", fragmentShader );
		logShaderInfo( fragmentShader );
		return -1;
	}


	// Attach fragment shader to program
	glAttachShader(programId, fragmentShader);



	// Link program
	glLinkProgram( programId );



	// Check for errors
	GLint programSuccess = GL_TRUE;
	glGetProgramiv(programId, GL_LINK_STATUS, &programSuccess);
	if( programSuccess != GL_TRUE )
	{
		printf( "Error linking program %d!\n", programId );
		logProgramInfo( programId );
		return -1;
	}


	return programId;
}