Merged 15170:15635 from trunk (no conflicts or even merges)
[blender.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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 class           RAS_IPolyMaterial;
40 struct          RAS_LightObject;
41
42
43 class RAS_IRenderTools
44 {
45
46 protected:
47         float   m_viewmat[16];
48         void*   m_clientobject;
49         void*   m_auxilaryClientInfo;
50
51         bool    m_modified;
52         
53         std::vector<struct      RAS_LightObject*> m_lights;
54         
55         RAS_2DFilterManager m_filtermanager;
56
57 public:
58         enum RAS_TEXT_RENDER_MODE {
59                 RAS_TEXT_RENDER_NODEF = 0,
60                 RAS_TEXT_NORMAL,
61                 RAS_TEXT_PADDED,
62                 RAS_TEXT_MAX
63         };
64         enum RAS_LIGHT_MODE {
65                 RAS_LIGHT_NONE = -1,
66                 RAS_LIGHT_OBJECT_LAYER = 0
67         };
68
69         RAS_IRenderTools(
70         ) :
71                 m_clientobject(NULL),
72                 m_modified(true)
73         {
74         };
75
76         virtual 
77         ~RAS_IRenderTools(
78         ) {};
79
80         virtual 
81                 void    
82         BeginFrame(
83                 RAS_IRasterizer* rasty
84         )=0;
85
86         virtual 
87                 void    
88         EndFrame(
89                 RAS_IRasterizer* rasty
90         )=0;
91
92         // the following function was formerly called 'Render'
93         // by it doesn't render anymore
94         // It only sets the transform for the rasterizer
95         // so must be renamed to 'applyTransform' or something
96
97         virtual 
98                 void    
99         applyTransform(
100                 class RAS_IRasterizer* rasty,
101                 double* oglmatrix,
102                 int drawingmode
103         )=0;
104
105         /**
106          * Renders 2D text string.
107          * @param mode      The type of text
108          * @param text          The string to render.
109          * @param xco           Position on the screen (origin in lower left corner).
110          * @param yco           Position on the screen (origin in lower left corner).
111          * @param width         Width of the canvas to draw to.
112          * @param height        Height of the canvas to draw to.
113          */
114         virtual 
115                 void    
116         RenderText2D(
117                 RAS_TEXT_RENDER_MODE mode,
118                 const char* text,
119                 int xco,
120                 int yco,
121                 int width,
122                 int height
123         ) = 0;
124
125         // 3d text, mapped on polygon
126         virtual 
127                 void    
128         RenderText(
129                 int mode,
130                 RAS_IPolyMaterial* polymat,
131                 float v1[3],
132                 float v2[3],
133                 float v3[3],
134                 float v4[3]
135         )=0;
136
137         virtual 
138                 void    
139         SetViewMat(
140                 const MT_Transform& trans
141         );
142
143         virtual 
144                 int             
145         ProcessLighting(
146                 int layer
147         )=0;
148
149         virtual
150                 void    
151         SetClientObject(
152                 void* obj
153         );
154
155                 void    
156         SetAuxilaryClientInfo(
157                 void* inf
158         );
159
160         virtual 
161                 void    
162         PushMatrix(
163         )=0;
164
165         virtual 
166                 void    
167         PopMatrix(
168         )=0;
169
170         virtual 
171                 void            
172         AddLight(
173                 struct  RAS_LightObject* lightobject
174         );
175
176         virtual 
177                 void            
178         RemoveLight(
179                 struct RAS_LightObject* lightobject
180         );
181
182         virtual
183                 void
184         MotionBlur(RAS_IRasterizer* rasterizer)=0;
185
186         virtual
187                 void
188                 Update2DFilter(vector<STR_String>& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)=0;
189
190         virtual
191                 void
192                 Render2DFilters(RAS_ICanvas* canvas)=0;
193
194         virtual 
195                 class RAS_IPolyMaterial*        
196         CreateBlenderPolyMaterial(
197                 const STR_String &texname,
198                 bool ba,
199                 const STR_String& matname,
200                 int tile,
201                 int tilexrep,
202                 int tileyrep,
203                 int mode,
204                 bool transparant,
205                 bool zsort,
206                 int lightlayer,
207                 bool bIsTriangle,
208                 void* clientobject,
209                 void* tface
210         )=0;
211 };
212
213 #endif //__RAS_IRENDERTOOLS
214
215
216