Angel 3.2
A 2D Game Prototyping Engine
GwenRenderer.h
1 
2 // Copyright (C) 2008-2013, Shane Liesegang
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of the copyright holder nor the names of any
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
29 
30 #pragma once
31 
32 #include "../Util/StringUtil.h"
33 #include "../Infrastructure/Color.h"
34 
35 #include "Gwen/Gwen.h"
36 
37 class GwenRenderer : public Gwen::Renderer::Base
38 {
39 public:
40  GwenRenderer(const String& texturePath);
41  ~GwenRenderer();
42 
43  virtual void FinishInit();
44 
45  virtual void Begin();
46  virtual void End();
47 
48  virtual void SetDrawColor( Gwen::Color color );
49 
50  virtual void DrawFilledRect( Gwen::Rect rect );
51 
52  virtual void StartClip();
53  virtual void EndClip();
54 
55  virtual void LoadTexture( Gwen::Texture* pTexture );
56  virtual void FreeTexture( Gwen::Texture* pTexture );
57  virtual void DrawTexturedRect( Gwen::Texture* pTexture, Gwen::Rect pTargetRect, float u1=0.0f, float v1=0.0f, float u2=1.0f, float v2=1.0f );
58  //virtual void DrawMissingImage( Gwen::Rect pTargetRect );
59  virtual Gwen::Color PixelColour( Gwen::Texture* pTexture, unsigned int x, unsigned int y, const Gwen::Color& col_default = Gwen::Color( 255, 255, 255, 255 ) );
60 
61  //virtual Gwen::Renderer::ICacheToTexture* GetCTT();
62 
63  virtual void LoadFont( Gwen::Font* pFont );
64  virtual void FreeFont( Gwen::Font* pFont );
65  virtual void RenderText( Gwen::Font* pFont, Gwen::Point pos, const Gwen::UnicodeString& text );
66  virtual Gwen::Point MeasureText( Gwen::Font* pFont, const Gwen::UnicodeString& text );
67 
68  //
69  // No need to implement these functions in your derived class, but if
70  // you can do them faster than the default implementation it's a good idea to.
71  //
72  // virtual void DrawLinedRect( Gwen::Rect rect );
73  // virtual void DrawPixel( int x, int y );
74  // virtual void DrawShavedCornerRect( Gwen::Rect rect, bool bSlight = false );
75  // virtual Gwen::Point MeasureText( Gwen::Font* pFont, const Gwen::String& text );
76  // virtual void RenderText( Gwen::Font* pFont, Gwen::Point pos, const Gwen::String& text );
77 
78 private:
79  struct Vertex
80  {
81  float x, y, z;
82  float u, v;
83  unsigned char r, g, b, a;
84  };
85 
86  static const int s_maxVerts = 1024;
87 
88  void Flush();
89  void AddVertex(int x, int y, float u = 0.0f , float v = 0.0f);
90 
91  Gwen::Color _color;
92  int _vertNum;
93  Vertex _vertices[ s_maxVerts ];
94 
95  unsigned int _windowWidth, _windowHeight;
96 
97  std::map<Gwen::UnicodeString, String> _unicodeCache;
98  std::vector<Color> _skinTexture;
99 };
100