Merged revision(s) 58682-58770 from trunk/blender into soc-2013-dingto.
[blender-staging.git] / source / gameengine / Rasterizer / RAS_ICanvas.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file RAS_ICanvas.h
29  *  \ingroup bgerast
30  */
31
32 #ifndef __RAS_ICANVAS_H__
33 #define __RAS_ICANVAS_H__
34
35 #ifdef WITH_CXX_GUARDEDALLOC
36 #include "MEM_guardedalloc.h"
37 #endif
38
39 class RAS_Rect;
40
41 /**
42  * 2D rendering device context. The connection from 3d rendercontext to 2d surface.
43  */
44 class RAS_ICanvas
45 {
46 public:
47         enum BufferType {
48                 COLOR_BUFFER=1,
49                 DEPTH_BUFFER=2
50         };
51
52         enum RAS_MouseState
53         {
54                 MOUSE_INVISIBLE=1,
55                 MOUSE_WAIT,
56                 MOUSE_NORMAL
57         };
58
59         virtual 
60         ~RAS_ICanvas(
61         ) {
62         }
63
64         virtual 
65                 void 
66         Init(
67         ) = 0;
68
69         virtual 
70                 void 
71         BeginFrame(
72         )=0;
73
74         virtual 
75                 void 
76         EndFrame(
77         )=0;
78
79         /**
80          * Initializes the canvas for drawing.  Drawing to the canvas is
81          * only allowed between BeginDraw() and EndDraw().
82          *
83          * \retval false Acquiring the canvas failed.
84          * \retval true Acquiring the canvas succeeded.
85          *
86          */
87
88         virtual 
89                 bool 
90         BeginDraw(
91         )=0;
92
93         /**
94          * Unitializes the canvas for drawing.
95          */
96
97         virtual 
98                 void 
99         EndDraw(
100         )=0;
101
102
103         /// probably needs some arguments for PS2 in future
104         virtual 
105                 void 
106         SwapBuffers(
107         )=0;
108         
109         virtual
110                 void
111         SetSwapInterval(
112                 int interval
113         )=0;
114
115         virtual
116                 int
117         GetSwapInterval(
118         )=0;
119  
120         virtual 
121                 void 
122         ClearBuffer(
123                 int type
124         )=0;
125
126         virtual 
127                 void 
128         ClearColor(
129                 float r,
130                 float g,
131                 float b,
132                 float a
133         )=0;
134
135         virtual 
136                 int      
137         GetWidth(
138         ) const = 0;
139
140         virtual 
141                 int      
142         GetHeight(
143         ) const = 0;
144
145         virtual
146                 int
147         GetMouseX(int x
148         )=0;
149
150         virtual
151                 int
152         GetMouseY(int y
153         )= 0;
154
155         virtual
156                 float
157         GetMouseNormalizedX(int x
158         )=0;
159
160         virtual
161                 float
162         GetMouseNormalizedY(int y
163         )= 0;
164
165         virtual
166                 const RAS_Rect &
167         GetDisplayArea(
168         ) const = 0;
169
170         virtual
171                 void
172         SetDisplayArea(RAS_Rect *rect
173         ) = 0;
174
175         /**
176          * Used to get canvas area within blender.
177          */
178         virtual
179                 RAS_Rect &
180         GetWindowArea(
181         ) = 0;
182
183         /**
184          * Set the visible view-port 
185          */
186
187         virtual
188                 void
189         SetViewPort(
190                 int x1, int y1,
191                 int x2, int y2
192         ) = 0;
193
194         /**
195          * Update the Canvas' viewport (used when the viewport changes without using SetViewPort()
196          * eg: Shadow buffers and FBOs
197          */
198
199         virtual
200                 void
201         UpdateViewPort(
202                 int x1, int y1,
203                 int x2, int y2
204         ) = 0;
205
206         /**
207          * Get the visible viewport
208          */
209         virtual
210                 const int*
211         GetViewPort() = 0;
212
213         virtual 
214                 void 
215         SetMouseState(
216                 RAS_MouseState mousestate
217         )=0;
218
219         virtual 
220                 void 
221         SetMousePosition(
222                 int x,
223                 int y
224         )=0;
225
226         virtual
227                 RAS_MouseState
228         GetMouseState()
229         {
230                 return m_mousestate;
231         }
232
233         virtual 
234                 void 
235         MakeScreenShot(
236                 const char* filename
237         )=0;
238
239         virtual
240                 void 
241         ResizeWindow(
242                 int width,
243                 int height
244         )=0;
245
246         virtual
247                 void
248         SetFullScreen(
249                 bool enable
250         )=0;
251
252         virtual
253                 bool
254         GetFullScreen()=0;
255
256                 
257         
258 protected:
259         RAS_MouseState m_mousestate;
260
261
262 #ifdef WITH_CXX_GUARDEDALLOC
263         MEM_CXX_CLASS_ALLOC_FUNCS("GE:RAS_ICanvas")
264 #endif
265 };
266
267 #endif  /* __RAS_ICANVAS_H__ */