]> git.tdb.fi Git - libs/gl.git/blob - source/programdata.cpp
Style update: add spaces around assignment operators
[libs/gl.git] / source / programdata.cpp
1 /* $Id$
2
3 This file is part of libmspgl
4 Copyright © 2007  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include "extension.h"
9 #include "program.h"
10 #include "programdata.h"
11 #include "uniform.h"
12
13 using namespace std;
14
15 namespace Msp {
16 namespace GL {
17
18 ProgramData::ProgramData()
19 {
20         static RequireExtension _ext("GL_ARB_shader_objects");
21 }
22
23 ProgramData::ProgramData(const ProgramData &other):
24         data(other.data)
25 {
26         for(map<int, Uniform *>::iterator i=data.begin(); i!=data.end(); ++i)
27                 i->second = i->second->clone();
28 }
29
30 ProgramData::~ProgramData()
31 {
32         for(map<int, Uniform *>::iterator i=data.begin(); i!=data.end(); ++i)
33                 delete i->second;
34 }
35
36 void ProgramData::uniform(int index, Uniform *uni)
37 {
38         if(index<0)
39         {
40                 delete uni;
41                 return;
42         }
43
44         map<int, Uniform *>::iterator i = data.find(index);
45         if(i!=data.end())
46         {
47                 delete i->second;
48                 i->second = uni;
49         }
50         else
51                 data[index] = uni;
52 }
53
54 void ProgramData::uniform(int index, int v)
55 {
56         uniform(index, new Uniform1i(v));
57 }
58
59 void ProgramData::uniform(int index, float v)
60 {
61         uniform(index, new Uniform1f(v));
62 }
63
64 void ProgramData::uniform(int index, float v0, float v1)
65 {
66         uniform(index, new Uniform2f(v0, v1));
67 }
68
69 void ProgramData::uniform2(int index, const float *v)
70 {
71         uniform(index, v[0], v[1]);
72 }
73
74 void ProgramData::uniform(int index, float v0, float v1, float v2)
75 {
76         uniform(index, new Uniform3f(v0, v1, v2));
77 }
78
79 void ProgramData::uniform3(int index, const float *v)
80 {
81         uniform(index, v[0], v[1], v[2]);
82 }
83
84 void ProgramData::uniform(int index, float v0, float v1, float v2, float v3)
85 {
86         uniform(index, new Uniform4f(v0, v1, v2, v3));
87 }
88
89 void ProgramData::uniform4(int index, const float *v)
90 {
91         uniform(index, v[0], v[1], v[2], v[3]);
92 }
93
94 void ProgramData::apply() const
95 {
96         for(map<int, Uniform *>::const_iterator i=data.begin(); i!=data.end(); ++i)
97                 i->second->apply(i->first);
98 }
99
100
101 ProgramData::Loader::Loader(ProgramData &pd, Program &pr):
102         DataFile::ObjectLoader<ProgramData>(pd),
103         prog(pr)
104 {
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);
110 }
111
112 void ProgramData::Loader::uniform1i(const string &n, int v)
113 {
114         obj.uniform(prog.get_uniform_location(n), v);
115 }
116
117 void ProgramData::Loader::uniform1f(const string &n, float v)
118 {
119         obj.uniform(prog.get_uniform_location(n), v);
120 }
121
122 void ProgramData::Loader::uniform2f(const string &n, float v0, float v1)
123 {
124         obj.uniform(prog.get_uniform_location(n), v0, v1);
125 }
126
127 void ProgramData::Loader::uniform3f(const string &n, float v0, float v1, float v2)
128 {
129         obj.uniform(prog.get_uniform_location(n), v0, v1, v2);
130 }
131
132 void ProgramData::Loader::uniform4f(const string &n, float v0, float v1, float v2, float v3)
133 {
134         obj.uniform(prog.get_uniform_location(n), v0, v1, v2, v3);
135 }
136
137 } // namespace GL
138 } // namespace Msp