+#include <assert.h>
#include <stdio.h>
#include "shader.h"
Shader::Shader() {}
-Shader::~Shader() {}
+Shader::~Shader()
+{
+ type = SDR_UNKNOWN;
+}
bool Shader::load(const char *fname, SType type)
{
switch(type) {
case SDR_VERTEX:
case SDR_FRAGMENT:
+ this->type = type;
break;
default:
fprintf(stderr, "Invalid shader type used in loading.\n");
return false;
}
+
+ FILE *fp;
+ unsigned int fsz;
+
+ if(!(fp = fopen(fname, "rb"))) {
+ fprintf(stderr, "Failed to open shader: %s.\n", fname);
+
+ return false;
+ }
+ fseek(fp, 0, SEEK_END);
+ fsz = ftell(fp);
+ rewind(fp);
+
+ char *buf;
+ if(!(buf = new char[fsz + 1])) {
+ fprintf(stderr, "Failed to allocate %u buffers.\n", fsz + 1);
+ fclose(fp);
+
+ return false;
+ }
+
+ if(fread(buf, 1, fsz, fp) < fsz) {
+ fprintf(stderr, "Failed to read shader: %s.\n", fname);
+ delete buf;
+ fclose(fp);
+
+ return false;
+ }
+ buf[fsz] = '\0';
+ fclose(fp);
+
+ create(buf, fsz, fname);
return true;
}
ShaderProgram::ShaderProgram()
{
+ int len = sizeof shaders / sizeof *shaders;
+ for(int i=0; i<len; ++i) {
+ shaders[i] = 0;
+ }
}
ShaderProgram::~ShaderProgram()
{
-}
+ int len = sizeof shaders / sizeof *shaders;
-void ShaderProgram::add_shader(Shader *sdr, SType type)
-{
- shaders[type] = sdr;
+ for(int i=0; i<len; ++i) {
+ delete shaders[i];
+ }
}
\ No newline at end of file