All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
WorldTextRenderer.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "IWorldTextRenderer.h"
7 #include "Fonts.h"
8 #include "Text.h"
9 #include "TextRendererStateComponent.h"
10 #include "BatchedTextRenderable.h"
11 
12 
13 namespace Eegeo
14 {
15  namespace Text
16  {
18  {
19  public:
20  static WorldTextRenderer* Create(Fonts::IFontMaterialSetFactory& fontMaterialSetFactory,
21  FontMaterialCache& fontMaterialCache,
22  IBatchedWorldTextRenderableFactory& batchedWorldTextRenderableFactory,
23  BatchedWorldTextRenderable::VertexBufferType& worldTextVertexBuffer,
24  bool enableSupersampling);
25 
27 
28  WorldTextRenderer(TextRendererStateComponent* pTextRendererStateComponent,
29  BatchedWorldTextRenderableCache* pBatchedWorldTextRenderableCache);
31 
32  void SetFontInstance(const Fonts::FontInstance* pFontInstance)
33  {
34  m_pTextRendererStateComponent->SetFontInstance(pFontInstance);
35  }
36 
37  void SetDefaultState();
38 
39  void SetTextSize(float pixelHeight)
40  {
41  m_pTextRendererStateComponent->SetTextSize(pixelHeight);
42  }
43 
44  void SetGlyphColor(const v4& color)
45  {
46  m_pTextRendererStateComponent->SetGlyphColor(color);
47  }
48 
49  void SetOutlineColor(const v4& color)
50  {
51  m_pTextRendererStateComponent->SetOutlineColor(color);
52  }
53 
54  void SetHaloStyle(const v4& color, float haloWidth, float haloHardness)
55  {
56  m_pTextRendererStateComponent->SetHaloStyle(color, haloWidth, haloHardness);
57  }
58 
59  void SetTransform(const v2& translate, const v2& rotate, const v2& scale)
60  {
61  m_pTextRendererStateComponent->SetTransform(translate, rotate, scale);
62  }
63 
64  void SetDepthTest(bool depthTest)
65  {
66  m_pTextRendererStateComponent->SetDepthTest(depthTest);
67  }
68 
69  void SetStencilTest(bool stencilTest)
70  {
71  m_pTextRendererStateComponent->SetStencilTest(stencilTest);
72  }
73 
74  void SetStencilFunc(GLenum stencilFunc, int stencilRef, u32 stencilMask)
75  {
76  m_pTextRendererStateComponent->SetStencilFunc(stencilFunc, stencilRef, stencilMask);
77  }
78 
79  void SetStencilMaskedStyle(bool enable, GLenum stencilFunc, const v4& glyphColor, const v4& haloColor)
80  {
81  m_pTextRendererStateComponent->SetStencilMaskedStyle(enable, stencilFunc, glyphColor, haloColor);
82  }
83 
84  void SetRenderLayer(Rendering::LayerIds::Values layer, int subLayer)
85  {
86  m_pTextRendererStateComponent->SetRenderLayer(layer, subLayer);
87  }
88 
89  void SetAlpha(float alpha)
90  {
91  m_pTextRendererStateComponent->SetAlpha(alpha);
92  }
93 
94  void SetModelToWorldTransform(const m44& transform)
95  {
96  m_modelToWorldTransform = transform;
97  }
98 
99  void DrawShapedGlyph(const ShapedGlyph& shapedGlyph);
100 
101  void DrawShapedGlyphs(const std::vector<Text::ShapedGlyph>& shapedGlyphs);
102 
103  void EnqueueRenderables(const Rendering::RenderContext& renderContext, Rendering::RenderQueue& renderQueue);
104 
105  void Finalize();
106 
107  void Upload();
108 
109  void Reset();
110 
111  private:
112 
113  void SetupRenderables();
114 
115  void DrawGlyphWorldSpace(const Fonts::FontCharacter& fontCharacter, const v2& shapedTextPos);
116 
117  TextRendererStateComponent* m_pTextRendererStateComponent;
118 
119  BatchedWorldTextRenderableCache* m_pBatchedWorldTextRenderableCache;
120 
121  m44 m_modelToWorldTransform;
122  };
123  }
124 }