7e56a02dd47e04ea7d121b6ab82c07880ec2a05f
[blender.git] / intern / iksolver / test / ik_glut_test / common / GlutDrawer.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 #ifndef NAN_INCLUDED_GlutDrawer
33
34 #define NAN_INCLUDED_GlutDrawer
35
36 #include "MEM_NonCopyable.h"
37 #include "MEM_SmartPtr.h"
38
39 // So pissed off with Glut callback stuff
40 // that is impossible to call objects unless they are global
41
42 // inherit from GlutDrawer and installl the drawer in the singleton
43 // class GlutDrawManager.
44
45 class GlutDrawer {
46 public :
47
48         virtual 
49                 void
50         Draw(
51         )= 0;
52
53         virtual 
54         ~GlutDrawer(
55         ){};            
56 };
57
58 class GlutDrawManager : public MEM_NonCopyable{
59
60 public :
61
62         static
63                 GlutDrawManager *
64         Instance(
65         );
66
67         // this is the function you should pass to glut
68
69         static
70                 void
71         Draw(
72         );
73
74                 void
75         InstallDrawer(
76                 GlutDrawer *
77         );
78
79                 void
80         ReleaseDrawer(
81         );
82
83         ~GlutDrawManager(
84         );
85
86 private :
87
88         GlutDrawManager (
89         ) :
90                 m_drawer (0)
91         {
92         };
93         
94         GlutDrawer * m_drawer;
95
96         static MEM_SmartPtr<GlutDrawManager> m_s_instance;
97 };      
98
99
100 #endif