Added comments, and hacked shader, so its working
This commit is contained in:
parent
4e9ac42d77
commit
6dfc673420
1 changed files with 40 additions and 1 deletions
41
J/shader.h
41
J/shader.h
|
@ -10,10 +10,17 @@
|
|||
#import <OpenGLES/ES2/gl.h>
|
||||
#import <OpenGLES/ES2/glext.h>
|
||||
|
||||
// TODO: do glValidateProgram, like in the OpenGL template
|
||||
// TODO: do glValidateProgram, like in the OpenGL template (see bottom)
|
||||
// TODO: add error checking at set_uniforms?
|
||||
// TODO: use an uniform map? (benchmark first!)
|
||||
|
||||
namespace J {
|
||||
|
||||
enum {
|
||||
ATTRIB_VERTEX,
|
||||
ATTRIB_COLOR,
|
||||
NUM_ATTRIBUTES
|
||||
};
|
||||
|
||||
class shader {
|
||||
typedef std::map<GLenum, GLuint> ShaderMap;
|
||||
|
@ -43,6 +50,12 @@ public:
|
|||
throw std::runtime_error(fragment_shader_filename + " couldn't be opened");
|
||||
read_shader(fragment_shader, GL_FRAGMENT_SHADER);
|
||||
}
|
||||
{ // TODO: think of a nice way to implement this
|
||||
// Bind attribute locations.
|
||||
// This needs to be done prior to linking.
|
||||
glBindAttribLocation(program, ATTRIB_VERTEX, "position");
|
||||
glBindAttribLocation(program, ATTRIB_COLOR, "color");
|
||||
}
|
||||
|
||||
link_program();
|
||||
}
|
||||
|
@ -54,6 +67,7 @@ public:
|
|||
GLuint shader = it.second;
|
||||
glDetachShader(program, shader);
|
||||
glDeleteShader(shader);
|
||||
// NOTE: If a shader object to be deleted is attached to a program object, it will be flagged for deletion, but it will not be deleted until it is no longer attached to any program object
|
||||
}
|
||||
|
||||
glDeleteProgram(program);
|
||||
|
@ -182,6 +196,31 @@ private:
|
|||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
// Validate program before drawing. This is a good check, but only really necessary in a debug build.
|
||||
- (BOOL)validateProgram:(GLuint)prog
|
||||
{
|
||||
GLint logLength, status;
|
||||
|
||||
glValidateProgram(prog);
|
||||
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength);
|
||||
if (logLength > 0)
|
||||
{
|
||||
GLchar *log = (GLchar *)malloc(logLength);
|
||||
glGetProgramInfoLog(prog, logLength, &logLength, log);
|
||||
NSLog(@"Program validate log:\n%s", log);
|
||||
free(log);
|
||||
}
|
||||
|
||||
glGetProgramiv(prog, GL_VALIDATE_STATUS, &status);
|
||||
if (status == 0)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
|
|
Reference in a new issue