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