|
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.
|