merged 28477:29285 from trunk
[blender-staging.git] / source / gameengine / Rasterizer / RAS_IRenderTools.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_IRENDERTOOLS
30 #define __RAS_IRENDERTOOLS
31
32 #include "MT_Transform.h"
33 #include "RAS_IRasterizer.h"
34 #include "RAS_2DFilterManager.h"
35
36 #include <vector>
37 #include <algorithm>
38
39 #ifdef WITH_CXX_GUARDEDALLOC
40 #include "MEM_guardedalloc.h"
41 #endif
42
43 class           RAS_IPolyMaterial;
44 struct          RAS_LightObject;
45
46
47 class RAS_IRenderTools
48 {
49
50 protected:
51         void*   m_clientobject;
52         void*   m_auxilaryClientInfo;
53
54         std::vector<struct      RAS_LightObject*> m_lights;
55         
56         RAS_2DFilterManager m_filtermanager;
57
58 public:
59         enum RAS_TEXT_RENDER_MODE {
60                 RAS_TEXT_RENDER_NODEF = 0,
61                 RAS_TEXT_NORMAL,
62                 RAS_TEXT_PADDED,
63                 RAS_TEXT_MAX
64         };
65
66         RAS_IRenderTools(
67         ) :
68                 m_clientobject(NULL)
69         {
70         };
71
72         virtual 
73         ~RAS_IRenderTools(
74         ) {};
75
76         virtual 
77                 void    
78         BeginFrame(
79                 RAS_IRasterizer* rasty
80         )=0;
81
82         virtual 
83                 void    
84         EndFrame(
85                 RAS_IRasterizer* rasty
86         )=0;
87
88         // the following function was formerly called 'Render'
89         // by it doesn't render anymore
90         // It only sets the transform for the rasterizer
91         // so must be renamed to 'applyTransform' or something
92
93         virtual 
94                 void    
95         applyTransform(
96                 class RAS_IRasterizer* rasty,
97                 double* oglmatrix,
98                 int drawingmode
99         )=0;
100
101         /**
102          * Renders 2D text string.
103          * @param mode      The type of text
104          * @param text          The string to render.
105          * @param xco           Position on the screen (origin in lower left corner).
106          * @param yco           Position on the screen (origin in lower left corner).
107          * @param width         Width of the canvas to draw to.
108          * @param height        Height of the canvas to draw to.
109          */
110         virtual 
111                 void    
112         RenderText2D(
113                 RAS_TEXT_RENDER_MODE mode,
114                 const char* text,
115                 int xco,
116                 int yco,
117                 int width,
118                 int height
119         ) = 0;
120
121         // 3d text, mapped on polygon
122         virtual 
123                 void    
124         RenderText(
125                 int mode,
126                 RAS_IPolyMaterial* polymat,
127                 float v1[3],
128                 float v2[3],
129                 float v3[3],
130                 float v4[3],
131                 int glattrib
132         )=0;
133
134         virtual 
135                 void            
136         ProcessLighting(
137                 RAS_IRasterizer *rasty,
138                 bool uselights,
139                 const MT_Transform& trans
140         )=0;
141
142         virtual
143                 void    
144         SetClientObject(
145                 RAS_IRasterizer* rasty,
146                 void* obj
147         );
148
149                 void    
150         SetAuxilaryClientInfo(
151                 void* inf
152         );
153
154         virtual 
155                 void    
156         PushMatrix(
157         )=0;
158
159         virtual 
160                 void    
161         PopMatrix(
162         )=0;
163
164         virtual 
165                 void            
166         AddLight(
167                 struct  RAS_LightObject* lightobject
168         );
169
170         virtual 
171                 void            
172         RemoveLight(
173                 struct RAS_LightObject* lightobject
174         );
175
176         virtual
177                 void
178         MotionBlur(RAS_IRasterizer* rasterizer)=0;
179                 
180                 
181 #ifdef WITH_CXX_GUARDEDALLOC
182 public:
183         void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:RAS_IRenderTools"); }
184         void operator delete( void *mem ) { MEM_freeN(mem); }
185 #endif
186 };
187
188 #endif //__RAS_IRENDERTOOLS
189
190
191