Exemple #1
0
bool GLWrapper::createAndCompileShader(const std::string & shaderSource, GLenum shaderType, GLuint & handle, std::ostream & shaderErrorOutput)
{
	const GLchar * shaderSourcePointer = shaderSource.c_str();
	handle = GLLOG(glCreateShader(shaderType));ERROR_CHECK;
	GLLOG(glShaderSource(handle, 1, &shaderSourcePointer, NULL));ERROR_CHECK;
	GLLOG(glCompileShader(handle));ERROR_CHECK;
	GLint compileStatus(0);
	GLLOG(glGetShaderiv(handle, GL_COMPILE_STATUS, &compileStatus));ERROR_CHECK;

	GLint bufferSize(0);
	GLLOG(glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &bufferSize));ERROR_CHECK;
	GLchar* infoLog = new GLchar[bufferSize+1];
	GLsizei infoLogLength;
	GLLOG(glGetShaderInfoLog(handle, bufferSize, &infoLogLength, infoLog));ERROR_CHECK;
	infoLog[bufferSize] = '\0';
	shaderErrorOutput << infoLog;
	delete[] infoLog;

	if (!compileStatus)
	{
		GLLOG(glDeleteShader(handle));ERROR_CHECK;
		handle = 0;
		return false;
	}
	else
		return true;
}
Exemple #2
0
bool compileShader(GLuint handle, GLenum stype, const char* src) {
	int shader_len = strlen(src);
	glShaderSource(handle, 1, &src, &shader_len);
	glCompileShader(handle);
	if (!compileStatus(handle)) {
	    char buff[2048];
	    int nwritten;
		glGetShaderInfoLog(handle, 2048, &nwritten, buff);

		const char* typelabel = stype == GL_VERTEX_SHADER ? "vertex" : (stype == GL_FRAGMENT_SHADER ? "fragment" : "unknown");
		printf("Error in %s shader\n%s\n", typelabel, buff);
		return false;
	}
	return true;
}