33 #include <FreeImage.h>    50    if(fif != FIF_UNKNOWN) {
    73     for( 
int i=0; i<100; i++ ) {
    75         for( 
int j = 0; j<10; j++ ) {
   112         str_format = 
"LEVELS";
   116         str_format = 
"PATTERNS";
   120         str_format = 
"LAYERS";
   124     return Init( p_foldername, str_format, p_pResourceManager );
   156     for( 
int L=0; L<100*100*3; L++) {
   170         delete pTextureMemory;
   174     for(
int j=0 ; j<100; j++) {
   176             for(
int k=0 ; k<10; k++) {
   222             FREE_IMAGE_FORMAT fif;
   225             if( fif == FIF_UNKNOWN ) {
   230             if( (fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif) ) {
   251                             barra = 
moText(
"###################################################################################");
   253                             for(
int k=0; k<100; k++) {
   262                     FreeImage_Unload(pImage);
   271         if (counter==maxfiles && maxfiles!=(-1))
   284     FIBITMAP* _pImage = (FIBITMAP*)pImage;
   285     FIBITMAP* pImageResult = NULL;
   287     FIBITMAP* pImageScaled = NULL;
   290       MODebug2->
Error(
"moTextureBuffer::LoadImage > indeximage invalid or unused for: " + p_ImageName);
   302     pImageResult = _pImage;
   305     if ( ( FreeImage_GetWidth(_pImage) % 4 ) != 0 || ( FreeImage_GetHeight(_pImage) % 4) == 0 ) {
   307         w = FreeImage_GetWidth(_pImage) / 4;
   310         h = FreeImage_GetHeight(_pImage) / 4;
   313         pImageScaled = FreeImage_Rescale( pImageResult, w, h, FILTER_BICUBIC );
   316             pImageResult = pImageScaled;
   322     if (
RenderMan()->IsTextureNonPowerOf2Disabled()) {
   324         w = FreeImage_GetWidth(pImageResult);
   325         h = FreeImage_GetHeight(pImageResult);
   328         for (i = 1; i < w; i *= 2);
   331         for (i = 1; i < h; i *= 2);
   337       pImageScaled =   FreeImage_Rescale( pImageResult, w, h, FILTER_BICUBIC );
   340             pImageResult = pImageScaled;
   344     FreeImage_AdjustContrast( pImageResult, 0 );
   345     FreeImage_AdjustBrightness( pImageResult, 0 );
   378         if (pTextureMemory) {
   383                 int contrastlevel = pTextureMemory->
GetContrast() / 2000;
   384                 int luminancelevel = (int)((
float)pTextureMemory->
GetLuminance() / (float)2.56 ) - 1;
   399                 if (luminancelevel>=100) {
   408                 if (contrastlevel>=10) {
   411                 if (0<=luminancelevel && luminancelevel<100 && 0<=contrastlevel && contrastlevel<10) {
   415                     int icc = momin( 
m_pBufferLevels[luminancelevel][contrastlevel].Count(), 99 );
   429     if (pImageResult!=_pImage)
   430         FreeImage_Unload(pImageResult);
   449     if (p_ImageReference && x>=0 && y>=0 && width>0 && height>0 ) {
   460     if (p_ImageReference.
GetMOId() && x>=0 && y>=0 && width>0 && height>0 ) {
   469     if (0<=L && L<100 && 0<=C && C<10) {
   482   glActiveTexture( GL_TEXTURE0 + 5);
   488   levels = momin( levels, log(width)/log(2) );
   490   glTexStorage3D(GL_TEXTURE_2D_ARRAY, levels, GL_RGBA8, width, height, 
m_ImagesProcessed);
   496       if (pTextureMemory) {
   500           pImageS = FreeImage_Rescale(pImage, width, height, FILTER_BICUBIC );
   501           MOubyte* bits = FreeImage_GetBits(pImageS);
   512               glTexSubImage3D(GL_TEXTURE_2D_ARRAY,
   529     for(
int h=0;h<height;h++) {
   530       for(
int w=0;w<width;w++) {
   531         bits[w*4+h*width*4] = 255;
   532         bits[w*4+h*width*4+1] = 0;
   533         bits[w*4+h*width*4+2] = 0;
   534         bits[w*4+h*width*4+3] = 255;
   539       glTexSubImage3D(GL_TEXTURE_2D_ARRAY,
   549   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER,  GL_LINEAR_MIPMAP_LINEAR );
   550   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER,   GL_LINEAR  );
   551   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
   552   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
   553   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, levels);
   555     glGenerateMipmap(GL_TEXTURE_2D_ARRAY);
   560   glBindTexture( GL_TEXTURE_2D_ARRAY, 0 );
   574         return pTextureMemory->
GetGLId();
   599         return pTextureMemory;
   616     SetName(
"texturemanager");
   617   SetLabelName(
"texturemanager");
   625     m_textures_buffers.Init(0,NULL);
   640     m_textures_array.
Init( 0, NULL );
   642     m_preview_texture_idx = AddTexture(
"preview_texture", 1024, 1024);
   646     int m_id_default = AddTexture( 
"default", 256, 256);
   655   if (DefaultTexture) 
if (!DefaultTexture->
BuildFromFile(logoFile)) {
   656     MODebug2->
Error(
"moTextureManager::Init > error loading " + logoFile );
   659   m_id_default = AddTexture( 
"moldeonegro", 1800, 600);
   665                     moText(
"moldeonegro.png");
   668   m_id_default = AddTexture( 
"moldeotrans", 1800, 600);
   674                     moText(
"moldeotrans.png");
   678   if (DefaultTexture) 
if (!DefaultTexture->
BuildFromFile(logoFile)) {
   679     MODebug2->
Error(
"moTextureManager::Init > error loading " + logoFile );
   682     return (m_glmanager && m_fbmanager);
   687     m_textures_array.Finish();
   698     if (-1 < moid) 
return moid;
   700         if (p_create_tex) 
return AddTexture(param);
   707     if (-1 < moid) 
return moid;
   709         if (p_create_tex) 
return AddTexture(value);
   717     for (
MOuint i = 0; i < m_textures_array.Count(); i++)
   719         ptex = m_textures_array[i];
   720         if ((ptex != NULL) && (!stricmp(ptex->
GetName(), p_name))) {
   721             if (p_refresh) ptex->
Refresh();
   726     if (p_create_tex) 
return AddTexture(p_name);
   735   for (
MOuint i = 0; i < m_textures_array.Count(); i++)
   737         ptex = m_textures_array[i];
   750     if (p_foldername.
Trim() == 
moText(
"")) 
return -1;
   751     for (
MOuint i = 0; i < m_textures_buffers.Count(); i++)
   753         ptexbuffer = m_textures_buffers[i];
   754         if ((ptexbuffer != NULL) && (!stricmp(ptexbuffer->
GetName(), p_foldername))) 
return i;
   756     if (p_create_tex) 
return AddTextureBuffer( p_foldername, p_bufferformat );
   763     if (0<=idx && idx<(
int)m_textures_array.Count()) {
   764         return m_textures_buffers[idx];
   772     for (
MOuint i = 0; i < m_textures_array.Count(); i++)
   774         ptex = m_textures_array[i];
   775         if ((ptex != NULL) && (ptex->
GetGLId() == p_glid)) 
return i;
   782     moTexture* ptex = CreateTexture(p_type, p_name, p_tex_param);
   785         m_textures_array.Add(ptex);
   786         ptex->
SetMOId(m_textures_array.Count() - 1);
   795     return AddTexture( pValue );
   801     MOuint type = GetTypeForFile(name);
   807     moTexture* ptex = CreateTexture(type, name);
   815             res = CreateMultipleTex(ptex_mult, p_value);
   820             res = ptex_mov->
Load(p_value);
   825             res = ptex_videobuffer->
Load(p_value);
   830             res = ptex_circularvideobuffer->
Load(p_value);
   834             m_textures_array.Add(ptex);
   835             ptex->
SetMOId(m_textures_array.Count() - 1);
   855             m_textures_array.Add(ptex);
   856             ptex->
SetMOId(m_textures_array.Count() - 1);
   876             m_textures_array.Add(ptex);
   877             ptex->
SetMOId(m_textures_array.Count() - 1);
   892     MOuint type = GetTypeForFile(name);
   896     moTexture* ptex = CreateTexture(type, name);
   899   moFile TexFileName( p_filename );
   900   p_filename = TexFileName.GetAbsolutePath();
   919             m_textures_array.Add(ptex);
   920             ptex->
SetMOId(m_textures_array.Count() - 1);
   924             MODebug2->
Error(
"moTextureManager::AddTexture > filename: " + p_filename + 
" failed BuildFromFile()/LoadMovieFile()");
   925             DeleteTexture(ptex->
GetMOId());
   938             m_textures_buffers.Add( ptexbuffer );
   940             return (m_textures_buffers.Count() - 1);
   942             MODebug2->
Error( 
moText(
"moTextureManager::AddTextureBuffer Error: Initializing texturebuffer: ") + (
moText)p_foldername );
   955     if (ValidTexture(p_moid))
   957         moTexture* ptex = m_textures_array[p_moid];
   960         m_textures_array.Remove(p_moid);
   961         for (
MOuint i = p_moid; i < m_textures_array.Count(); i++) m_textures_array[i]->SetMOId(i);
   969     moText extension = p_filename;
   970     moText begin = p_filename;
   973     moFile FileName(p_filename);
   976     if (!stricmp(extension,
".tga")
   977      || !stricmp(extension,
".jpg")
   978      || !stricmp(extension,
".png")
   979      || !stricmp(extension,
".bmp")
   980      || !stricmp(extension,
".tif")
   981      || !stricmp(extension,
".xpm"))
   983     if (!stricmp(begin,
"multiple"))
   985     if (!stricmp(extension,
".mkv")
   986      || !stricmp(extension,
".ogg")
   987      || !stricmp(extension,
".ogv")
   988      || !stricmp(extension,
".avi")
   989      || !stricmp(extension,
".mov")
   990      || !stricmp(extension,
".mpg")
   991      || !stricmp(extension,
".mpeg")
   992      || !stricmp(extension,
".mts")
   993      || !stricmp(extension,
".m2ts")
   994      || !stricmp(extension,
".vob")
   995      || !stricmp(extension,
".m2v")
   996      || !stricmp(extension,
".mp4")
   997      || !stricmp(extension,
".web")
   998      || !stricmp(extension,
".webm"))
  1013     MOuint new_moid = m_textures_array.Count();
  1048         ptex = (
moTexture*)ptex_circularvideobuffer;
  1059     return CreateMultipleTex(p_tex_mult, pValue);
  1068     for (
MOuint i = 0; i < nfiles; i++)
  1071         moid = GetTextureMOId(texfn, 
true);
  1079     return ValidTexture(p_moid) ? m_textures_array[p_moid]->GetType() : 
MO_UNDEFINED;
  1084     return ValidTexture(p_moid) ? m_textures_array[p_moid]->GetGLId() : 0;
  1090   if (Events==NULL) 
return;
  1094     for(
MOuint k=0; k<m_textures_buffers.Count(); k++) {
 virtual void ReleaseFrame(MOuint p_i)
 
void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message)
 
MOint GetTextureBuffer(moText p_foldername, MOboolean p_create_tex=true, moText p_bufferformat="JPGAVERAGE")
 
virtual ~moTextureBuffer()
 
Parámetros internos de una textura. 
 
static void Message(moText p_text)
Anuncia un mensaje al usuario además de guardarlo en el log de texto. 
 
moTextureBufferFormat
Buffer de imágenes. 
 
void Error(moText p_text)
Anuncia y registra un error. 
 
virtual MOboolean Finish()
 
MOuint GetTextureArray(int width, int height, int levels, bool force_load=false)
 
moValueBase & GetSubValue(MOint p_indexsubvalue=0)
 
MOboolean BuildFromBuffer(MOuint p_width, MOuint p_height, const GLvoid *p_buffer, GLenum p_format=GL_RGBA, GLenum p_type=GL_UNSIGNED_BYTE)
 
moDefineDynamicArray(moTextureBuffers) moDefineDynamicArray(moTextureFrames) void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif
 
MOboolean LoadImage(moText p_ImageName, moBitmap *pImage, int indeximage)
 
una textura animada basada en una película 
 
static void Error(moText p_text)
Anuncia un error. 
 
MOboolean Load(moParam *p_param)
 
MOboolean LoadCompleted()
 
virtual moTextureMemory * GetTexture(MOuint p_i)
 
void SetMOId(MOuint p_moid)
 
MOint AddTexture(MOuint p_type, moText p_name, moTexParam p_tex_param=MODefTex2DParams)
 
virtual int GetFrame(MOuint p_i)
 
MOboolean BuildEmpty(MOuint p_width, MOuint p_height)
 
EACH IMAGE OF THE BUFFER IS ANALIZED (HISTOGRAM LEVELS) 
 
MOboolean LoadMovieFile(moText p_filename)
 
MOboolean m_bLoadCompleted
 
moFile * Find(MOint index)
 
moText GetExtension()
Get absolute path and filename "/D/PP/myFileName.txt". 
 
MOboolean CheckErrors(moText p_location)
 
void AddFrame(moTexture *p_texture)
 
clase de para manejar textos 
 
moTexture * GetTexture(MOuint p_moid)
 
Dispositivo de entrada/salida, típicamente, interfaces humanas de IO y datos ( teclado, mouse, tableta, tcp, udp, serial ) 
 
void Log(moText p_text)
Escribe un mensaje en el archivo de registro (log) 
 
moResourceManager * m_pResourceManager
 
MOboolean UpdateImages(int maxfiles=-1)
 
Buffer de imágenes para video. 
 
virtual MOboolean Init()
Inicializa el objeto. 
 
MOboolean DeleteTexture(MOuint p_moid)
 
moFileManager * GetFileMan()
 
MOuint GetGLId(MOuint p_moid)
 
MOuint GetTypeForFile(moText p_filename)
 
moTextureBuffer(int slots=0)
 
MOint GetTextureMOId(moParam *param, MOboolean p_create_tex)
 
moBitmap * LoadFromMemory()
 
clase base para el manejo de una textura 
 
moDirectory * GetDirectory(moText p_Path)
 
moText GetCompletePath()
Get inmediate folder name: return "PP" for "PP/myFileName.txt". 
 
moDirectory * m_pDirectory
 
Administrador de recursos. 
 
MOboolean CreateMultipleTex(moTextureMultiple *p_tex_mult, moParam *p_param)
 
moTextureFrames & GetBufferPatterns(moTexture *p_ImageReference, int x, int y, int width=0, int height=0)
 
moTextureFrames * m_pBufferPatterns
 
static moDebug * MODebug2
Clase de impresión de errores para depuración. 
 
virtual void Update(moEventList *Events)
 
moDataManager * GetDataMan()
 
virtual ~moTextureManager()
 
virtual MOboolean Init(moText p_name, MOuint p_moid, moResourceManager *p_res, moTexParam p_param=MODefTex2DParams)
 
MOboolean BuildFromFile(moText p_filename)
 
moTextureFrames & GetBufferLevels(int L, int C)
 
void Push(moText p_text)
Apila el mensaje dentro de la pila de mensajes. 
 
moValue & GetValue(MOint i=-1)
 
MOboolean Load(moParam *p_param)
 
MOboolean IsBuildedFromFile() const
 
moMoldeoObjectType GetType() const
 
MOint AddTextureBuffer(moText p_foldername, moText p_bufferformat="JPGAVERAGE")
 
LIBMOLDEO_API moText0 IntToStr(int a)
 
virtual MOboolean BuildFromBitmap(moBitmap *p_bitmap, moText p_bufferformat="JPG")
Guarda el bitmap con el formato elegido en memoria, luego construye la textura opengl. 
 
clase base para el manejo de una textura con su copia comprimida en memoria 
 
MOuint GetSubValueCount()
 
MOboolean m_bInitialized
Valor de inicialización. 
 
moTextureFrames ** m_pBufferLevels
 
virtual MOboolean Finish()
Finaliza el objeto, libera recursos. 
 
Buffer Circular de imágenes para video. 
 
EACH IMAGE OF THE BUFFER IS ANALIZED IN A REDUCED PATTERN. 
 
void Message(moText p_text)
Anuncia un mensaje al usuario además de guardarlo en el log de texto. 
 
moTexture * CreateTexture(MOuint p_type, moText p_name, moTexParam p_param=MODefTex2DParams)
 
virtual MOboolean Finish()
 
moTextureManager * GetTextureMan()