3 This file is part of libmspgl
4 Copyright © 2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
10 #include "programdata.h"
18 ProgramData::ProgramData()
20 require_extension("GL_ARB_shader_objects");
23 ProgramData::~ProgramData()
25 for(map<int, Uniform *>::iterator i=data.begin(); i!=data.end(); ++i)
29 void ProgramData::uniform(int index, Uniform *uni)
34 map<int, Uniform *>::iterator i=data.find(index);
44 void ProgramData::uniform(int index, int v)
46 uniform(index, new Uniform1i(v));
49 void ProgramData::uniform(int index, float v)
51 uniform(index, new Uniform1f(v));
54 void ProgramData::uniform(int index, float v0, float v1)
56 uniform(index, new Uniform2f(v0, v1));
59 void ProgramData::uniform2(int index, const float *v)
61 uniform(index, v[0], v[1]);
64 void ProgramData::uniform(int index, float v0, float v1, float v2)
66 uniform(index, new Uniform3f(v0, v1, v2));
69 void ProgramData::uniform3(int index, const float *v)
71 uniform(index, v[0], v[1], v[2]);
74 void ProgramData::uniform(int index, float v0, float v1, float v2, float v3)
76 uniform(index, new Uniform4f(v0, v1, v2, v3));
79 void ProgramData::uniform4(int index, const float *v)
81 uniform(index, v[0], v[1], v[2], v[3]);
84 void ProgramData::apply() const
86 for(map<int, Uniform *>::const_iterator i=data.begin(); i!=data.end(); ++i)
87 i->second->apply(i->first);
91 ProgramData::Loader::Loader(ProgramData &pd, Program &pr):
95 add("uniform1", &Loader::uniform1);
96 add("uniform2", &Loader::uniform2);
97 add("uniform3", &Loader::uniform3);
98 add("uniform4", &Loader::uniform4);
101 void ProgramData::Loader::uniform1(const string &n, float v)
103 pdata.uniform(prog.get_uniform_location(n), v);
106 void ProgramData::Loader::uniform2(const string &n, float v0, float v1)
108 pdata.uniform(prog.get_uniform_location(n), v0, v1);
111 void ProgramData::Loader::uniform3(const string &n, float v0, float v1, float v2)
113 pdata.uniform(prog.get_uniform_location(n), v0, v1, v2);
116 void ProgramData::Loader::uniform4(const string &n, float v0, float v1, float v2, float v3)
118 pdata.uniform(prog.get_uniform_location(n), v0, v1, v2, v3);