]> git.tdb.fi Git - libs/gl.git/blob - source/clipunit.cpp
Add OffscreenView class
[libs/gl.git] / source / clipunit.cpp
1 #include <msp/gl/extensions/msp_clipping.h>
2 #include <stdexcept>
3 #include "clipunit.h"
4 #include "gl.h"
5 #include "misc.h"
6
7 using namespace std;
8
9 namespace Msp {
10 namespace GL {
11
12 vector<ClipUnit> ClipUnit::units;
13
14 ClipUnit::ClipUnit():
15         index(0),
16         plane(0)
17 { }
18
19 bool ClipUnit::set_plane(const ClipPlane *p)
20 {
21         bool result = (p!=plane);
22         plane = p;
23         return result;
24 }
25
26 unsigned ClipUnit::get_n_units()
27 {
28         static Require _req(MSP_clipping);
29         static int count = get_i(GL_MAX_CLIP_PLANES);
30         return count;
31 }
32
33 ClipUnit &ClipUnit::get_unit(unsigned i)
34 {
35         if(i>=get_n_units())
36                 throw out_of_range("ClipUnit::get_unit");
37
38         if(units.size()<=i)
39         {
40                 unsigned j = units.size();
41                 units.resize(i+1, ClipUnit());
42                 for(; j<units.size(); ++j)
43                         units[j].index = j;
44         }
45
46         return units[i];
47 }
48
49 ClipUnit *ClipUnit::find_unit(const ClipPlane *p)
50 {
51         for(vector<ClipUnit>::iterator i=units.begin(); i!=units.end(); ++i)
52                 if(i->plane==p)
53                         return &*i;
54         return 0;
55 }
56
57 } // namespace GL
58 } // namespace Msp