gKitGL
GLTexture2DIO.h
00001 
00002 #ifndef _GLTEXTURE2DIO_H
00003 #define _GLTEXTURE2DIO_H
00004 
00005 #include "IOManager.h"
00006 #include "ImageIO.h"
00007 #include "GL/TPTexture.h"
00008 
00009 
00010 namespace gk {
00011 
00012 //! manager pour importer des GLColorTexture / GLHDRTexture.
00013 class GLTexture2DIO : public IOManager<GLTexture2D>
00014 {
00015     // non copyable
00016     GLTexture2DIO( const GLTexture& );
00017     GLTexture2DIO& operator=( const GLTexture& );
00018     
00019     // private default constructor, singleton
00020     GLTexture2DIO( )
00021         :
00022         IOManager<GLTexture2D>()
00023     {}
00024     
00025     ~GLTexture2DIO( )
00026     {
00027         // detruire les ressources GL, ~IOManager() detruit les objets.
00028         int n= (int) m_objects.size();
00029         for(int i= 0; i < n; i++)
00030             m_objects[i].object->releaseGLResource();
00031     }
00032     
00033 public:
00034     //! importe la GLTexture 'name' a partir du ficher 'filename'.
00035     static
00036     GLTexture2D *read( const int unit, const std::string& filename, const std::string& name= "" )
00037     {
00038         // importer le fichier, si necessaire
00039         GLTexture2D *gtexture= manager().find(filename, name);
00040         if(gtexture != NULL)
00041             return gtexture;
00042         
00043         // determiner le type HDR / Color de l'image
00044         if(ImageIO::isColorFile(filename))
00045         {
00046             Image *image= ImageIO::read(filename, name);
00047             if(image == NULL)
00048             {
00049                 printf("failed '%s' color image\n", filename.c_str());
00050                 return NULL;
00051             }
00052             
00053             // cree la GLTexture 'directement' sans utiliser GLManager / GLContext, l'objet ne doit etre gere que par un seul manager !!
00054             gtexture= new GLTexture2D(unit, image);
00055         }
00056         else if(HDRImageIO::isHDRFile(filename))
00057         {
00058             HDRImage *image= HDRImageIO::read(filename, name);
00059             if(image == NULL)
00060             {
00061                 printf("failed '%s' hdr image\n", filename.c_str());
00062                 return NULL;
00063             }
00064             
00065             // cree la GLTexture 'directement' sans utiliser GLManager / GLContext, l'objet ne doit etre gere que par un seul manager !!
00066             gtexture= new GLTexture2D(unit, image);
00067         }
00068         else
00069         {
00070             printf("failed '%s', unknown image type\n", filename.c_str());
00071             return NULL;
00072         }
00073         
00074         // cree la texture gl
00075         if(gtexture->createGLResource() < 0)
00076         {
00077             delete gtexture;
00078             gtexture= NULL;
00079         }
00080     
00081         // reference la texture avec le manager
00082         return manager().insert(gtexture, filename, name);        
00083     }
00084     
00085     static
00086     GLTexture2DIO& manager( )  //!< singleton
00087     {
00088         static GLTexture2DIO manager;
00089         return manager;
00090     }    
00091 };
00092 
00093 }
00094 
00095 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerator Friends