diff options
Diffstat (limited to 'indra/llrender/llrender2dutils.h')
| -rw-r--r-- | indra/llrender/llrender2dutils.h | 35 | 
1 files changed, 24 insertions, 11 deletions
diff --git a/indra/llrender/llrender2dutils.h b/indra/llrender/llrender2dutils.h index cce3b4ed51..206e68f084 100644 --- a/indra/llrender/llrender2dutils.h +++ b/indra/llrender/llrender2dutils.h @@ -32,6 +32,7 @@  #include "llpointer.h"		// LLPointer<>  #include "llrect.h" +#include "llsingleton.h"  #include "llglslshader.h"  class LLColor4;  @@ -121,39 +122,51 @@ inline void gl_rect_2d_offset_local( const LLRect& rect, S32 pixel_offset, BOOL  class LLImageProviderInterface; -class LLRender2D +class LLRender2D : public LLParamSingleton<LLRender2D>  { +	LLSINGLETON(LLRender2D, LLImageProviderInterface* image_provider);  	LOG_CLASS(LLRender2D); +	~LLRender2D();  public: -	static void initClass(LLImageProviderInterface* image_provider, -						  const LLVector2* scale_factor); -	static void cleanupClass(); -  	static void pushMatrix();  	static void popMatrix();  	static void loadIdentity();  	static void translate(F32 x, F32 y, F32 z = 0.0f);  	static void setLineWidth(F32 width); -	static void setScaleFactor(const LLVector2& scale_factor); -	static LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0); -	static LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0); +	LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0); +	LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0); + +protected: +	// since LLRender2D has no control of image provider's lifecycle +	// we need a way to tell LLRender2D that provider died and +	// LLRender2D needs to be updated. +	static void resetProvider(); -	static LLVector2		sGLScaleFactor;  private: -	static LLImageProviderInterface* sImageProvider; +	LLImageProviderInterface* mImageProvider;  };  class LLImageProviderInterface  {  protected:  	LLImageProviderInterface() {}; -	virtual ~LLImageProviderInterface() {}; +	virtual ~LLImageProviderInterface();  public:  	virtual LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority) = 0;  	virtual LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority) = 0;  	virtual void cleanUp() = 0; + +	// to notify holders when pointer gets deleted +	typedef void(*callback_t)(); +	void addOnRemovalCallback(callback_t func); +	void deleteOnRemovalCallback(callback_t func); + +private: + +	typedef std::list< callback_t >	callback_list_t; +	callback_list_t mCallbackList;  };  | 
