1 /*********************************************************************** 2 created: Tue Mar 10 2009 3 author: Paul D Turner (parts based on code by Keith Mok) 4 *************************************************************************/ 5 /*************************************************************************** 6 * Copyright (C) 2004 - 2009 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 _CEGUIDirectFBTexture_h_ 28 #define _CEGUIDirectFBTexture_h_ 29 30 #include "../../Texture.h" 31 #include "CEGUI/RendererModules/DirectFB/Renderer.h" 32 33 // Start of CEGUI namespace section 34 namespace CEGUI 35 { 36 37 //! Implementation of CEGUI::Texture interface using DirectFB. 38 class DirectFBTexture : public Texture 39 { 40 public: 41 //! Return a pointer to the IDirectFBSurface this texture represents. 42 IDirectFBSurface* getDirectFBSurface() const; 43 44 // implement interface for Texture 45 const String& getName() const; 46 const Sizef& getSize() const; 47 const Sizef& getOriginalDataSize() const; 48 const Vector2f& getTexelScaling() const; 49 void loadFromFile(const String& filename, const String& resourceGroup); 50 void loadFromMemory(const void* buffer, const Sizef& buffer_size, 51 PixelFormat pixel_format); 52 void blitFromMemory(const void* sourceData, const Rectf& area); 53 void blitToMemory(void* targetData); 54 bool isPixelFormatSupported(const PixelFormat fmt) const; 55 56 protected: 57 // friends to allow renderer to construct and destroy texture objects 58 friend Texture& DirectFBRenderer::createTexture(const String&); 59 friend Texture& DirectFBRenderer::createTexture(const String&, const String&, const String&); 60 friend Texture& DirectFBRenderer::createTexture(const String&, const Sizef&); 61 friend void DirectFBRenderer::destroyTexture(const String&); 62 63 //! Basic constructor. 64 DirectFBTexture(IDirectFB& directfb, const String& name); 65 //! Construct texture from file. 66 DirectFBTexture(IDirectFB& directfb, const String& name, 67 const String& filename, const String& resourceGroup); 68 //! Construct texture with given size. 69 DirectFBTexture(IDirectFB& directfb, const String& name, const Sizef& size); 70 //! Destructor. 71 ~DirectFBTexture(); 72 73 //! clean up the internal texture. 74 void cleanupDirectFBTexture(); 75 //! updates cached scale value used to map pixels to texture co-ords. 76 void updateCachedScaleValues(); 77 78 //! DirectFB interface we were given when constructed. 79 IDirectFB& d_directfb; 80 //! surface representing the texture. 81 IDirectFBSurface* d_texture; 82 //! Size of the texture. 83 Sizef d_size; 84 //! original pixel of size data loaded into texture 85 Sizef d_dataSize; 86 //! cached pixel to texel mapping scale values. 87 Vector2f d_texelScaling; 88 //! The name given for this texture. 89 const String d_name; 90 }; 91 92 } // End of CEGUI namespace section 93 94 #endif // end of guard _CEGUIDirectFBTexture_h_ 95