+ 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;