bplayer stub update + remove some tabs
[blender-staging.git] / source / gameengine / BlenderRoutines / KX_BlenderCanvas.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file KX_BlenderCanvas.h
31  *  \ingroup blroutines
32  */
33
34 #ifndef __KX_BLENDERCANVAS
35 #define __KX_BLENDERCANVAS
36
37 #ifdef WIN32
38 #include <windows.h>
39 #endif 
40
41 #include "GL/glew.h"
42
43 #include "RAS_ICanvas.h"
44 #include "RAS_Rect.h"
45
46 #include "KX_BlenderGL.h"
47
48 #ifdef WITH_CXX_GUARDEDALLOC
49 #include "MEM_guardedalloc.h"
50 #endif
51
52 struct ARegion;
53 struct wmWindow;
54
55 /**
56  * 2D Blender device context abstraction. 
57  * The connection from 3d rendercontext to 2d Blender surface embedding.
58  */
59
60 class KX_BlenderCanvas : public RAS_ICanvas
61 {
62 private:
63         /** Rect that defines the area used for rendering,
64             relative to the context */
65         RAS_Rect m_displayarea;
66
67 public:
68         /* Construct a new canvas.
69          * 
70          * @param area The Blender ARegion to run the game within.
71          */
72         KX_BlenderCanvas(struct wmWindow* win, class RAS_Rect &rect, struct ARegion* ar);
73         ~KX_BlenderCanvas();
74
75                 void 
76         Init(
77         );
78         
79                 void 
80         SwapBuffers(
81         );
82                 void 
83         Resize(
84                 int width,
85                 int height
86         );
87
88                 void
89         BeginFrame(
90         );
91
92                 void 
93         EndFrame(
94         );
95
96                 void 
97         ClearColor(
98                 float r,
99                 float g,
100                 float b,
101                 float a
102         );
103
104                 void 
105         ClearBuffer(
106                 int type
107         );
108
109                 int 
110         GetWidth(
111         ) const ;
112
113                 int 
114         GetHeight(
115         ) const ;
116
117                 int
118         GetMouseX(int x
119         );
120
121                 int
122         GetMouseY(int y
123         );
124
125                 float
126         GetMouseNormalizedX(int x
127         );
128
129                 float
130         GetMouseNormalizedY(int y
131         );
132
133         const
134                 RAS_Rect &
135         GetDisplayArea(
136         ) const {
137                 return m_displayarea;
138         };
139
140                 void
141         SetDisplayArea(RAS_Rect *rect
142         ) {
143                 m_displayarea= *rect;
144         };
145
146                 RAS_Rect &
147         GetWindowArea(
148         );
149
150                 void
151         SetViewPort(
152                 int x1, int y1,
153                 int x2, int y2
154         );
155
156                 void 
157         SetMouseState(
158                 RAS_MouseState mousestate
159         );
160
161                 void 
162         SetMousePosition(
163                 int x,
164                 int y
165         );
166
167                 void 
168         MakeScreenShot(
169                 const char* filename
170         );
171         
172         /**
173          * Nothing needs be done for BlenderCanvas
174          * Begin/End Draw, as the game engine GL context
175          * is always current/active.
176          */
177
178                 bool 
179         BeginDraw(
180         ) {
181                         return true;
182         };
183
184                 void 
185         EndDraw(
186         ) {
187         };
188
189 private:
190         /** Blender area the game engine is running within */
191         struct wmWindow* m_win;
192         RAS_Rect        m_frame_rect;
193         RAS_Rect        m_area_rect;
194         short           m_area_left;
195         short           m_area_top;
196
197
198 #ifdef WITH_CXX_GUARDEDALLOC
199 public:
200         void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:KX_BlenderCanvas"); }
201         void operator delete( void *mem ) { MEM_freeN(mem); }
202 #endif
203 };
204
205 #endif // __KX_BLENDERCANVAS
206