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("uniform1i", &Loader::uniform1i);
99 add("uniform1f", &Loader::uniform1f);
100 add("uniform2f", &Loader::uniform2f);
101 add("uniform3f", &Loader::uniform3f);
102 add("uniform4f", &Loader::uniform4f);
105 void ProgramData::Loader::uniform1i(const string &n, int v)
107 pdata.uniform(prog.get_uniform_location(n), v);
110 void ProgramData::Loader::uniform1f(const string &n, float v)
112 pdata.uniform(prog.get_uniform_location(n), v);
115 void ProgramData::Loader::uniform2f(const string &n, float v0, float v1)
117 pdata.uniform(prog.get_uniform_location(n), v0, v1);
120 void ProgramData::Loader::uniform3f(const string &n, float v0, float v1, float v2)
122 pdata.uniform(prog.get_uniform_location(n), v0, v1, v2);
125 void ProgramData::Loader::uniform4f(const string &n, float v0, float v1, float v2, float v3)
127 pdata.uniform(prog.get_uniform_location(n), v0, v1, v2, v3);