void createShaders()
{
GLuint program,fragment,vertex; // shader program, fragment, vertex
vertex = glCreateShader( GL_VERTEX_SHADER );
fragment = glCreateShader( GL_FRAGMENT_SHADER );
compileShader("pointlight.frag", fragment);
compileShader("pointlight.vert", vertex);
program = glCreateProgram();
glAttachShader(program, vertex);
glAttachShader(program, fragment);
glLinkProgram(program);
glUseProgram(program);
programs["default"] = program;
/*
assert(NULL);
ifstream vf, ff;
char *vs, *fs;
int count;
v = glCreateShader(GL_VERTEX_SHADER);
f = glCreateShader(GL_FRAGMENT_SHADER);
struct stat fileStat;
vs = textFileRead("pointlight.vert");
fs = textFileRead("pointlight.frag");
glShaderSource(v, 1, (const char **) &vs,NULL);
glShaderSource(f, 1, (const char **) &fs,NULL);
free(vs);free(fs);
glCompileShader(v);
glCompileShader(f);
p = glCreateProgram();
glAttachShader(p,v);
glAttachShader(p,f);
glLinkProgram(p);
glUseProgram(p);
*/
}
void compileShader(char *file, GLuint shader)
{
char *source = readShaderFile(file);
glShaderSource(shader, 1, (const char **) &source , NULL);
glCompileShader(shader);
free(source);
}
static char *readShaderFile(const char *fn)
{
FILE *fp;
char *content = NULL;
int count=0;
if (fn != NULL) {
fp = fopen(fn,"rt");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
count = ftell(fp);
rewind(fp);
if (count > 0) {
content = (char *)malloc(sizeof(char) * (count+1));
count = (int)fread(content,sizeof(char),count,fp);
content[count] = '';
}
fclose(fp);
}
}
return content;
}
No related posts.