Initial revision
[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
39 #include <vector>
40 #include <algorithm>
41
42 class           RAS_IPolyMaterial;
43 struct          RAS_LightObject;
44
45 class RAS_IRenderTools
46 {
47
48 protected:
49         float   m_viewmat[16];
50         void*   m_clientobject;
51         void*   m_auxilaryClientInfo;
52
53         bool    m_modified;
54         
55         std::vector<struct      RAS_LightObject*> m_lights;
56
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_modified(true),
69                 m_clientobject(NULL)    
70         {
71         };
72
73         virtual 
74         ~RAS_IRenderTools(
75         ) {};
76
77         virtual 
78                 void    
79         BeginFrame(
80                 RAS_IRasterizer* rasty
81         )=0;
82
83         virtual 
84                 void    
85         EndFrame(
86                 RAS_IRasterizer* rasty
87         )=0;
88
89         // the following function was formerly called 'Render'
90         // by it doesn't render anymore
91         // It only sets the transform for the rasterizer
92         // so must be renamed to 'applyTransform' or something
93
94         virtual 
95                 void    
96         applyTransform(
97                 class RAS_IRasterizer* rasty,
98                 double* oglmatrix,
99                 int drawingmode
100         )=0;
101
102         /**
103          * Renders 2D text string.
104          * @param mode      The type of text
105          * @param text          The string to render.
106          * @param xco           Position on the screen (origin in lower left corner).
107          * @param yco           Position on the screen (origin in lower left corner).
108          * @param width         Width of the canvas to draw to.
109          * @param height        Height of the canvas to draw to.
110          */
111         virtual 
112                 void    
113         RenderText2D(
114                 RAS_TEXT_RENDER_MODE mode,
115                 const char* text,
116                 int xco,
117                 int yco,
118                 int width,
119                 int height
120         ) = 0;
121
122         // 3d text, mapped on polygon
123         virtual 
124                 void    
125         RenderText(
126                 int mode,
127                 RAS_IPolyMaterial* polymat,
128                 float v1[3],
129                 float v2[3],
130                 float v3[3],
131                 float v4[3]
132         )=0;
133
134         virtual 
135                 void    
136         SetViewMat(
137                 const MT_Transform& trans
138         );
139
140         virtual 
141                 int             
142         ProcessLighting(
143                 int layer
144         )=0;
145
146                 void    
147         SetClientObject(
148                 void* obj
149         );
150
151                 void    
152         SetAuxilaryClientInfo(
153                 void* inf
154         );
155
156         virtual 
157                 void    
158         PushMatrix(
159         )=0;
160
161         virtual 
162                 void    
163         PopMatrix(
164         )=0;
165
166         virtual 
167                 void            
168         AddLight(
169                 struct  RAS_LightObject* lightobject
170         );
171
172         virtual 
173                 void            
174         RemoveLight(
175                 struct RAS_LightObject* lightobject
176         );
177
178         virtual 
179                 class RAS_IPolyMaterial*        
180         CreateBlenderPolyMaterial(
181                 const STR_String &texname,
182                 bool ba,
183                 const STR_String& matname,
184                 int tile,
185                 int tilexrep,
186                 int tileyrep,
187                 int mode,
188                 int transparant,
189                 int lightlayer,
190                 bool bIsTriangle,
191                 void* clientobject,
192                 void* tface
193         )=0;
194 };
195
196 #endif //__RAS_IRENDERTOOLS