no clue :) just to push it
[demo] / src / shader.cc
1 #include <assert.h>
2 #include <stdio.h>
3
4 #include "shader.h"
5
6 Shader::Shader() {}
7 Shader::~Shader()
8 {
9         type = SDR_UNKNOWN;
10 }
11
12 bool Shader::load(const char *fname, ShaderType type)
13 {
14         switch(type) {
15         case SDR_VERTEX:
16         case SDR_FRAGMENT:
17                 this->type = type;
18                 break;
19         default:
20                 fprintf(stderr, "Invalid shader type used in loading.\n");
21                 return false;
22         }
23
24         FILE *fp;
25         unsigned int fsz;
26
27         if(!(fp = fopen(fname, "rb"))) {
28                 fprintf(stderr, "Failed to open shader: %s\n", fname);
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         return create(buf, fsz, fname);
48 }
49
50 ShaderType Shader::get_type()
51 {
52         return type;
53 }
54
55 ShaderProgram::ShaderProgram()
56 {
57         int len = sizeof shaders / sizeof *shaders;
58         for(int i=0; i<len; ++i) {
59                 shaders[i] = 0;
60         }
61 }
62
63 ShaderProgram::~ShaderProgram()
64 {
65         int len = sizeof shaders / sizeof *shaders;
66
67         for(int i=0; i<len; ++i) {
68                 delete shaders[i];
69         }
70 }