Merged changes in the trunk up to revision 28600.
[blender.git] / source / blender / freestyle / intern / stroke / StrokeRenderer.h
1 //
2 //  Filename         : StrokeRenderer.h
3 //  Author(s)        : Fredo Durand
4 //  Purpose          : Classes to render a stroke with OpenGL
5 //  Date of creation : 09/09/2002
6 //
7 ///////////////////////////////////////////////////////////////////////////////
8
9
10 //
11 //  Copyright (C) : Please refer to the COPYRIGHT file distributed 
12 //   with this source distribution. 
13 //
14 //  This program is free software; you can redistribute it and/or
15 //  modify it under the terms of the GNU General Public License
16 //  as published by the Free Software Foundation; either version 2
17 //  of the License, or (at your option) any later version.
18 //
19 //  This program is distributed in the hope that it will be useful,
20 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
21 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 //  GNU General Public License for more details.
23 //
24 //  You should have received a copy of the GNU General Public License
25 //  along with this program; if not, write to the Free Software
26 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
27 //
28 ///////////////////////////////////////////////////////////////////////////////
29
30 #ifndef  STROKE_RENDERER_H
31 # define STROKE_RENDERER_H
32
33 # include "Stroke.h"
34 # include <vector>
35 # include <map>
36 # include <utility>
37 # include "../system/FreestyleConfig.h"
38 # include "StrokeRep.h"
39 # include <string.h>
40
41
42 /**********************************/
43 /*                                */
44 /*                                */
45 /*         TextureManager         */
46 /*                                */
47 /*                                */
48 /**********************************/
49
50
51 /*! Class to load textures
52  */
53 class LIB_STROKE_EXPORT TextureManager
54 {
55 public:
56
57   TextureManager ();
58   virtual ~TextureManager ();
59   static TextureManager * getInstance() {return _pInstance;}
60   void load () ;
61   unsigned getBrushTextureIndex(string name, Stroke::MediumType iType = Stroke::OPAQUE_MEDIUM) ;
62
63   inline bool hasLoaded() const {return _hasLoadedTextures;}
64   inline unsigned int getDefaultTextureId() const {return _defaultTextureId;}
65
66   struct LIB_STROKE_EXPORT Options
67   {
68
69     static void setPatternsPath(const string& path);
70     static string getPatternsPath();
71
72     static void setBrushesPath(const string& path);
73     static string getBrushesPath();
74   };
75
76  protected:
77   virtual void loadStandardBrushes() = 0;
78   virtual unsigned loadBrush(string fileName, Stroke::MediumType = Stroke::OPAQUE_MEDIUM) = 0;
79   
80   typedef std::pair<string,Stroke::MediumType> BrushTexture;
81   struct cmpBrushTexture{
82     bool operator()(const BrushTexture& bt1, const BrushTexture& bt2) const{
83       int r = strcmp(bt1.first.c_str(), bt2.first.c_str());
84       if(r != 0)
85         return (r<0);
86       else
87         return (bt1.second < bt2.second);
88     }
89   };
90   typedef std::map<BrushTexture, unsigned, cmpBrushTexture> brushesMap;
91
92   static TextureManager * _pInstance;
93   bool                  _hasLoadedTextures;
94   brushesMap            _brushesMap;
95   static string         _patterns_path;
96   static string         _brushes_path;
97   unsigned int _defaultTextureId;
98 };
99
100
101 /**********************************/
102 /*                                */
103 /*                                */
104 /*         StrokeRenderer         */
105 /*                                */
106 /*                                */
107 /**********************************/
108
109 /*! Class to render a stroke. 
110   Creates a triangle strip and stores it
111   strip is lazily created at the first rendering
112 */
113 class LIB_STROKE_EXPORT StrokeRenderer
114 {
115  public:
116   StrokeRenderer();
117   virtual ~StrokeRenderer ();
118
119   /*! Renders a stroke rep */
120   virtual void RenderStrokeRep(StrokeRep *iStrokeRep) const = 0;
121   virtual void RenderStrokeRepBasic(StrokeRep *iStrokeRep) const = 0;
122
123   // initializes the texture manager
124   // lazy, checks if it has already been done
125   static bool loadTextures() ;
126   
127   //static unsigned int getTextureIndex(unsigned int index)  ;
128   static TextureManager *_textureManager;
129 };
130
131
132 #endif // STROKE_RENDERER_H