114783b9a47a9908e5aaaf425f0e72f29429bbc2
[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
38 #include <vector>
39 #include <algorithm>
40
41 class           RAS_IPolyMaterial;
42 struct          RAS_LightObject;
43
44 class RAS_IRenderTools
45 {
46
47 protected:
48         float   m_viewmat[16];
49         void*   m_clientobject;
50         void*   m_auxilaryClientInfo;
51
52         bool    m_modified;
53         
54         std::vector<struct      RAS_LightObject*> m_lights;
55
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         
65         RAS_IRenderTools(
66         ) :
67                 m_clientobject(NULL),
68                 m_modified(true)
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         )=0;
132
133         virtual 
134                 void    
135         SetViewMat(
136                 const MT_Transform& trans
137         );
138
139         virtual 
140                 int             
141         ProcessLighting(
142                 int layer
143         )=0;
144
145                 void    
146         SetClientObject(
147                 void* obj
148         );
149
150                 void    
151         SetAuxilaryClientInfo(
152                 void* inf
153         );
154
155         virtual 
156                 void    
157         PushMatrix(
158         )=0;
159
160         virtual 
161                 void    
162         PopMatrix(
163         )=0;
164
165         virtual 
166                 void            
167         AddLight(
168                 struct  RAS_LightObject* lightobject
169         );
170
171         virtual 
172                 void            
173         RemoveLight(
174                 struct RAS_LightObject* lightobject
175         );
176
177         virtual
178                 void
179         MotionBlur(RAS_IRasterizer* rasterizer)=0;
180
181         virtual 
182                 class RAS_IPolyMaterial*        
183         CreateBlenderPolyMaterial(
184                 const STR_String &texname,
185                 bool ba,
186                 const STR_String& matname,
187                 int tile,
188                 int tilexrep,
189                 int tileyrep,
190                 int mode,
191                 bool transparant,
192                 bool zsort,
193                 int lightlayer,
194                 bool bIsTriangle,
195                 void* clientobject,
196                 void* tface
197         )=0;
198 };
199
200 #endif //__RAS_IRENDERTOOLS
201
202