00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _DirectX81GUIRenderer_h_
00030 #define _DirectX81GUIRenderer_h_
00031
00032 #ifdef DIRECTX81_GUIRENDERER_EXPORTS
00033 #define DIRECTX81_GUIRENDERER_API __declspec(dllexport)
00034 #else
00035 #define DIRECTX81_GUIRENDERER_API __declspec(dllimport)
00036 #endif
00037
00038 #include "CEGUIBase.h"
00039 #include "CEGUIRenderer.h"
00040 #include "CEGUITexture.h"
00041 #include <d3d8.h>
00042 #include <list>
00043 #include <set>
00044
00045
00046 #if defined(_MSC_VER)
00047 # pragma warning(push)
00048 # pragma warning(disable : 4251)
00049 #endif
00050
00051
00052
00053 namespace CEGUI
00054 {
00055
00056
00057
00058 class DirectX81Texture;
00059
00064 class DIRECTX81_GUIRENDERER_API DirectX81Renderer : public Renderer
00065 {
00066 public:
00077 DirectX81Renderer(LPDIRECT3DDEVICE8 device, uint max_quads = 0);
00078
00079
00090 DirectX81Renderer(LPDIRECT3DDEVICE8 device, const Size& sz);
00091
00092
00097 virtual ~DirectX81Renderer(void);
00098
00099
00100 virtual void addQuad(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
00101
00102
00103 virtual void doRender(void);
00104
00105
00106 virtual void clearRenderList(void);
00107
00108
00124 virtual void setQueueingEnabled(bool setting) {d_queueing = setting;}
00125
00126
00127
00128 virtual Texture* createTexture(void);
00129
00130
00131 virtual Texture* createTexture(const String& filename, const String& resourceGroup);
00132
00133
00134 virtual Texture* createTexture(float size);
00135
00136
00137 virtual void destroyTexture(Texture* texture);
00138
00139
00140 virtual void destroyAllTextures(void);
00141
00142
00143 LPDIRECT3DDEVICE8 getDevice(void) const {return d_device;}
00144
00145
00153 virtual bool isQueueingEnabled(void) const {return d_queueing;}
00154
00155
00163 virtual float getWidth(void) const {return d_display_area.getWidth();}
00164
00165
00173 virtual float getHeight(void) const {return d_display_area.getHeight();}
00174
00175
00183 virtual Size getSize(void) const {return d_display_area.getSize();}
00184
00185
00194 virtual Rect getRect(void) const {return d_display_area;}
00195
00196
00204 virtual uint getMaxTextureSize(void) const {return d_maxTextureSize;}
00205
00206
00214 virtual uint getHorzScreenDPI(void) const {return 96;}
00215
00216
00224 virtual uint getVertScreenDPI(void) const {return 96;}
00225
00226
00233 virtual void preD3DReset(void);
00234
00235
00242 virtual void postD3DReset(void);
00243
00244
00263 void setDisplaySize(const Size& sz);
00264
00265
00266 private:
00267
00268
00269
00270 static const int VERTEX_PER_QUAD;
00271 static const int VERTEX_PER_TRIANGLE;
00272 static const int VERTEXBUFFER_CAPACITY;
00273 static const ulong VERTEX_FVF;
00274
00275
00276
00277
00282 struct QuadVertex {
00283 FLOAT x, y, z, rhw;
00284 DWORD diffuse;
00285 float tu1, tv1;
00286 };
00287
00292 struct QuadInfo
00293 {
00294 LPDIRECT3DTEXTURE8 texture;
00295 Rect position;
00296 float z;
00297 Rect texPosition;
00298 ulong topLeftCol;
00299 ulong topRightCol;
00300 ulong bottomLeftCol;
00301 ulong bottomRightCol;
00302
00303 QuadSplitMode splitMode;
00304
00305 bool operator<(const QuadInfo& other) const
00306 {
00307
00308 return z > other.z;
00309 }
00310 };
00311
00312
00313
00314
00315
00316
00317 void initPerFrameStates(void);
00318
00319
00320 void renderVBuffer(void);
00321
00322
00323 void sortQuads(void);
00324
00325
00326 void renderQuadDirect(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
00327
00328
00329 Size getViewportSize(void);
00330
00331
00332 void constructor_impl(LPDIRECT3DDEVICE8 device, const Size& display_size);
00333
00334
00335
00336
00337
00338 Rect d_display_area;
00339
00340 typedef std::multiset<QuadInfo> QuadList;
00341 QuadList d_quadlist;
00342 bool d_queueing;
00343
00344 LPDIRECT3DDEVICE8 d_device;
00345 LPDIRECT3DTEXTURE8 d_currTexture;
00346 LPDIRECT3DVERTEXBUFFER8 d_buffer;
00347 int d_bufferPos;
00348
00349 std::list<DirectX81Texture*> d_texturelist;
00350
00351 uint d_maxTextureSize;
00352 bool d_canGetVPSize;
00353 };
00354
00355 }
00356
00357
00358 #if defined(_MSC_VER)
00359 # pragma warning(pop)
00360 #endif
00361
00362 #endif // end of guard _DirectX81GUIRenderer_h_