build windows binary in the same directory
[laserbrain_demo] / src / sdrman.cc
1 #include <assert.h>
2 #include "sdrman.h"
3 #include "logger.h"
4
5 ShaderSet *vsdrset, *psdrset;
6
7 bool sdrman_init()
8 {
9         if(vsdrset) {
10                 assert(psdrset);
11                 return true;    // already initialized
12         }
13         try {
14                 vsdrset = new ShaderSet(GL_VERTEX_SHADER);
15                 psdrset = new ShaderSet(GL_FRAGMENT_SHADER);
16         }
17         catch(...) {
18                 delete vsdrset;
19                 return false;
20         }
21         return true;
22 }
23
24 void sdrman_destroy()
25 {
26         delete vsdrset;
27         delete psdrset;
28         vsdrset = psdrset = 0;
29 }
30
31 ShaderProg *get_sdrprog(const char *vname, const char *pname)
32 {
33         if(!vsdrset) {
34                 sdrman_init();
35         }
36
37         Shader *vsdr = vname ? vsdrset->get(vname) : 0;
38         Shader *psdr = pname ? psdrset->get(pname) : 0;
39
40         if(vname && !vsdr) {
41                 return 0;
42         }
43         if(pname && !psdr) {
44                 return 0;
45         }
46         if(!vsdr && !psdr) {
47                 return 0;
48         }
49
50         ShaderProg *prog = new ShaderProg;
51         if(!prog->create(vsdr, psdr)) {
52                 delete prog;
53                 return 0;
54         }
55         return prog;
56 }
57
58 static const char *typestr(unsigned int type)
59 {
60         switch(type) {
61         case GL_VERTEX_SHADER:
62                 return "vertex";
63         case GL_FRAGMENT_SHADER:
64                 return "pixel";
65 #ifdef HAVE_GEOMETRY_SHADER
66         case GL_GEOMETRY_SHADER:
67                 return "geometry";
68 #endif
69 #ifdef HAVE_TESSELATION_SHADER
70         case GL_TESS_CONTROL_SHADER:
71                 return "tesselation control";
72         case GL_TESS_EVALUATION_SHADER:
73                 return "tesselation evaluation";
74 #endif
75         default:
76                 break;
77         }
78         return "unknown";
79 }