soc-2008-mxcurioni: first version of lib3ds code. It does NOT work yet and has to...
[blender.git] / source / blender / freestyle / intern / rendering / GLDebugRenderer.h
1 //
2 //  Filename         : GLDebugRenderer.h
3 //  Author(s)        : Stephane Grabli
4 //  Purpose          : Class to render the debug informations related to
5 //                     a scene
6 //  Date of creation : 03/04/2002
7 //
8 ///////////////////////////////////////////////////////////////////////////////
9
10
11 //
12 //  Copyright (C) : Please refer to the COPYRIGHT file distributed 
13 //   with this source distribution. 
14 //
15 //  This program is free software; you can redistribute it and/or
16 //  modify it under the terms of the GNU General Public License
17 //  as published by the Free Software Foundation; either version 2
18 //  of the License, or (at your option) any later version.
19 //
20 //  This program is distributed in the hope that it will be useful,
21 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
22 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 //  GNU General Public License for more details.
24 //
25 //  You should have received a copy of the GNU General Public License
26 //  along with this program; if not, write to the Free Software
27 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
28 //
29 ///////////////////////////////////////////////////////////////////////////////
30
31 #ifndef  GLDEBUGRENDERER_H
32 # define GLDEBUGRENDERER_H
33
34 # include <float.h>
35 # include "../system/FreestyleConfig.h"
36 # include "GLRenderer.h"
37 # include "../view_map/Silhouette.h"
38 # include "../winged_edge/Curvature.h"
39
40 class WSMeshShape;
41 class WSExactShape;
42
43 class LIB_RENDERING_EXPORT GLDebugRenderer : public GLRenderer
44 {
45 public:
46
47   inline GLDebugRenderer() : GLRenderer() {
48     _bboxSize = 2.0;
49     setMaxValue(&_minEdgeSize);
50     _SelectedFEdge = 0;
51   }
52
53   inline ~GLDebugRenderer() {}
54
55   VISIT_DECL(NodeShape)
56
57   VISIT_DECL(IndexedFaceSet)
58   VISIT_DECL(LineRep)
59   VISIT_DECL(OrientedLineRep)
60   VISIT_DECL(VertexRep)
61
62   /*! Renders a bitmap string in world coordinates 
63    *  x, y, z
64    *    The world coordinates of the sentence's starting point
65    *  font
66    *    The font used to display the text. 
67    *    Must be one of :
68    *    - GLUT_STROKE_ROMAN 
69    *    - GLUT_STROKE_MONO_ROMAN 
70    *  string
71    *    The text to display
72    *  size
73    *    The relative size of the text to display
74    */
75   void renderBitmapString(real x, 
76                           real y, 
77                           real z, 
78                           void *font, 
79                           char *string,
80                           float size = 1.f)  ; 
81
82   /*! Reinitialize the Renderer so as the previous 
83    *  text size does not affect the current one.
84    *  iBBoxSize
85    *    The size of the scene bounding box.
86    */
87   inline void ReInit(real iBBoxSize) {_bboxSize = iBBoxSize; setMaxValue(&_minEdgeSize);}
88
89   inline void setSelectedFEdge(FEdge *iFEdge) {_SelectedFEdge = iFEdge;}
90   inline FEdge * selectedFEdge() {return _SelectedFEdge;}
91
92 protected:
93
94   /*! Renders a face made of a triangles strip
95    *    iVertices
96    *      Array of float containing the face vertices. 3 floats per 
97    *      x, y, z vertex coordinates
98    *    iNormals 
99    *      Array of float containing the face normals. 3 floats per 
100    *      x, y, z vertex normal coordinates
101    *    iVIndices
102    *      Array of the indices (to use with the iVertices array) 
103    *      describing the vertices parsing order
104    *    iNIndices
105    *      Array of normals indices (to use with iNormals array)
106    *      describing the normals parsing order
107    *    iNVertices
108    *      The number of vertices in the face
109    */
110   virtual void RenderTriangleStrip(const real *iVertices, 
111                                    const real *iNormals,
112                                    const FrsMaterial *const* iMaterials, 
113                                    const unsigned* iVIndices, 
114                                    const unsigned* iNIndices,
115                                    const unsigned* iMIndices,
116                                    const unsigned iNVertices);
117
118   /*! Renders a face made of a triangles fan
119    *    iVertices
120    *      Array of float containing the face vertices. 3 floats per 
121    *      x, y, z vertex coordinates
122    *    iNormals 
123    *      Array of float containing the face normals. 3 floats per 
124    *      x, y, z vertex normal coordinates
125    *    iVIndices
126    *      Array of the indices (to use with the iVertices array) 
127    *      describing the vertices parsing order
128    *    iNIndices
129    *      Array of normals indices (to use with iNormals array)
130    *      describing the normals parsing order
131    *    iNVertices
132    *      The number of vertices in the face
133    */
134   virtual void RenderTriangleFan(const real *iVertices, 
135                                    const real *iNormals,
136                                    const FrsMaterial *const*iMaterials, 
137                                    const unsigned* iVIndices, 
138                                    const unsigned* iNIndices,
139                                    const unsigned* iMIndices,
140                                    const unsigned iNVertices);
141
142   /*! Renders a face made of single triangles
143    *    iVertices
144    *      Array of float containing the face vertices. 3 floats per 
145    *      x, y, z vertex coordinates
146    *    iNormals 
147    *      Array of float containing the face normals. 3 floats per 
148    *      x, y, z vertex normal coordinates
149    *    iVIndices
150    *      Array of the indices (to use with the iVertices array) 
151    *      describing the vertices parsing order
152    *    iNIndices
153    *      Array of normals indices (to use with iNormals array)
154    *      describing the normals parsing order
155    *    iNVertices
156    *      The number of vertices in the face
157    */
158   virtual void RenderTriangles(const real *iVertices, 
159                                    const real *iNormals,
160                                    const FrsMaterial *const* iMaterials, 
161                                    const unsigned* iVIndices, 
162                                    const unsigned* iNIndices,
163                                    const unsigned* iMIndices,
164                                    const unsigned iNVertices);
165
166   /*! glTranslatef or glTranslated */
167   inline void glTranslater(float x, float y, float z) {glTranslatef(x,y,z);}
168   inline void glTranslater(real x, real y, real z) {glTranslated(x,y,z);}
169
170
171 private:
172
173   inline void setMaxValue(float *oValue) {*oValue = FLT_MAX;}
174   inline void setMaxValue(real *oValue) {*oValue = DBL_MAX;}
175
176   mutable real _bboxSize; 
177   mutable real _minEdgeSize;
178
179   FEdge *_SelectedFEdge;
180 };
181
182 #endif // GLDEBUGRENDERER_H