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)
37 map<int, Uniform *>::iterator i=data.find(index);
47 void ProgramData::uniform(int index, int v)
49 uniform(index, new Uniform1i(v));
52 void ProgramData::uniform(int index, float v)
54 uniform(index, new Uniform1f(v));
57 void ProgramData::uniform(int index, float v0, float v1)
59 uniform(index, new Uniform2f(v0, v1));
62 void ProgramData::uniform2(int index, const float *v)
64 uniform(index, v[0], v[1]);
67 void ProgramData::uniform(int index, float v0, float v1, float v2)
69 uniform(index, new Uniform3f(v0, v1, v2));
72 void ProgramData::uniform3(int index, const float *v)
74 uniform(index, v[0], v[1], v[2]);
77 void ProgramData::uniform(int index, float v0, float v1, float v2, float v3)
79 uniform(index, new Uniform4f(v0, v1, v2, v3));
82 void ProgramData::uniform4(int index, const float *v)
84 uniform(index, v[0], v[1], v[2], v[3]);
87 void ProgramData::apply() const
89 for(map<int, Uniform *>::const_iterator i=data.begin(); i!=data.end(); ++i)
90 i->second->apply(i->first);
94 ProgramData::Loader::Loader(ProgramData &pd, Program &pr):
98 add("uniform1", &Loader::uniform1);
99 add("uniform2", &Loader::uniform2);
100 add("uniform3", &Loader::uniform3);
101 add("uniform4", &Loader::uniform4);
104 void ProgramData::Loader::uniform1(const string &n, float v)
106 pdata.uniform(prog.get_uniform_location(n), v);
109 void ProgramData::Loader::uniform2(const string &n, float v0, float v1)
111 pdata.uniform(prog.get_uniform_location(n), v0, v1);
114 void ProgramData::Loader::uniform3(const string &n, float v0, float v1, float v2)
116 pdata.uniform(prog.get_uniform_location(n), v0, v1, v2);
119 void ProgramData::Loader::uniform4(const string &n, float v0, float v1, float v2, float v3)
121 pdata.uniform(prog.get_uniform_location(n), v0, v1, v2, v3);