Merging r50625 through r51896 from trunk into soc-2011-tomato
[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          * Get the visible viewport
185          */
186         virtual
187                 const int*
188         GetViewPort() = 0;
189
190         virtual 
191                 void 
192         SetMouseState(
193                 RAS_MouseState mousestate
194         )=0;
195
196         virtual 
197                 void 
198         SetMousePosition(
199                 int x,
200                 int y
201         )=0;
202
203         virtual
204                 RAS_MouseState
205         GetMouseState()
206         {
207                 return m_mousestate;
208         }
209
210         virtual 
211                 void 
212         MakeScreenShot(
213                 const char* filename
214         )=0;
215
216         virtual
217                 void 
218         ResizeWindow(
219                 int width,
220                 int height
221         )=0;
222
223                 
224         
225 protected:
226         RAS_MouseState m_mousestate;
227
228
229 #ifdef WITH_CXX_GUARDEDALLOC
230         MEM_CXX_CLASS_ALLOC_FUNCS("GE:RAS_ICanvas")
231 #endif
232 };
233
234 #endif  /* __RAS_ICANVAS_H__ */