Crazy Eddie's GUI System 0.8.7
Loading...
Searching...
No Matches
RendererModules/Direct3D9/GeometryBuffer.h
1/***********************************************************************
2 created: Mon Feb 9 2009
3 author: Paul D Turner
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 _CEGUIDirect3D9GeometryBuffer_h_
28#define _CEGUIDirect3D9GeometryBuffer_h_
29
30#include "../../GeometryBuffer.h"
31#include "CEGUI/RendererModules/Direct3D9/Renderer.h"
32#include "../../Rect.h"
33#include "../../Quaternion.h"
34#include <utility>
35#include <vector>
36
37#if defined(_MSC_VER)
38# pragma warning(push)
39# pragma warning(disable : 4251)
40#endif
41
42// Start of CEGUI namespace section
43namespace CEGUI
44{
45class Direct3D9Texture;
46
51class DIRECT3D9_GUIRENDERER_API Direct3D9GeometryBuffer : public GeometryBuffer
52{
53public:
55 Direct3D9GeometryBuffer(Direct3D9Renderer& owner, LPDIRECT3DDEVICE9 device);
56
58 const D3DMATRIX* getMatrix() const;
59
60 // implementation of abstract members from GeometryBuffer
61 void draw() const;
62 void setTranslation(const Vector3f& t);
63 void setRotation(const Quaternion& r);
64 void setPivot(const Vector3f& p);
65 void setClippingRegion(const Rectf& region);
66 void appendVertex(const Vertex& vertex);
67 void appendGeometry(const Vertex* const vbuff, uint vertex_count);
68 void setActiveTexture(Texture* texture);
69 void reset();
71 uint getVertexCount() const;
72 uint getBatchCount() const;
75 void setClippingActive(const bool active);
76 bool isClippingActive() const;
77
78protected:
82 void updateMatrix() const;
83
85 struct D3DVertex
86 {
88 FLOAT x, y, z;
90 DWORD diffuse;
92 float tu, tv;
93 };
94
96 struct BatchInfo
97 {
98 LPDIRECT3DTEXTURE9 texture;
99 uint vertexCount;
100 bool clip;
101 };
102
108 typedef std::vector<BatchInfo> BatchList;
112 typedef std::vector<D3DVertex> VertexList;
128 LPDIRECT3DDEVICE9 d_device;
130 mutable D3DMATRIX d_matrix;
132 mutable bool d_matrixValid;
133};
134
135} // End of CEGUI namespace section
136
137#if defined(_MSC_VER)
138# pragma warning(pop)
139#endif
140
141#endif // end of guard _CEGUIDirect3D9GeometryBuffer_h_
Direct3D9 based implementation of the GeometryBuffer interface.
Definition RendererModules/Direct3D9/GeometryBuffer.h:52
const D3DMATRIX * getMatrix() const
return pointer to D3DXMATRIX used as world transform.
void setRenderEffect(RenderEffect *effect)
Set the RenderEffect to be used by this GeometryBuffer.
void updateMatrix() const
update cached matrix
void setTranslation(const Vector3f &t)
Set the translation to be applied to the geometry in the buffer when it is subsequently rendered.
void performBatchManagement()
perform batch management operations prior to adding new geometry.
Vector3f d_translation
translation vector
Definition RendererModules/Direct3D9/GeometryBuffer.h:120
Texture * getActiveTexture() const
Return a pointer to the currently active Texture object. This may return 0 if no texture is set.
D3DMATRIX d_matrix
model matrix cache
Definition RendererModules/Direct3D9/GeometryBuffer.h:130
std::vector< BatchInfo > BatchList
type of container that tracks BatchInfos.
Definition RendererModules/Direct3D9/GeometryBuffer.h:108
void reset()
Clear all buffered data and reset the GeometryBuffer to the default state.
Quaternion d_rotation
rotation vector
Definition RendererModules/Direct3D9/GeometryBuffer.h:122
bool d_matrixValid
true when d_matrix is valid and up to date
Definition RendererModules/Direct3D9/GeometryBuffer.h:132
uint getBatchCount() const
Return the number of batches of geometry that this GeometryBuffer has split the vertices into.
std::vector< D3DVertex > VertexList
type of container used to queue the geometry
Definition RendererModules/Direct3D9/GeometryBuffer.h:112
void setClippingActive(const bool active)
Set whether clipping will be active for subsequently added vertices.
uint getVertexCount() const
Return the total number of vertices currently held by this GeometryBuffer object.
Rectf d_clipRect
rectangular clip region
Definition RendererModules/Direct3D9/GeometryBuffer.h:116
BatchList d_batches
list of texture batches added to the geometry buffer
Definition RendererModules/Direct3D9/GeometryBuffer.h:110
void appendGeometry(const Vertex *const vbuff, uint vertex_count)
Append a number of vertices from an array to the GeometryBuffer.
LPDIRECT3DDEVICE9 d_device
The D3D Device.
Definition RendererModules/Direct3D9/GeometryBuffer.h:128
void setRotation(const Quaternion &r)
Set the rotations to be applied to the geometry in the buffer when it is subsequently rendered.
Direct3D9Renderer & d_owner
Owning Direct3D9Renderer object.
Definition RendererModules/Direct3D9/GeometryBuffer.h:104
Vector3f d_pivot
pivot point for rotation
Definition RendererModules/Direct3D9/GeometryBuffer.h:124
RenderEffect * d_effect
RenderEffect that will be used by the GeometryBuffer.
Definition RendererModules/Direct3D9/GeometryBuffer.h:126
void setClippingRegion(const Rectf &region)
Set the clipping region to be used when rendering this buffer.
void appendVertex(const Vertex &vertex)
Append a single vertex to the buffer.
void setPivot(const Vector3f &p)
Set the pivot point to be used when applying the rotations.
void draw() const
Draw the geometry buffered within this GeometryBuffer object.
RenderEffect * getRenderEffect()
Return the RenderEffect object that is assigned to this GeometryBuffer or 0 if none.
Direct3D9Texture * d_activeTexture
last texture that was set as active
Definition RendererModules/Direct3D9/GeometryBuffer.h:106
VertexList d_vertices
container where added geometry is stored.
Definition RendererModules/Direct3D9/GeometryBuffer.h:114
Direct3D9GeometryBuffer(Direct3D9Renderer &owner, LPDIRECT3DDEVICE9 device)
Constructor.
void setActiveTexture(Texture *texture)
Set the active texture to be used with all subsequently added vertices.
bool d_clippingActive
whether clipping will be active for the current batch
Definition RendererModules/Direct3D9/GeometryBuffer.h:118
Renderer class to interface with Direct3D 9.
Definition RendererModules/Direct3D9/Renderer.h:65
Texture implementation for the Direct3D9Renderer.
Definition RendererModules/Direct3D9/Texture.h:45
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/Direct3D9/GeometryBuffer.h:97
internal Vertex structure used for Direct3D based geometry.
Definition RendererModules/Direct3D9/GeometryBuffer.h:86
FLOAT x
The transformed position for the vertex.
Definition RendererModules/Direct3D9/GeometryBuffer.h:88
float tu
texture coordinates.
Definition RendererModules/Direct3D9/GeometryBuffer.h:92
DWORD diffuse
colour of the vertex.
Definition RendererModules/Direct3D9/GeometryBuffer.h:90
structure that is used to hold details of a single vertex in 3D space.
Definition Vertex.h:42