1 /***********************************************************************
2     created:    Fri Jan 15 2010
3     author:     Eugene Marcotte
4 *************************************************************************/
5 /***************************************************************************
6  *   Copyright (C) 2004 - 2010 Paul D Turner & The CEGUI Development Team
7  *
8  *   Permission is hereby granted, free of charge, to any person obtaining
9  *   a copy of this software and associated documentation files (the
10  *   "Software"), to deal in the Software without restriction, including
11  *   without limitation the rights to use, copy, modify, merge, publish,
12  *   distribute, sublicense, and/or sell copies of the Software, and to
13  *   permit persons to whom the Software is furnished to do so, subject to
14  *   the following conditions:
15  *
16  *   The above copyright notice and this permission notice shall be
17  *   included in all copies or substantial portions of the Software.
18  *
19  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25  *   OTHER DEALINGS IN THE SOFTWARE.
26  ***************************************************************************/
27 #ifndef _CEGUINullGeometryBuffer_h_
28 #define _CEGUINullGeometryBuffer_h_
29 
30 #include "../../GeometryBuffer.h"
31 #include "CEGUI/RendererModules/Null/Renderer.h"
32 #include "../../Rect.h"
33 #include "../../Colour.h"
34 #include "../../Vertex.h"
35 #include "../../Quaternion.h"
36 
37 #include <utility>
38 #include <vector>
39 
40 #if defined(_MSC_VER)
41 #   pragma warning(push)
42 #   pragma warning(disable : 4251)
43 #endif
44 
45 // Start of CEGUI namespace section
46 namespace CEGUI
47 {
48 //! Implementation of CEGUI::GeometryBuffer for the Null engine
49 class NULL_GUIRENDERER_API NullGeometryBuffer : public GeometryBuffer
50 {
51 public:
52     //! Constructor
53     NullGeometryBuffer();
54     //! Destructor
55     virtual ~NullGeometryBuffer();
56 
57     // implement CEGUI::GeometryBuffer interface.
58     void draw() const;
59     void setTranslation(const Vector3f& v);
60     void setRotation(const Quaternion& r);
61     void setPivot(const Vector3f& p);
62     void setClippingRegion(const Rectf& region);
63     void appendVertex(const Vertex& vertex);
64     void appendGeometry(const Vertex* const vbuff, uint vertex_count);
65     void setActiveTexture(Texture* texture);
66     void reset();
67     Texture* getActiveTexture() const;
68     uint getVertexCount() const;
69     uint getBatchCount() const;
70     void setRenderEffect(RenderEffect* effect);
71     RenderEffect* getRenderEffect();
72     void setClippingActive(const bool active);
73     bool isClippingActive() const;
74 
75 protected:
76     //! Texture that is set as active
77     NullTexture* d_activeTexture;
78     //! rectangular clip region
79     Rectf d_clipRect;
80     //! whether clipping will be active for the current batch
81     bool d_clippingActive;
82     //! translation vector
83     Vector3f d_translation;
84     //! rotation quaternion
85     Quaternion d_rotation;
86     //! pivot point for rotation
87     Vector3f d_pivot;
88     //! RenderEffect that will be used by the GeometryBuffer
89     RenderEffect* d_effect;
90     //! type of container used to queue the geometry
91     typedef std::vector<Vertex> VertexList;
92     //! container where added geometry is stored.
93     VertexList d_vertices;
94 };
95 
96 
97 } // End of  CEGUI namespace section
98 
99 #if defined(_MSC_VER)
100 #   pragma warning(pop)
101 #endif
102 
103 #endif  // end of guard _CEGUINullGeometryBuffer_h_
104