2
// Book: OpenGL(R) ES 2.0 Programming Guide
3
// Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
5
// ISBN-13: 9780321502797
6
// Publisher: Addison-Wesley Professional
7
// URLs: http://safari.informit.com/9780321563835
8
// http://www.opengles-book.com
13
// Utility functions for loading shaders and creating program objects.
22
//////////////////////////////////////////////////////////////////
30
//////////////////////////////////////////////////////////////////
38
/// \brief Load a shader, check for compile errors, print error messages to output log
39
/// \param type Type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER)
40
/// \param shaderSrc Shader source string
41
/// \return A new shader object on success, 0 on failure
43
GLuint ESUTIL_API esLoadShader ( GLenum type, const char *shaderSrc )
48
// Create the shader object
49
shader = glCreateShader ( type );
54
// Load the shader source
55
glShaderSource ( shader, 1, &shaderSrc, NULL );
58
glCompileShader ( shader );
60
// Check the compile status
61
glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );
67
glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );
71
char* infoLog = malloc (sizeof(char) * infoLen );
73
glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );
74
esLogMessage ( "Error compiling shader:\n%s\n", infoLog );
79
glDeleteShader ( shader );
90
/// \brief Load a vertex and fragment shader, create a program object, link program.
91
// Errors output to log.
92
/// \param vertShaderSrc Vertex shader source code
93
/// \param fragShaderSrc Fragment shader source code
94
/// \return A new program object linked with the vertex/fragment shader pair, 0 on failure
96
GLuint ESUTIL_API esLoadProgram ( const char *vertShaderSrc, const char *fragShaderSrc )
99
GLuint fragmentShader;
100
GLuint programObject;
103
// Load the vertex/fragment shaders
104
vertexShader = esLoadShader ( GL_VERTEX_SHADER, vertShaderSrc );
105
if ( vertexShader == 0 )
108
fragmentShader = esLoadShader ( GL_FRAGMENT_SHADER, fragShaderSrc );
109
if ( fragmentShader == 0 )
111
glDeleteShader( vertexShader );
115
// Create the program object
116
programObject = glCreateProgram ( );
118
if ( programObject == 0 )
121
glAttachShader ( programObject, vertexShader );
122
glAttachShader ( programObject, fragmentShader );
125
glLinkProgram ( programObject );
127
// Check the link status
128
glGetProgramiv ( programObject, GL_LINK_STATUS, &linked );
134
glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen );
138
char* infoLog = malloc (sizeof(char) * infoLen );
140
glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog );
141
esLogMessage ( "Error linking program:\n%s\n", infoLog );
146
glDeleteProgram ( programObject );
150
// Free up no longer needed shader resources
151
glDeleteShader ( vertexShader );
152
glDeleteShader ( fragmentShader );
154
return programObject;
b'\\ No newline at end of file'