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 #ifndef _CEGUIDirect3D9Renderer_h_
00029 #define _CEGUIDirect3D9Renderer_h_
00030
00031 #include "../../CEGUIBase.h"
00032 #include "../../CEGUIRenderer.h"
00033 #include "../../CEGUISize.h"
00034 #include "../../CEGUIVector.h"
00035
00036 #include <d3d9.h>
00037 #include <vector>
00038
00039 #if (defined( __WIN32__ ) || defined( _WIN32 )) && !defined(CEGUI_STATIC)
00040 # ifdef DIRECT3D9_GUIRENDERER_EXPORTS
00041 # define DIRECT3D9_GUIRENDERER_API __declspec(dllexport)
00042 # else
00043 # define DIRECT3D9_GUIRENDERER_API __declspec(dllimport)
00044 # endif
00045 #else
00046 # define DIRECT3D9_GUIRENDERER_API
00047 #endif
00048
00049 #if defined(_MSC_VER)
00050 # pragma warning(push)
00051 # pragma warning(disable : 4251)
00052 #endif
00053
00054
00055 namespace CEGUI
00056 {
00057 class Direct3D9Texture;
00058 class Direct3D9GeometryBuffer;
00059
00064 class DIRECT3D9_GUIRENDERER_API Direct3D9Renderer : public Renderer
00065 {
00066 public:
00071 static Direct3D9Renderer& create(LPDIRECT3DDEVICE9 device);
00072
00080 static void destroy(Direct3D9Renderer& renderer);
00081
00083 void preD3DReset();
00084
00086 void postD3DReset();
00087
00089 LPDIRECT3DDEVICE9 getDevice() const;
00090
00092 Texture& createTexture(LPDIRECT3DTEXTURE9 tex);
00093
00095 bool supportsNonSquareTexture();
00096
00098 bool supportsNPOTTextures();
00099
00101 Size getAdjustedSize(const Size& sz);
00102
00103
00104 RenderingRoot& getDefaultRenderingRoot();
00105 GeometryBuffer& createGeometryBuffer();
00106 void destroyGeometryBuffer(const GeometryBuffer& buffer);
00107 void destroyAllGeometryBuffers();
00108 TextureTarget* createTextureTarget();
00109 void destroyTextureTarget(TextureTarget* target);
00110 void destroyAllTextureTargets();
00111 Texture& createTexture();
00112 Texture& createTexture(const String& filename, const String& resourceGroup);
00113 Texture& createTexture(const Size& size);
00114 void destroyTexture(Texture& texture);
00115 void destroyAllTextures();
00116 void beginRendering();
00117 void endRendering();
00118 void setDisplaySize(const Size& sz);
00119 const Size& getDisplaySize() const;
00120 const Vector2& getDisplayDPI() const;
00121 uint getMaxTextureSize() const;
00122 const String& getIdentifierString() const;
00123
00124 private:
00126 Direct3D9Renderer(LPDIRECT3DDEVICE9 device);
00127
00129 virtual ~Direct3D9Renderer();
00130
00132 Size getViewportSize();
00134 float getSizeNextPOT(float sz) const;
00135
00137 static String d_rendererID;
00139 LPDIRECT3DDEVICE9 d_device;
00141 Size d_displaySize;
00143 Vector2 d_displayDPI;
00145 RenderingRoot* d_defaultRoot;
00147 RenderTarget* d_defaultTarget;
00149 typedef std::vector<TextureTarget*> TextureTargetList;
00151 TextureTargetList d_textureTargets;
00153 typedef std::vector<Direct3D9GeometryBuffer*> GeometryBufferList;
00155 GeometryBufferList d_geometryBuffers;
00157 typedef std::vector<Direct3D9Texture*> TextureList;
00159 TextureList d_textures;
00161 uint d_maxTextureSize;
00163 bool d_supportNPOTTex;
00165 bool d_supportNonSquareTex;
00166 };
00167
00168 }
00169
00170 #if defined(_MSC_VER)
00171 # pragma warning(pop)
00172 #endif
00173
00174 #endif // end of guard _CEGUIDirect3D9Renderer_h_