Crazy Eddie's GUI System  0.8.7
RendererModules/DirectFB/GeometryBuffer.h
1 /***********************************************************************
2  created: Tue Mar 10 2009
3  author: Paul D Turner (parts based on code by Keith Mok)
4 *************************************************************************/
5 /***************************************************************************
6  * Copyright (C) 2004 - 2009 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 _CEGUIDirectFBGeometryBuffer_h_
28 #define _CEGUIDirectFBGeometryBuffer_h_
29 
30 #include "CEGUI/GeometryBuffer.h"
31 #include "CEGUI/Rect.h"
32 #include "CEGUI/Quaternion.h"
33 #include <directfb.h>
34 #include <vector>
35 
36 
37 // Start of CEGUI namespace section
38 namespace CEGUI
39 {
40 class DirectFBRenderer;
41 class DirectFBTexture;
42 
45 {
46 public:
51 
52  // Implement GeometryBuffer interface.
53  void draw() const;
54  void setTranslation(const Vector3f& v);
55  void setRotation(const Quaternion& r);
56  void setPivot(const Vector3f& p);
57  void setClippingRegion(const Rectf& region);
58  void appendVertex(const Vertex& vertex);
59  void appendGeometry(const Vertex* const vbuff, uint vertex_count);
60  void setActiveTexture(Texture* texture);
61  void reset();
62  Texture* getActiveTexture() const;
63  uint getVertexCount() const;
64  uint getBatchCount() const;
65  void setRenderEffect(RenderEffect* effect);
67  void setClippingActive(const bool active);
68  bool isClippingActive() const;
69 
70 protected:
72  void updateMatrix() const;
73 
75  struct BatchInfo
76  {
77  IDirectFBSurface* texture;
78  uint vertexCount;
79  bool clip;
80  };
81 
87  typedef std::vector<BatchInfo> BatchList;
91  typedef std::vector<DFBVertex> VertexList;
107  mutable s32 d_matrix[9];
109  mutable bool d_matrixValid;
110 };
111 
112 } // End of CEGUI namespace section
113 
114 #endif // end of guard _CEGUIDirectFBGeometryBuffer_h_
DirectFBRenderer & d_owner
DirectFBRenderer object that created and owns this GeometryBuffer.
Definition: RendererModules/DirectFB/GeometryBuffer.h:83
Interface for objects that hook into RenderingWindow to affect the rendering process,...
Definition: RenderEffect.h:40
std::vector< BatchInfo > BatchList
type of container that tracks BatchInfos.
Definition: RendererModules/DirectFB/GeometryBuffer.h:87
void appendVertex(const Vertex &vertex)
Append a single vertex to the buffer.
Main namespace for Crazy Eddie's GUI Library.
Definition: arch_overview.dox:1
uint getVertexCount() const
Return the total number of vertices currently held by this GeometryBuffer object.
Quaternion d_rotation
rotation vector
Definition: RendererModules/DirectFB/GeometryBuffer.h:101
structure that is used to hold details of a single vertex in 3D space.
Definition: Vertex.h:40
Abstract class defining the interface for objects that buffer geometry for later rendering.
Definition: GeometryBuffer.h:42
Texture * getActiveTexture() const
Return a pointer to the currently active Texture object. This may return 0 if no texture is set.
DirectFBGeometryBuffer(DirectFBRenderer &owner)
Constructor.
Vector3f d_translation
translation vector
Definition: RendererModules/DirectFB/GeometryBuffer.h:99
void setTranslation(const Vector3f &v)
Set the translation to be applied to the geometry in the buffer when it is subsequently rendered.
void setRotation(const Quaternion &r)
Set the rotations to be applied to the geometry in the buffer when it is subsequently rendered.
void draw() const
Draw the geometry buffered within this GeometryBuffer object.
void setPivot(const Vector3f &p)
Set the pivot point to be used when applying the rotations.
Abstract base class specifying the required interface for Texture objects.
Definition: Texture.h:52
void reset()
Clear all buffered data and reset the GeometryBuffer to the default state.
RenderEffect * d_effect
RenderEffect that will be used by the GeometryBuffer.
Definition: RendererModules/DirectFB/GeometryBuffer.h:105
Implemetation of CEGUI::GeometryBuffer for DirectFB.
Definition: RendererModules/DirectFB/GeometryBuffer.h:44
Implementation of CEGUI::Texture interface using DirectFB.
Definition: RendererModules/DirectFB/Texture.h:38
Vector3f d_pivot
pivot point for rotation
Definition: RendererModules/DirectFB/GeometryBuffer.h:103
bool d_matrixValid
true when d_matrix is valid and up to date
Definition: RendererModules/DirectFB/GeometryBuffer.h:109
Implementation of CEGUI::Renderer interface using DirectFB.
Definition: RendererModules/DirectFB/Renderer.h:44
void setRenderEffect(RenderEffect *effect)
Set the RenderEffect to be used by this GeometryBuffer.
~DirectFBGeometryBuffer()
Destructor.
bool d_clippingActive
whether clipping will be active for the current batch
Definition: RendererModules/DirectFB/GeometryBuffer.h:97
void setClippingActive(const bool active)
Set whether clipping will be active for subsequently added vertices.
void setClippingRegion(const Rectf &region)
Set the clipping region to be used when rendering this buffer.
void setActiveTexture(Texture *texture)
Set the active texture to be used with all subsequently added vertices.
type to track info for per-texture sub batches of geometry
Definition: RendererModules/DirectFB/GeometryBuffer.h:75
VertexList d_vertices
container where added geometry is stored.
Definition: RendererModules/DirectFB/GeometryBuffer.h:93
Class to represent rotation, avoids Gimbal lock.
Definition: Quaternion.h:67
void updateMatrix() const
update cached matrix
void appendGeometry(const Vertex *const vbuff, uint vertex_count)
Append a number of vertices from an array to the GeometryBuffer.
RenderEffect * getRenderEffect()
Return the RenderEffect object that is assigned to this GeometryBuffer or 0 if none.
s32 d_matrix[9]
model matrix cache
Definition: RendererModules/DirectFB/GeometryBuffer.h:107
std::vector< DFBVertex > VertexList
type of container used to queue the geometry
Definition: RendererModules/DirectFB/GeometryBuffer.h:91
Rectf d_clipRect
rectangular clip region
Definition: RendererModules/DirectFB/GeometryBuffer.h:95
DirectFBTexture * d_activeTexture
last texture that was set as active
Definition: RendererModules/DirectFB/GeometryBuffer.h:85
BatchList d_batches
list of texture batches added to the geometry buffer
Definition: RendererModules/DirectFB/GeometryBuffer.h:89
uint getBatchCount() const
Return the number of batches of geometry that this GeometryBuffer has split the vertices into.