Crazy Eddie's GUI System  0.8.7
RendererModules/Direct3D10/GeometryBuffer.h
1 /***********************************************************************
2  created: Sat Mar 7 2009
3  author: Paul D Turner (parts based on code by Rajko Stojadinovic)
4 *************************************************************************/
5 /***************************************************************************
6  * Copyright (C) 2004 - 2011 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 _CEGUIDirect3D10GeometryBuffer_h_
28 #define _CEGUIDirect3D10GeometryBuffer_h_
29 
30 #include "../../GeometryBuffer.h"
31 #include "CEGUI/RendererModules/Direct3D10/Renderer.h"
32 #include "../../Rect.h"
33 #include "../../Quaternion.h"
34 
35 // Unfortunately, MinGW-w64 doesn't have <d3dx10.h>
36 #ifdef __MINGW32__
37  #include <d3d10.h>
38  #include <d3dx9.h>
39 #else
40  #include <d3dx10.h>
41 #endif
42 
43 #if defined(_MSC_VER)
44 # pragma warning(push)
45 # pragma warning(disable : 4251)
46 #endif
47 
48 // Start of CEGUI namespace section
49 namespace CEGUI
50 {
51 class Direct3D10Texture;
52 
54 class D3D10_GUIRENDERER_API Direct3D10GeometryBuffer : public GeometryBuffer
55 {
56 public:
59 
62 
64  const D3DXMATRIX* getMatrix() const;
65 
66  // Implement GeometryBuffer interface.
67  void draw() const;
68  void setTranslation(const Vector3f& v);
69  void setRotation(const Quaternion& r);
70  void setPivot(const Vector3f& p);
71  void setClippingRegion(const Rectf& region);
72  void appendVertex(const Vertex& vertex);
73  void appendGeometry(const Vertex* const vbuff, uint vertex_count);
74  void setActiveTexture(Texture* texture);
75  void reset();
77  uint getVertexCount() const;
78  uint getBatchCount() const;
81  void setClippingActive(const bool active);
82  bool isClippingActive() const;
83 
84 protected:
86  void updateMatrix() const;
88  void syncHardwareBuffer() const;
90  void allocateVertexBuffer(const size_t count) const;
92  void cleanupVertexBuffer() const;
93 
95  struct D3DVertex
96  {
98  FLOAT x, y, z;
100  DWORD diffuse;
102  float tu, tv;
103  };
104 
106  struct BatchInfo
107  {
108  const ID3D10ShaderResourceView* texture;
109  uint vertexCount;
110  bool clip;
111  };
112 
113  // Direct3D10Renderer object that created and owns this GeometryBuffer.
114  Direct3D10Renderer& d_owner;
116  ID3D10Device& d_device;
120  mutable ID3D10Buffer* d_vertexBuffer;
122  mutable UINT d_bufferSize;
124  mutable bool d_bufferSynched;
126  typedef std::vector<BatchInfo> BatchList;
130  typedef std::vector<D3DVertex> VertexList;
146  mutable D3DXMATRIX d_matrix;
148  mutable bool d_matrixValid;
149 };
150 
151 
152 } // End of CEGUI namespace section
153 
154 #if defined(_MSC_VER)
155 # pragma warning(pop)
156 #endif
157 
158 #endif // end of guard _CEGUIDirect3D10GeometryBuffer_h_
Implementation of CEGUI::GeometryBuffer for the Direct3D 10 API.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:55
void appendVertex(const Vertex &vertex)
Append a single vertex to the buffer.
bool d_bufferSynched
whether the h/w buffer is in sync with the added geometry
Definition: RendererModules/Direct3D10/GeometryBuffer.h:124
void setPivot(const Vector3f &p)
Set the pivot point to be used when applying the rotations.
ID3D10Device & d_device
The D3D Device.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:116
VertexList d_vertices
container where added geometry is stored.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:132
Vector3f d_pivot
pivot point for rotation
Definition: RendererModules/Direct3D10/GeometryBuffer.h:142
void cleanupVertexBuffer() const
cleanup the hardware vertex buffer.
std::vector< D3DVertex > VertexList
type of container used to queue the geometry
Definition: RendererModules/Direct3D10/GeometryBuffer.h:130
bool d_matrixValid
true when d_matrix is valid and up to date
Definition: RendererModules/Direct3D10/GeometryBuffer.h:148
void setRenderEffect(RenderEffect *effect)
Set the RenderEffect to be used by this GeometryBuffer.
Texture * getActiveTexture() const
Return a pointer to the currently active Texture object. This may return 0 if no texture is set.
void allocateVertexBuffer(const size_t count) const
allocate the hardware vertex buffer large enough for count vertices.
void appendGeometry(const Vertex *const vbuff, uint vertex_count)
Append a number of vertices from an array to the GeometryBuffer.
uint getVertexCount() const
Return the total number of vertices currently held by this GeometryBuffer object.
void setRotation(const Quaternion &r)
Set the rotations to be applied to the geometry in the buffer when it is subsequently rendered.
D3DXMATRIX d_matrix
model matrix cache
Definition: RendererModules/Direct3D10/GeometryBuffer.h:146
const D3DXMATRIX * getMatrix() const
return pointer to D3DXMATRIX used by this GeometryBuffer
bool d_clippingActive
whether clipping will be active for the current batch
Definition: RendererModules/Direct3D10/GeometryBuffer.h:136
Quaternion d_rotation
rotation Quaternion
Definition: RendererModules/Direct3D10/GeometryBuffer.h:140
Direct3D10Texture * d_activeTexture
last texture that was set as active
Definition: RendererModules/Direct3D10/GeometryBuffer.h:118
Rectf d_clipRect
rectangular clip region
Definition: RendererModules/Direct3D10/GeometryBuffer.h:134
void draw() const
Draw the geometry buffered within this GeometryBuffer object.
Direct3D10GeometryBuffer(Direct3D10Renderer &owner)
Constructor.
void setActiveTexture(Texture *texture)
Set the active texture to be used with all subsequently added vertices.
UINT d_bufferSize
Size of the currently allocated vertex buffer.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:122
uint getBatchCount() const
Return the number of batches of geometry that this GeometryBuffer has split the vertices into.
void setTranslation(const Vector3f &v)
Set the translation to be applied to the geometry in the buffer when it is subsequently rendered.
void updateMatrix() const
update cached matrix
void syncHardwareBuffer() const
Synchronise data in the hardware buffer with what's been added.
RenderEffect * getRenderEffect()
Return the RenderEffect object that is assigned to this GeometryBuffer or 0 if none.
BatchList d_batches
list of texture batches added to the geometry buffer
Definition: RendererModules/Direct3D10/GeometryBuffer.h:128
void reset()
Clear all buffered data and reset the GeometryBuffer to the default state.
ID3D10Buffer * d_vertexBuffer
hardware buffer where vertices will be drawn from.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:120
std::vector< BatchInfo > BatchList
type of container that tracks BatchInfos.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:126
void setClippingActive(const bool active)
Set whether clipping will be active for subsequently added vertices.
Vector3f d_translation
translation vector
Definition: RendererModules/Direct3D10/GeometryBuffer.h:138
RenderEffect * d_effect
RenderEffect that will be used by the GeometryBuffer.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:144
void setClippingRegion(const Rectf &region)
Set the clipping region to be used when rendering this buffer.
Renderer implementation using Direct3D 10.
Definition: RendererModules/Direct3D10/Renderer.h:69
Texture implementation for the Direct3D10Renderer.
Definition: RendererModules/Direct3D10/Texture.h:50
Abstract class defining the interface for objects that buffer geometry for later rendering.
Definition: GeometryBuffer.h:44
Class to represent rotation, avoids Gimbal lock.
Definition: Quaternion.h:69
Interface for objects that hook into RenderingWindow to affect the rendering process,...
Definition: RenderEffect.h:42
Abstract base class specifying the required interface for Texture objects.
Definition: Texture.h:54
Main namespace for Crazy Eddie's GUI Library.
Definition: arch_overview.dox:1
type to track info for per-texture sub batches of geometry
Definition: RendererModules/Direct3D10/GeometryBuffer.h:107
internal Vertex structure used for Direct3D based geometry.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:96
FLOAT x
The transformed position for the vertex.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:98
DWORD diffuse
colour of the vertex.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:100
float tu
texture coordinates.
Definition: RendererModules/Direct3D10/GeometryBuffer.h:102
structure that is used to hold details of a single vertex in 3D space.
Definition: Vertex.h:42