BGE: Adding a render.setFullScreen() and a render.getFullScreen() to allow fulscreeni...
[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         ClearBuffer(
112                 int type
113         )=0;
114
115         virtual 
116                 void 
117         ClearColor(
118                 float r,
119                 float g,
120                 float b,
121                 float a
122         )=0;
123
124         virtual 
125                 int      
126         GetWidth(
127         ) const = 0;
128
129         virtual 
130                 int      
131         GetHeight(
132         ) const = 0;
133
134         virtual
135                 int
136         GetMouseX(int x
137         )=0;
138
139         virtual
140                 int
141         GetMouseY(int y
142         )= 0;
143
144         virtual
145                 float
146         GetMouseNormalizedX(int x
147         )=0;
148
149         virtual
150                 float
151         GetMouseNormalizedY(int y
152         )= 0;
153
154         virtual
155                 const RAS_Rect &
156         GetDisplayArea(
157         ) const = 0;
158
159         virtual
160                 void
161         SetDisplayArea(RAS_Rect *rect
162         ) = 0;
163
164         /**
165          * Used to get canvas area within blender.
166          */
167         virtual
168                 RAS_Rect &
169         GetWindowArea(
170         ) = 0;
171
172         /**
173          * Set the visible view-port 
174          */
175
176         virtual
177                 void
178         SetViewPort(
179                 int x1, int y1,
180                 int x2, int y2
181         ) = 0;
182
183         /**
184          * Update the Canvas' viewport (used when the viewport changes without using SetViewPort()
185          * eg: Shadow buffers and FBOs
186          */
187
188         virtual
189                 void
190         UpdateViewPort(
191                 int x1, int y1,
192                 int x2, int y2
193         ) = 0;
194
195         /**
196          * Get the visible viewport
197          */
198         virtual
199                 const int*
200         GetViewPort() = 0;
201
202         virtual 
203                 void 
204         SetMouseState(
205                 RAS_MouseState mousestate
206         )=0;
207
208         virtual 
209                 void 
210         SetMousePosition(
211                 int x,
212                 int y
213         )=0;
214
215         virtual
216                 RAS_MouseState
217         GetMouseState()
218         {
219                 return m_mousestate;
220         }
221
222         virtual 
223                 void 
224         MakeScreenShot(
225                 const char* filename
226         )=0;
227
228         virtual
229                 void 
230         ResizeWindow(
231                 int width,
232                 int height
233         )=0;
234
235         virtual
236                 void
237         SetFullScreen(
238                 bool enable
239         )=0;
240
241         virtual
242                 bool
243         GetFullScreen()=0;
244
245                 
246         
247 protected:
248         RAS_MouseState m_mousestate;
249
250
251 #ifdef WITH_CXX_GUARDEDALLOC
252         MEM_CXX_CLASS_ALLOC_FUNCS("GE:RAS_ICanvas")
253 #endif
254 };
255
256 #endif  /* __RAS_ICANVAS_H__ */