part 1 of merge from trunk at r30358; it compiles, but doesn't link quite yet :)
[blender-staging.git] / source / gameengine / Rasterizer / RAS_ICanvas.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 #ifndef __RAS_ICANVAS
30 #define __RAS_ICANVAS
31
32 /**
33  * 2D rendering device context. The connection from 3d rendercontext to 2d surface.
34  */
35
36 #ifdef WITH_CXX_GUARDEDALLOC
37 #include "MEM_guardedalloc.h"
38 #endif
39
40 class RAS_Rect;
41
42
43 class RAS_ICanvas
44 {
45 public:
46         enum BufferType {
47                 COLOR_BUFFER=1,
48                 DEPTH_BUFFER=2
49         };
50
51         enum RAS_MouseState
52         {
53                 MOUSE_INVISIBLE=1,
54                 MOUSE_WAIT,
55                 MOUSE_NORMAL
56         };
57
58         virtual 
59         ~RAS_ICanvas(
60         ) {
61         };
62
63         virtual 
64                 void 
65         Init(
66         ) = 0;
67
68         virtual 
69                 void 
70         BeginFrame(
71         )=0;
72
73         virtual 
74                 void 
75         EndFrame(
76         )=0;
77
78         /**
79          * Initializes the canvas for drawing.  Drawing to the canvas is
80          * only allowed between BeginDraw() and EndDraw().
81          *
82          * @retval false Acquiring the canvas failed.
83          * @retval true Acquiring the canvas succeeded.
84          *
85          */
86
87         virtual 
88                 bool 
89         BeginDraw(
90         )=0;
91
92         /**
93          * Unitializes the canvas for drawing.
94          */
95
96         virtual 
97                 void 
98         EndDraw(
99         )=0;
100
101
102         /// probably needs some arguments for PS2 in future
103         virtual 
104                 void 
105         SwapBuffers(
106         )=0;
107  
108         virtual 
109                 void 
110         ClearBuffer(
111                 int type
112         )=0;
113
114         virtual 
115                 void 
116         ClearColor(
117                 float r,
118                 float g,
119                 float b,
120                 float a
121         )=0;
122
123         virtual 
124                 int      
125         GetWidth(
126         ) const = 0;
127
128         virtual 
129                 int      
130         GetHeight(
131         ) const = 0;
132
133         virtual
134                 int
135         GetMouseX( int x
136         )=0;
137
138         virtual
139                 int
140         GetMouseY( int y
141         )= 0;
142
143         virtual
144                 float
145         GetMouseNormalizedX( int x
146         )=0;
147
148         virtual
149                 float
150         GetMouseNormalizedY( int y
151         )= 0;
152
153         virtual 
154                 const RAS_Rect &
155         GetDisplayArea(
156         ) const = 0;
157
158         virtual
159                 void
160         SetDisplayArea(RAS_Rect *rect
161         ) = 0;
162
163         /**
164          * Used to get canvas area within blender.
165          */
166         virtual
167                 RAS_Rect &
168         GetWindowArea(
169         ) = 0;
170
171         /**
172          * Set the visible vieport 
173          */
174
175         virtual
176                 void
177         SetViewPort(
178                 int x1, int y1,
179                 int x2, int y2
180         ) = 0; 
181
182         virtual 
183                 void 
184         SetMouseState(
185                 RAS_MouseState mousestate
186         )=0;
187
188         virtual 
189                 void 
190         SetMousePosition(
191                 int x,
192                 int y
193         )=0;
194
195         virtual
196                 RAS_MouseState
197         GetMouseState()
198         {
199                 return m_mousestate;
200         }
201
202         virtual 
203                 void 
204         MakeScreenShot(
205                 const char* filename
206         )=0;
207         
208 protected:
209         RAS_MouseState m_mousestate;
210         
211 #ifdef WITH_CXX_GUARDEDALLOC
212 public:
213         void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:RAS_ICanvas"); }
214         void operator delete( void *mem ) { MEM_freeN(mem); }
215 #endif
216 };
217
218 #endif //__RAS_ICANVAS
219