From: <cn...@us...> - 2008-12-31 00:12:59
|
Revision: 120 http://hgengine.svn.sourceforge.net/hgengine/?rev=120&view=rev Author: cnlohr Date: 2008-12-31 00:12:56 +0000 (Wed, 31 Dec 2008) Log Message: ----------- use MercuryFiles for images Modified Paths: -------------- Mercury2/scenegraph.xml Mercury2/src/BMPLoader.cpp Mercury2/src/ImageLoader.cpp Mercury2/src/ImageLoader.h Mercury2/src/MercuryUtil.cpp Mercury2/src/PNGLoader.cpp Modified: Mercury2/scenegraph.xml =================================================================== --- Mercury2/scenegraph.xml 2008-12-30 23:50:34 UTC (rev 119) +++ Mercury2/scenegraph.xml 2008-12-31 00:12:56 UTC (rev 120) @@ -4,7 +4,7 @@ </node> <node type="transformnode" movz="-3"> <node type="renderablenode"> - <asset type="texture" imagefile="test.bmp"/> + <asset type="texture" imagefile="test2.png"/> <asset type="quad"/> </node> </node> @@ -16,7 +16,7 @@ <node type="transformnode" movz="-3" movx="1" movy="-1"> <node type="renderablenode"> <asset type="texture" imagefile="test2.png"/> - <asset type="texture" imagefile="test.bmp"/> + <asset type="texture" imagefile="test2.png"/> <asset type="quad"/> </node> </node> Modified: Mercury2/src/BMPLoader.cpp =================================================================== --- Mercury2/src/BMPLoader.cpp 2008-12-30 23:50:34 UTC (rev 119) +++ Mercury2/src/BMPLoader.cpp 2008-12-31 00:12:56 UTC (rev 120) @@ -4,7 +4,7 @@ using namespace std; -RawImageData* LoadBMP( FILE* file ) +RawImageData* LoadBMP( MercuryFile * file ) { int offset; char* tmp = new char[sizeof(int)]; @@ -15,7 +15,6 @@ unsigned char b[3]; unsigned int res_x, res_y; -// FILE* file = fopen(filename.c_str(), "rb"); printf( "BMP Load Start\n" ); if (file==NULL) { @@ -26,8 +25,8 @@ //Get the type of file and test memset(tmp, 0, 4); -// file->Read(tmp, sizeof(char) * 2); - fread(tmp, sizeof(char) * 2, 1, file); + file->Read(tmp, sizeof(char) * 2); +// fread(tmp, sizeof(char) * 2, 1, file); MString type(tmp); if (type != "BM") @@ -37,33 +36,33 @@ return NULL; } //Offset of bitmap data. - fseek(file, 10, SEEK_SET); -// file->Seek(10); - fread(tmp, 4, 1, file); -// file->Read(tmp, 4); +// fseek(file, 10, SEEK_SET); + file->Seek(10); +// fread(tmp, 4, 1, file); + file->Read(tmp, 4); memcpy(&offset, tmp, 4); TO_ENDIAN( offset ); RawImageData* image = new RawImageData; //width & width - fseek(file, 18, SEEK_SET); -// file->Seek(18); - fread(tmp, sizeof(int), 1, file); -// file->Read(tmp, sizeof(int)); +// fseek(file, 18, SEEK_SET); + file->Seek(18); +// fread(tmp, sizeof(int), 1, file); + file->Read(tmp, sizeof(int)); memcpy(&image->m_width, tmp, sizeof(int)); TO_ENDIAN( image->m_width ); - fread(tmp, sizeof(int), 1, file); -// file->Read(tmp, sizeof(int)); +// fread(tmp, sizeof(int), 1, file); + file->Read(tmp, sizeof(int)); memcpy(&image->m_height, tmp, sizeof(int)); TO_ENDIAN( image->m_height ); //bits per pixel memset(tmp, 0, sizeof(int)); - fseek(file, 28, SEEK_SET); -// file->Seek(28); -// file->Read(tmp, sizeof(int)); - fread(tmp, sizeof(int), 1, file); +// fseek(file, 28, SEEK_SET); + file->Seek(28); +// fread(tmp, sizeof(int), 1, file); + file->Read(tmp, sizeof(int)); memcpy(&bitsapix, tmp, sizeof(int)); TO_ENDIAN( bitsapix ); @@ -76,10 +75,10 @@ } //compression -// file->Seek(30); - fseek(file, 30, SEEK_SET); -// file->Read(tmp, sizeof(int)); - fread(tmp, sizeof(int), 1, file); + file->Seek(30); +// fseek(file, 30, SEEK_SET); + file->Read(tmp, sizeof(int)); +// fread(tmp, sizeof(int), 1, file); memcpy(&compression, tmp, sizeof(int)); TO_ENDIAN(compression); @@ -93,19 +92,19 @@ //pix/m X memset(tmp, 0, sizeof(int)); -// file->Seek(38); - fseek(file, 38, SEEK_SET); -// file->Read(tmp, sizeof(int)); - fread(tmp, sizeof(int), 1, file); +// fseek(file, 38, SEEK_SET); + file->Seek(38); +// fread(tmp, sizeof(int), 1, file); + file->Read(tmp, sizeof(int)); memcpy(&res_x, tmp, sizeof(int)); TO_ENDIAN(res_x); //pix/m Y memset(tmp, 0, sizeof(int)); - fseek(file, 42, SEEK_SET); -// file->Seek(42); -// file->Read(tmp, sizeof(int)); - fread(tmp, sizeof(int), 1, file); +// fseek(file, 42, SEEK_SET); + file->Seek(42); +// fread(tmp, sizeof(int), 1, file); + file->Read(tmp, sizeof(int)); memcpy(&res_y, tmp, sizeof(int)); TO_ENDIAN(res_y); @@ -120,9 +119,9 @@ } //Get the file length -// length = file->Length(); - fseek(file,0,SEEK_END); - length = ftell(file); + length = file->Length(); +// fseek(file,0,SEEK_END); +// length = ftell(file); rawlength = (length) - (offset-1); //Remember to subtract 1 from the offset. //Allocate space @@ -132,19 +131,19 @@ memset(image->m_data, 0, rawlength); //Get raw data and convert BGR->RGB -// file->Seek(offset); - fseek(file, offset, SEEK_SET); + file->Seek(offset); +// fseek(file, offset, SEEK_SET); image->m_ColorByteType = RGB; unsigned long row, pixel; unsigned char* rowPtr; - for (unsigned int x = 0; !feof(file) && (x+3 < (unsigned)rawlength); x += 3) + for (unsigned int x = 0; !file->Eof() && (x+3 < (unsigned)rawlength); x += 3) { memset(b, 0, sizeof(unsigned char) * 3); -// file->Read((char*)&b, sizeof(unsigned char) * 3); - fread(&b, sizeof(unsigned char) * 3, 1, file); + file->Read((char*)&b, sizeof(unsigned char) * 3); +// fread(&b, sizeof(unsigned char) * 3, 1, file); row = image->m_height - (x/3)/image->m_width - 1; //current row pixel = (x/3)%image->m_width; //which pixel in the row Modified: Mercury2/src/ImageLoader.cpp =================================================================== --- Mercury2/src/ImageLoader.cpp 2008-12-30 23:50:34 UTC (rev 119) +++ Mercury2/src/ImageLoader.cpp 2008-12-31 00:12:56 UTC (rev 120) @@ -11,35 +11,41 @@ return *instance; } -bool ImageLoader::RegisterFactoryCallback(const MString& type, Callback1R< FILE*, RawImageData* > functor) +bool ImageLoader::RegisterFactoryCallback(const MString& type, Callback1R< MercuryFile*, RawImageData* > functor) { MString t = ToUpper( type ); - std::pair<MString, Callback1R< FILE*, RawImageData* > > pp(t, functor); + std::pair<MString, Callback1R< MercuryFile*, RawImageData* > > pp(t, functor); m_factoryCallbacks.push_back( pp ); return true; } RawImageData* ImageLoader::LoadImage(const MString& filename) { - FILE* f = fopen(filename.c_str(), "rb"); + MercuryFile* f = FILEMAN.Open( filename ); char fingerprint[4]; fingerprint[3] = 0; + + if( !f ) + { + printf( "Error opening image: %s\n", filename.c_str() ); + return 0; + } + + f->Read( fingerprint, 3 ); + f->Seek( 0 ); - fread(fingerprint, sizeof(char)*3, 1, f); - fseek(f, 0, SEEK_SET); - MString t(fingerprint);// = ToUpper( type ); - std::list< std::pair< MString, Callback1R< FILE*, RawImageData* > > >::iterator i; + std::list< std::pair< MString, Callback1R< MercuryFile*, RawImageData* > > >::iterator i; for (i = m_factoryCallbacks.begin(); i != m_factoryCallbacks.end(); ++i) { if (i->first == t) { RawImageData* d = i->second(f); - fclose(f); + delete f; return d; } } - fclose(f); + delete f; return NULL; } Modified: Mercury2/src/ImageLoader.h =================================================================== --- Mercury2/src/ImageLoader.h 2008-12-30 23:50:34 UTC (rev 119) +++ Mercury2/src/ImageLoader.h 2008-12-31 00:12:56 UTC (rev 120) @@ -2,6 +2,7 @@ #define IMAGELOADER_H #include <RawImageData.h> +#include <MercuryFile.h> #include <Callback.h> #include <list> #include <MercuryUtil.h> @@ -10,17 +11,17 @@ { public: static ImageLoader& GetInstance(); - bool RegisterFactoryCallback(const MString& type, Callback1R< FILE*, RawImageData* >); + bool RegisterFactoryCallback(const MString& type, Callback1R< MercuryFile *, RawImageData* >); RawImageData* LoadImage(const MString& filename); private: - std::list< std::pair< MString, Callback1R< FILE*, RawImageData* > > > m_factoryCallbacks; + std::list< std::pair< MString, Callback1R< MercuryFile*, RawImageData* > > > m_factoryCallbacks; }; static InstanceCounter<ImageLoader> ILcounter("ImageLoader"); #define REGISTER_IMAGE_TYPE(fingerprint,functor)\ - Callback1R< FILE*, RawImageData* > factoryclbk##functor( functor ); \ + Callback1R< MercuryFile*, RawImageData* > factoryclbk##functor( functor ); \ bool GlobalImageRegisterSuccess##functor = ImageLoader::GetInstance().RegisterFactoryCallback(#fingerprint, factoryclbk##functor); Modified: Mercury2/src/MercuryUtil.cpp =================================================================== --- Mercury2/src/MercuryUtil.cpp 2008-12-30 23:50:34 UTC (rev 119) +++ Mercury2/src/MercuryUtil.cpp 2008-12-31 00:12:56 UTC (rev 120) @@ -58,11 +58,14 @@ if( !data ) { data = 0; + delete f; return -1; } int r = f->Read( data, length ); + delete f; + if( r != length ) { free( data ); Modified: Mercury2/src/PNGLoader.cpp =================================================================== --- Mercury2/src/PNGLoader.cpp 2008-12-30 23:50:34 UTC (rev 119) +++ Mercury2/src/PNGLoader.cpp 2008-12-31 00:12:56 UTC (rev 120) @@ -6,10 +6,10 @@ void PNGRead( png_struct *png, png_byte *p, png_size_t size ) { - FILE* f = (FILE*)png->io_ptr; + MercuryFile * f = (MercuryFile*)png->io_ptr; -// int got = f->Read( p, size ); - int got = fread(p, size, 1, f ); + int got = f->Read( p, size ); +// int got = fread(p, size, 1, f ); if( got == -1 ) png_error( png, "Error reading from file"); @@ -17,7 +17,7 @@ // png_error( png, "Unexpected EOF" ); } -RawImageData* LoadPNG( FILE * fp ) +RawImageData* LoadPNG( MercuryFile * fp ) { png_structp png_ptr; png_infop info_ptr; @@ -31,8 +31,8 @@ //open file and test for it being a png if (!fp) assert("[read_png_file] File %s could not be opened for reading"); -// fp->Read(header, 8 ); - fread(header, 8, 1, fp); + fp->Read(header, 8 ); +// fread(header, 8, 1, fp); if (png_sig_cmp(header, 0, 8)) assert("[read_png_file] File %s is not recognized as a PNG file"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |