39fa0de9e6ce6484760d6f4894f1c655e8b1dfdf
[demo] / src / shader.cc
1 #include <assert.h>
2 #include <stdio.h>
3 #include "shader.h"
4
5 Shader::Shader() {}
6 Shader::~Shader()
7 {
8         type = SDR_UNKNOWN;
9 }
10
11 bool Shader::load(const char *fname, SType type)
12 {
13         switch(type) {
14         case SDR_VERTEX:
15         case SDR_FRAGMENT:
16                 this->type = type;
17                 break;
18         default:
19                 fprintf(stderr, "Invalid shader type used in loading.\n");
20                 return false;
21         }
22
23         FILE *fp;
24         unsigned int fsz;
25
26         if(!(fp = fopen(fname, "rb"))) {
27                 fprintf(stderr, "Failed to open shader: %s\n", fname);
28
29                 return false;
30         }
31         fseek(fp, 0, SEEK_END);
32         fsz = ftell(fp);
33         rewind(fp);
34
35         char *buf = new char[fsz + 1];
36
37         if(fread(buf, 1, fsz, fp) < fsz) {
38                 fprintf(stderr, "Failed to read shader: %s\n", fname);
39                 delete buf;
40                 fclose(fp);
41
42                 return false;
43         }
44         buf[fsz] = '\0';
45         fclose(fp);
46
47         create(buf, fsz, fname);
48         return true;
49 }
50
51 SType Shader::get_type()
52 {
53         return type;
54 }
55
56 ShaderProgram::ShaderProgram()
57 {
58         int len = sizeof shaders / sizeof *shaders;
59         for(int i=0; i<len; ++i) {
60                 shaders[i] = 0;
61         }
62 }
63
64 ShaderProgram::~ShaderProgram()
65 {
66         int len = sizeof shaders / sizeof *shaders;
67
68         for(int i=0; i<len; ++i) {
69                 delete shaders[i];
70         }
71 }