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()