I'm a little baffled at the moment.
Given the (bad) vertex shader:
Code: Select all
attribute vec3 vertex_position;
attribute vec3 color_in;
uniform mat4 mvp_matrix;
varying vec3 color_out;
void main()
{
gl_Position = mvp_matrix * vec4(vertex_position, 1.0);
color_out = color_in OKDEOKEDOKEDOK; // Note blatant syntax error
}
Code: Select all
this->vertex_shader_id = glCreateShader(GL_VERTEX_SHADER);
if (!this->LoadShader(vertex_shader_file, this->vertex_shader_id))
return false;
glCompileShader(this->vertex_shader_id);
glGetShaderiv(this->vertex_shader_id, GL_COMPILE_STATUS, &check_value);
if (check_value != GL_TRUE)
{
cerr << "GLSL compilation failed - vertex shader: " << vertex_shader_file << endl;
this->GetShaderLog(vertex_shader_id);
return false;
}
Granted this is my first GLES work, but oughtn't the shader fail to compile?
Of course it doesn't actually work - mvp_matrix cannot be located.
LoadShader() is defined as:
Code: Select all
bool Shader::LoadShader(string file_name, GLuint shader_id)
{
// This function is adapted from OpenGL 4.0 Shading Language Cookbook by David Wolff.
assert(file_name.length() > 0);
if (GLReturnedError("Shader::LoadShader() - on entrance"))
return false;
ifstream file(file_name.c_str(), ifstream::in);
if (!file.is_open())
{
cerr << "Cannot open shader: " << file_name << endl;
return false;
}
file.seekg (0, ios::end);
streamsize length = file.tellg();
file.seekg (0, ios::beg);
GLubyte * buffer = new GLubyte[length + 1];
file.read((char *) buffer, length);
file.close();
buffer[length] = 0;
glShaderSource(shader_id, 1, (const char **) &buffer, NULL);
#ifdef DEBUG_SHADER
cerr << "Shader::LoadShader(" << file_name.c_str() << ")" << endl;
cerr << string((const char *) buffer).c_str() << endl;
cerr << endl;
#endif // DEBUG_SHADER
delete [] buffer;
return !GLReturnedError("Shader::LoadShader() - on exit");
}