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 static RequireExtension _ext("GL_ARB_shader_objects");
23 ProgramData::ProgramData(const ProgramData &other):
26 for(map<int, Uniform *>::iterator i=data.begin(); i!=data.end(); ++i)
27 i->second = i->second->clone();
30 ProgramData::~ProgramData()
32 for(map<int, Uniform *>::iterator i=data.begin(); i!=data.end(); ++i)
36 void ProgramData::uniform(int index, Uniform *uni)
44 map<int, Uniform *>::iterator i = data.find(index);
54 void ProgramData::uniform(int index, int v)
56 uniform(index, new Uniform1i(v));
59 void ProgramData::uniform(int index, float v)
61 uniform(index, new Uniform1f(v));
64 void ProgramData::uniform(int index, float v0, float v1)
66 uniform(index, new Uniform2f(v0, v1));
69 void ProgramData::uniform2(int index, const float *v)
71 uniform(index, v[0], v[1]);
74 void ProgramData::uniform(int index, float v0, float v1, float v2)
76 uniform(index, new Uniform3f(v0, v1, v2));
79 void ProgramData::uniform3(int index, const float *v)
81 uniform(index, v[0], v[1], v[2]);
84 void ProgramData::uniform(int index, float v0, float v1, float v2, float v3)
86 uniform(index, new Uniform4f(v0, v1, v2, v3));
89 void ProgramData::uniform4(int index, const float *v)
91 uniform(index, v[0], v[1], v[2], v[3]);
94 void ProgramData::apply() const
96 for(map<int, Uniform *>::const_iterator i=data.begin(); i!=data.end(); ++i)
97 i->second->apply(i->first);
101 ProgramData::Loader::Loader(ProgramData &pd, Program &pr):
102 DataFile::ObjectLoader<ProgramData>(pd),
105 add("uniform1i", &Loader::uniform1i);
106 add("uniform1f", &Loader::uniform1f);
107 add("uniform2f", &Loader::uniform2f);
108 add("uniform3f", &Loader::uniform3f);
109 add("uniform4f", &Loader::uniform4f);
112 void ProgramData::Loader::uniform1i(const string &n, int v)
114 obj.uniform(prog.get_uniform_location(n), v);
117 void ProgramData::Loader::uniform1f(const string &n, float v)
119 obj.uniform(prog.get_uniform_location(n), v);
122 void ProgramData::Loader::uniform2f(const string &n, float v0, float v1)
124 obj.uniform(prog.get_uniform_location(n), v0, v1);
127 void ProgramData::Loader::uniform3f(const string &n, float v0, float v1, float v2)
129 obj.uniform(prog.get_uniform_location(n), v0, v1, v2);
132 void ProgramData::Loader::uniform4f(const string &n, float v0, float v1, float v2, float v3)
134 obj.uniform(prog.get_uniform_location(n), v0, v1, v2, v3);