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 #ifndef _directfbrenderer_h_
00026 #define _directfbrenderer_h_
00027
00028 #include "CEGUIBase.h"
00029 #include <directfb.h>
00030
00031 #include <vector>
00032 #include <list>
00033
00034 #include "CEGUIRenderer.h"
00035 #include "CEGUITexture.h"
00036
00037
00038
00039 namespace CEGUI
00040 {
00041
00042
00043
00044 class DirectfbTexture;
00045 class ImageCodec;
00046 class DynamicModule;
00047
00052 class DirectfbRenderer : public Renderer
00053 {
00054 public:
00063 DirectfbRenderer(IDirectFB *device, IDirectFBSurface *surface, ImageCodec* codec = 0);
00064
00069 virtual ~DirectfbRenderer(void);
00070
00071
00072 virtual void addQuad(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
00073
00074
00075 virtual void doRender(void);
00076
00077
00078 virtual void clearRenderList(void);
00079
00080
00096 virtual void setQueueingEnabled(bool setting) {d_queueing = setting;}
00097
00098
00099
00100 virtual Texture* createTexture(void);
00101
00102
00103 virtual Texture* createTexture(const String& filename, const String& resourceGroup);
00104
00105
00106 virtual Texture* createTexture(float size);
00107
00108
00109 virtual void destroyTexture(Texture* texture);
00110
00111
00112 virtual void destroyAllTextures(void);
00113
00114
00115 IDirectFB* getDevice(void) const {return d_device;}
00116
00117
00125 virtual bool isQueueingEnabled(void) const {return d_queueing;}
00126
00127
00135 virtual float getWidth(void) const {return d_display_area.getWidth();}
00136
00137
00145 virtual float getHeight(void) const {return d_display_area.getHeight();}
00146
00147
00155 virtual Size getSize(void) const {return d_display_area.getSize();}
00156
00157
00166 virtual Rect getRect(void) const {return d_display_area;}
00167
00168
00176 virtual uint getMaxTextureSize(void) const {return d_maxTextureSize;}
00177
00178
00186 virtual uint getHorzScreenDPI(void) const {return 96;}
00187
00188
00196 virtual uint getVertScreenDPI(void) const {return 96;}
00197
00202 ImageCodec& getImageCodec(void);
00203
00204
00209 void setImageCodec(const String& codecName);
00210
00220 void setImageCodec(ImageCodec* codec);
00221
00222
00227 static void setDefaultImageCodecName(const String& codecName);
00228
00233 static const String& getDefaultImageCodecName();
00234
00235
00236 private:
00237
00238
00239
00240
00241
00242
00243
00248 struct RenderQuad
00249 {
00250 IDirectFBSurface *tex;
00251 Rect position;
00252 float z;
00253 Rect texPosition;
00254 ColourRect colours;
00255 };
00256
00257
00258
00259
00260
00261
00262 void doRender(RenderQuad *quad);
00263 void sortQuads(void);
00264
00265
00266 void setupImageCodec(const String& codecName);
00267
00268
00269 void cleanupImageCodec();
00270
00271
00272
00273
00274
00275
00276 struct quadsorter
00277 : public std::binary_function<RenderQuad*, RenderQuad*, bool>
00278 {
00279 bool operator()(const RenderQuad& _Left, const RenderQuad& _Right) const
00280 {return (_Left.z > _Right.z);}
00281 };
00282
00283
00284 std::vector<RenderQuad> d_quadlist;
00285
00286
00287 IDirectFBSurface *d_surface;
00288 IDirectFB *d_device;
00289 Rect d_display_area;
00290 bool d_queueing;
00291
00292 std::list<DirectfbTexture*> d_texturelist;
00293 uint d_maxTextureSize;
00294
00295 ImageCodec* d_imageCodec;
00296 DynamicModule* d_imageCodecModule;
00297
00298 static String d_defaultImageCodecName;
00299
00300 };
00301
00302 }
00303
00304 #endif // end of guard _openglrenderer_h_