Last active
November 17, 2015 17:16
-
-
Save kioba/8823e9a72a41118ef288 to your computer and use it in GitHub Desktop.
Vertex and Fragment shader compile function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GLuint Shader::LoadShaders(const std::string VertexShaderCode, const std::string FragmentShaderCode) | |
{ | |
GLint Result = GL_FALSE; | |
glGetIntegerv(GL_SHADER_COMPILER, &Result); | |
if (Result == GL_FALSE) { | |
return Result; | |
} | |
// Create the shaders | |
GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER); | |
GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); | |
int InfoLogLength; | |
// Compile Vertex Shader | |
std::cout << "Compiling Vertex shader" << std::endl; | |
char const * VertexSourcePointer = VertexShaderCode.c_str(); | |
glShaderSource(VertexShaderID, 1, &VertexSourcePointer, NULL); | |
glCompileShader(VertexShaderID); | |
// Check Vertex Shader | |
glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result); | |
glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); | |
if (InfoLogLength != 0) { | |
std::vector<char> VertexShaderErrorMessage(InfoLogLength); | |
glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]); | |
fprintf(stdout, "%s\n", &VertexShaderErrorMessage[0]); | |
} | |
// Compile Fragment Shader | |
std::cout << "Compiling Fragment shader" << std::endl; | |
char const * FragmentSourcePointer = FragmentShaderCode.c_str(); | |
glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL); | |
glCompileShader(FragmentShaderID); | |
// Check Fragment Shader | |
glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result); | |
glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); | |
if (InfoLogLength != 0) { | |
std::vector<char> FragmentShaderErrorMessage(InfoLogLength); | |
glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]); | |
fprintf(stdout, "%s\n", &FragmentShaderErrorMessage[0]); | |
} | |
// Link the program | |
std::cout << "Linking program\n" << std::endl; | |
GLuint ProgramID = glCreateProgram(); | |
glAttachShader(ProgramID, VertexShaderID); | |
glAttachShader(ProgramID, FragmentShaderID); | |
glLinkProgram(ProgramID); | |
// Check the program | |
glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); | |
glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); | |
if (InfoLogLength != 0) { | |
std::vector<char> ProgramErrorMessage(InfoLogLength); | |
glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]); | |
fprintf(stdout, "%s\n", &ProgramErrorMessage[0]); | |
} | |
glDeleteShader(VertexShaderID); | |
glDeleteShader(FragmentShaderID); | |
return ProgramID; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment