Merged changes in the trunk up to revision 26856.
[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                 const RAS_Rect &
135         GetDisplayArea(
136         ) const = 0;
137
138         virtual
139                 void
140         SetDisplayArea(RAS_Rect *rect
141         ) = 0;
142
143         /**
144          * Used to get canvas area within blender.
145          */
146         virtual
147                 RAS_Rect &
148         GetWindowArea(
149         ) = 0;
150
151         /**
152          * Set the visible vieport 
153          */
154
155         virtual
156                 void
157         SetViewPort(
158                 int x1, int y1,
159                 int x2, int y2
160         ) = 0; 
161
162         virtual 
163                 void 
164         SetMouseState(
165                 RAS_MouseState mousestate
166         )=0;
167
168         virtual 
169                 void 
170         SetMousePosition(
171                 int x,
172                 int y
173         )=0;
174
175         virtual 
176                 void 
177         MakeScreenShot(
178                 const char* filename
179         )=0;
180         
181         
182 #ifdef WITH_CXX_GUARDEDALLOC
183 public:
184         void *operator new( unsigned int num_bytes) { return MEM_mallocN(num_bytes, "GE:RAS_ICanvas"); }
185         void operator delete( void *mem ) { MEM_freeN(mem); }
186 #endif
187 };
188
189 #endif //__RAS_ICANVAS
190