5 #include "opengl/shader-gl.h"
17 bool ShaderGL::create(char *buf, unsigned int bsz, const char *fname)
19 /* find shader type and create shader */
23 stype = GL_VERTEX_SHADER;
26 stype = GL_FRAGMENT_SHADER;
29 fprintf(stderr, "Unknown shader type.\n");
32 sdr = glCreateShader(stype);
35 glShaderSource(sdr, 1, (const char **)&buf, 0);
40 /* check compile status */
42 glGetShaderiv(sdr, GL_COMPILE_STATUS, &status);
44 printf("Successfully compiled shader: %s\n", fname);
46 fprintf(stderr, "Failed to compile %s shader.\n", fname);
48 /* print the info log */
50 glGetShaderiv(sdr, GL_INFO_LOG_LENGTH, &loglen);
51 if(loglen > 0 && (buf = new char[loglen + 1])) {
52 glGetShaderInfoLog(sdr, loglen, 0, buf);
67 void ShaderGL::destroy()
76 void ShaderGL::attach(unsigned int prog)
78 glAttachShader(prog, sdr);
83 ShaderProgramGL::ShaderProgramGL()
86 memset(shaders, 0, sizeof shaders / sizeof *shaders);
89 ShaderProgramGL::~ShaderProgramGL()
94 void ShaderProgramGL::destroy()
96 glDeleteProgram(prog);
102 void ShaderProgramGL::delete_shaders()
104 for(unsigned int i=0; i<(sizeof shaders) / (sizeof *shaders); ++i) {
109 bool ShaderProgramGL::link()
114 glGetProgramiv(prog, GL_LINK_STATUS, &status);
116 printf("Successfully linked shader program.\n");
118 printf("Failed to link shader program.\n");
121 glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &loglen);
124 if(loglen > 0 && (buf = new char[loglen + 1])) {
125 glGetProgramInfoLog(prog, loglen, 0, buf);
131 return status ? true : false;
134 bool ShaderProgramGL::load(const char *vfname, const char *ffname)
136 Shader *vsdr = new ShaderGL;
137 if(!vsdr->load(vfname, SDR_VERTEX)) {
142 Shader *fsdr = new ShaderGL;
143 if(!fsdr->load(ffname, SDR_FRAGMENT)) {
149 prog = glCreateProgram();
157 glDeleteProgram(prog);
161 /* the order of shaders in the array is the order they have in
162 enum Type, so atm it goes like: VS, FS, ... because we have SDR_VERTEX,
171 void ShaderProgramGL::use()