2d-Filters feature and actuators.
[blender.git] / source / gameengine / Rasterizer / RAS_IRenderTools.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
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 class           RAS_IPolyMaterial;
43 struct          RAS_LightObject;
44
45
46 class RAS_IRenderTools
47 {
48
49 protected:
50         float   m_viewmat[16];
51         void*   m_clientobject;
52         void*   m_auxilaryClientInfo;
53
54         bool    m_modified;
55         
56         std::vector<struct      RAS_LightObject*> m_lights;
57         
58         RAS_2DFilterManager m_filtermanager;
59
60 public:
61         enum RAS_TEXT_RENDER_MODE {
62                 RAS_TEXT_RENDER_NODEF = 0,
63                 RAS_TEXT_NORMAL,
64                 RAS_TEXT_PADDED,
65                 RAS_TEXT_MAX
66         };
67
68         RAS_IRenderTools(
69         ) :
70                 m_clientobject(NULL),
71                 m_modified(true)
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 2D text string.
106          * @param mode      The type of text
107          * @param text          The string to render.
108          * @param xco           Position on the screen (origin in lower left corner).
109          * @param yco           Position on the screen (origin in lower left corner).
110          * @param width         Width of the canvas to draw to.
111          * @param height        Height of the canvas to draw to.
112          */
113         virtual 
114                 void    
115         RenderText2D(
116                 RAS_TEXT_RENDER_MODE mode,
117                 const char* text,
118                 int xco,
119                 int yco,
120                 int width,
121                 int height
122         ) = 0;
123
124         // 3d text, mapped on polygon
125         virtual 
126                 void    
127         RenderText(
128                 int mode,
129                 RAS_IPolyMaterial* polymat,
130                 float v1[3],
131                 float v2[3],
132                 float v3[3],
133                 float v4[3]
134         )=0;
135
136         virtual 
137                 void    
138         SetViewMat(
139                 const MT_Transform& trans
140         );
141
142         virtual 
143                 int             
144         ProcessLighting(
145                 int layer
146         )=0;
147
148                 void    
149         SetClientObject(
150                 void* obj
151         );
152
153                 void    
154         SetAuxilaryClientInfo(
155                 void* inf
156         );
157
158         virtual 
159                 void    
160         PushMatrix(
161         )=0;
162
163         virtual 
164                 void    
165         PopMatrix(
166         )=0;
167
168         virtual 
169                 void            
170         AddLight(
171                 struct  RAS_LightObject* lightobject
172         );
173
174         virtual 
175                 void            
176         RemoveLight(
177                 struct RAS_LightObject* lightobject
178         );
179
180         virtual
181                 void
182         MotionBlur(RAS_IRasterizer* rasterizer)=0;
183
184         virtual
185                 void
186                 Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass)=0;
187
188         virtual
189                 void
190                 Render2DFilters(RAS_ICanvas* canvas)=0;
191
192         virtual 
193                 class RAS_IPolyMaterial*        
194         CreateBlenderPolyMaterial(
195                 const STR_String &texname,
196                 bool ba,
197                 const STR_String& matname,
198                 int tile,
199                 int tilexrep,
200                 int tileyrep,
201                 int mode,
202                 bool transparant,
203                 bool zsort,
204                 int lightlayer,
205                 bool bIsTriangle,
206                 void* clientobject,
207                 void* tface
208         )=0;
209 };
210
211 #endif //__RAS_IRENDERTOOLS
212
213
214