]> git.tdb.fi Git - libs/gl.git/blob - source/programdata.cpp
Add Uniform* classes to store uniform data of Programs
[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 "programdata.h"
10 #include "uniform.h"
11
12 using namespace std;
13
14 namespace Msp {
15 namespace GL {
16
17 ProgramData::ProgramData()
18 {
19         require_extension("GL_ARB_shader_objects");
20 }
21
22 ProgramData::~ProgramData()
23 {
24         for(map<int, Uniform *>::iterator i=data.begin(); i!=data.end(); ++i)
25                 delete i->second;
26 }
27
28 void ProgramData::uniform(int index, Uniform *uni)
29 {
30         if(index<0)
31                 return;
32
33         map<int, Uniform *>::iterator i=data.find(index);
34         if(i!=data.end())
35         {
36                 delete i->second;
37                 i->second=uni;
38         }
39         else
40                 data[index]=uni;
41 }
42
43 void ProgramData::uniform(int index, int v)
44 {
45         uniform(index, new Uniform1i(v));
46 }
47
48 void ProgramData::uniform(int index, float v)
49 {
50         uniform(index, new Uniform1f(v));
51 }
52
53 void ProgramData::uniform(int index, float v0, float v1)
54 {
55         uniform(index, new Uniform2f(v0, v1));
56 }
57
58 void ProgramData::uniform2(int index, const float *v)
59 {
60         uniform(index, v[0], v[1]);
61 }
62
63 void ProgramData::uniform(int index, float v0, float v1, float v2)
64 {
65         uniform(index, new Uniform3f(v0, v1, v2));
66 }
67
68 void ProgramData::uniform3(int index, const float *v)
69 {
70         uniform(index, v[0], v[1], v[2]);
71 }
72
73 void ProgramData::uniform(int index, float v0, float v1, float v2, float v3)
74 {
75         uniform(index, new Uniform4f(v0, v1, v2, v3));
76 }
77
78 void ProgramData::uniform4(int index, const float *v)
79 {
80         uniform(index, v[0], v[1], v[2], v[3]);
81 }
82
83 void ProgramData::apply() const
84 {
85         for(map<int, Uniform *>::const_iterator i=data.begin(); i!=data.end(); ++i)
86                 i->second->apply(i->first);
87 }
88
89 } // namespace GL
90 } // namespace Msp