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
00030
00031
00032
00033 #ifndef _DirectX81GUIRenderer_h_
00034 #define _DirectX81GUIRenderer_h_
00035
00036 #if !defined(CEGUI_STATIC)
00037 #ifdef DIRECTX81_GUIRENDERER_EXPORTS
00038 #define DIRECTX81_GUIRENDERER_API __declspec(dllexport)
00039 #else
00040 #define DIRECTX81_GUIRENDERER_API __declspec(dllimport)
00041 #endif
00042 #else
00043 #define DIRECTX81_GUIRENDERER_API
00044 #endif
00045
00046 #include "CEGUIBase.h"
00047 #include "CEGUIRenderer.h"
00048 #include "CEGUITexture.h"
00049 #include <d3d8.h>
00050 #include <list>
00051 #include <set>
00052
00053
00054 #if defined(_MSC_VER)
00055 # pragma warning(push)
00056 # pragma warning(disable : 4251)
00057 #endif
00058
00059
00060
00061 namespace CEGUI
00062 {
00063
00064
00065
00066 class DirectX81Texture;
00067
00072 class DIRECTX81_GUIRENDERER_API DirectX81Renderer : public Renderer
00073 {
00074 public:
00085 DirectX81Renderer(LPDIRECT3DDEVICE8 device, uint max_quads = 0);
00086
00087
00098 DirectX81Renderer(LPDIRECT3DDEVICE8 device, const Size& sz);
00099
00100
00105 virtual ~DirectX81Renderer(void);
00106
00107
00108 virtual void addQuad(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
00109
00110
00111 virtual void doRender(void);
00112
00113
00114 virtual void clearRenderList(void);
00115
00116
00132 virtual void setQueueingEnabled(bool setting) {d_queueing = setting;}
00133
00134
00135
00136 virtual Texture* createTexture(void);
00137
00138
00139 virtual Texture* createTexture(const String& filename, const String& resourceGroup);
00140
00141
00142 virtual Texture* createTexture(float size);
00143
00144
00145 virtual void destroyTexture(Texture* texture);
00146
00147
00148 virtual void destroyAllTextures(void);
00149
00150
00151 LPDIRECT3DDEVICE8 getDevice(void) const {return d_device;}
00152
00153
00161 virtual bool isQueueingEnabled(void) const {return d_queueing;}
00162
00163
00171 virtual float getWidth(void) const {return d_display_area.getWidth();}
00172
00173
00181 virtual float getHeight(void) const {return d_display_area.getHeight();}
00182
00183
00191 virtual Size getSize(void) const {return d_display_area.getSize();}
00192
00193
00202 virtual Rect getRect(void) const {return d_display_area;}
00203
00204
00212 virtual uint getMaxTextureSize(void) const {return d_maxTextureSize;}
00213
00214
00222 virtual uint getHorzScreenDPI(void) const {return 96;}
00223
00224
00232 virtual uint getVertScreenDPI(void) const {return 96;}
00233
00234
00241 virtual void preD3DReset(void);
00242
00243
00250 virtual void postD3DReset(void);
00251
00252
00271 void setDisplaySize(const Size& sz);
00272
00273
00274 private:
00275
00276
00277
00278 static const int VERTEX_PER_QUAD;
00279 static const int VERTEX_PER_TRIANGLE;
00280 static const int VERTEXBUFFER_CAPACITY;
00281 static const ulong VERTEX_FVF;
00282
00283
00284
00285
00290 struct QuadVertex {
00291 FLOAT x, y, z, rhw;
00292 DWORD diffuse;
00293 float tu1, tv1;
00294 };
00295
00300 struct QuadInfo
00301 {
00302 LPDIRECT3DTEXTURE8 texture;
00303 Rect position;
00304 float z;
00305 Rect texPosition;
00306 ulong topLeftCol;
00307 ulong topRightCol;
00308 ulong bottomLeftCol;
00309 ulong bottomRightCol;
00310
00311 QuadSplitMode splitMode;
00312
00313 bool operator<(const QuadInfo& other) const
00314 {
00315
00316 return z > other.z;
00317 }
00318 };
00319
00320
00321
00322
00323
00324
00325 void initPerFrameStates(void);
00326
00327
00328 void renderVBuffer(void);
00329
00330
00331 void sortQuads(void);
00332
00333
00334 void renderQuadDirect(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
00335
00336
00337 Size getViewportSize(void);
00338
00339
00340 void constructor_impl(LPDIRECT3DDEVICE8 device, const Size& display_size);
00341
00342
00343
00344
00345
00346 Rect d_display_area;
00347
00348 typedef std::multiset<QuadInfo> QuadList;
00349 QuadList d_quadlist;
00350 bool d_queueing;
00351
00352 LPDIRECT3DDEVICE8 d_device;
00353 LPDIRECT3DTEXTURE8 d_currTexture;
00354 LPDIRECT3DVERTEXBUFFER8 d_buffer;
00355 int d_bufferPos;
00356
00357 std::list<DirectX81Texture*> d_texturelist;
00358
00359 uint d_maxTextureSize;
00360 bool d_canGetVPSize;
00361 };
00362
00363 }
00364
00365
00366 #if defined(_MSC_VER)
00367 # pragma warning(pop)
00368 #endif
00369
00370 #endif // end of guard _DirectX81GUIRenderer_h_