diff --git a/apps/nexus/file.h b/apps/nexus/file.h index 0191cb1a..dc48ddaa 100644 --- a/apps/nexus/file.h +++ b/apps/nexus/file.h @@ -25,13 +25,7 @@ class File { size = file.size; readonly = file.readonly; ((File &)file).fp = NULL; - } - bool operator=(const File &file) { - fp = file.fp; - size = file.size; - readonly = file.readonly; - ((File &)file).fp = NULL; - } + } bool Create(const std::string &filename); bool Load(const std::string &filename, bool readonly = false); void Close(); diff --git a/apps/nexus/mfile.cpp b/apps/nexus/mfile.cpp index 5f7fdc73..1c818608 100644 --- a/apps/nexus/mfile.cpp +++ b/apps/nexus/mfile.cpp @@ -5,8 +5,6 @@ using namespace std; using namespace nxs; -typedef unsigned long long u64; - bool MFile::Create(const string &fname, unsigned int mxs) { filename = fname; files.clear(); @@ -14,8 +12,7 @@ bool MFile::Create(const string &fname, unsigned int mxs) { readonly = false; assert(mxs <= (1<<30)); max_size = mxs; - AddFile(); - return true; + return AddFile(); } bool MFile::Load(const string &fname, bool ronly) { @@ -55,26 +52,30 @@ void MFile::Close() { files.clear(); } -void MFile::Redim(unsigned long long sz) { +void MFile::Redim(int64 sz) { assert(!readonly); if(sz > size) { - while(sz - size >= max_size) { + unsigned int totfile = (unsigned int)(sz/max_size); + //TODO test rhis!!!! + while(files.size() < totfile) { RedimLast(max_size); AddFile(); } - RedimLast(sz - size); + assert(size < sz); + assert(sz - size < max_size); + RedimLast(files.back().Length() + (unsigned int)(sz - size)); } else { while(size - files.back().Length() > sz) RemoveFile(); assert(sz <= size); - RedimLast(files.back().Length() - (size - sz)); + RedimLast(files.back().Length() - (unsigned int)(size - sz)); } } -void MFile::SetPosition(unsigned long long pos) { +void MFile::SetPosition(int64 pos) { assert(pos < size); - curr_fp = pos/(u64)max_size; - curr_pos = pos - (u64)max_size * (u64)curr_fp; + curr_fp = (unsigned int)(pos/(int64)max_size); + curr_pos = (unsigned int)(pos - (int64)max_size * (int64)curr_fp); assert(curr_fp < files.size()); files[curr_fp].SetPosition(curr_pos); } @@ -106,11 +107,11 @@ void MFile::WriteBuffer(void *data, unsigned int sz) { files[curr_fp].WriteBuffer(data, sz); } - void MFile::AddFile() { + bool MFile::AddFile() { string name = Name(files.size()); files.push_back(File()); File &file = files.back(); - file.Create(name); + return file.Create(name); } void MFile::RemoveFile() { diff --git a/apps/nexus/mfile.h b/apps/nexus/mfile.h index b82fda3f..dd9caf4e 100644 --- a/apps/nexus/mfile.h +++ b/apps/nexus/mfile.h @@ -8,6 +8,11 @@ namespace nxs { +#ifdef WIN32 +typedef __int64 int64; +#else +typedef unsigned long long int64; +#endif class MFile { public: @@ -21,10 +26,10 @@ class MFile { bool Load(const std::string &filename, bool readonly = false); void Close(); - unsigned long long Length() { return size; } - void Redim(unsigned long long size); + int64 Length() { return size; } + void Redim(int64 size); - void SetPosition(unsigned long long pos); + void SetPosition(int64 pos); void ReadBuffer(void *data, unsigned int size); void WriteBuffer(void *data, unsigned int size); @@ -35,12 +40,12 @@ class MFile { std::vector files; unsigned int curr_pos; unsigned int curr_fp; - unsigned long long size; + int64 size; unsigned int max_size; bool readonly; private: //all theese refer to the last in the fp. - void AddFile(); + bool AddFile(); void RemoveFile(); void RedimLast(unsigned int sz); unsigned int GetSize(); diff --git a/apps/nexus/nexusview.cpp b/apps/nexus/nexusview.cpp index b647e72f..7f21a612 100644 --- a/apps/nexus/nexusview.cpp +++ b/apps/nexus/nexusview.cpp @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.17 2004/10/21 12:22:21 ponchio +Small changes. + Revision 1.16 2004/10/19 01:23:02 ponchio Daily backup (fragment...) @@ -431,7 +434,7 @@ int main(int argc, char *argv[]) { void gl_print(float x, float y, char *str) { glRasterPos2f(x, y); - int len = strlen(str); + int len = (int)strlen(str); for(int i = 0; i < len; i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, str[i]); } diff --git a/apps/nexus/nxsedit.cpp b/apps/nexus/nxsedit.cpp index fef43f27..2b105717 100644 --- a/apps/nexus/nxsedit.cpp +++ b/apps/nexus/nxsedit.cpp @@ -129,25 +129,25 @@ int main(int argc, char *argv[]) { case 'z': compress = true; break; case 'x': uncompress = true; break; - case 'v': qvertex = atof(optarg); + case 'v': qvertex = (float)atof(optarg); if(qvertex == 0) { cerr << "Invalid value for quantization: " << optarg << endl; return -1; } break; - case 'n': qnormal = atof(optarg); + case 'n': qnormal = (float)atof(optarg); if(qnormal == 0) { cerr << "Invalid value for quantization: " << optarg << endl; return -1; } break; - case 'k': qcolor = atof(optarg); + case 'k': qcolor = (float)atof(optarg); if(qcolor == 0) { cerr << "Invalid value for quantization: " << optarg << endl; return -1; } break; - case 't': qtexture = atof(optarg); + case 't': qtexture = (float)atof(optarg); if(qtexture == 0) { cerr << "Invalid value for quantization: " << optarg << endl; return -1; @@ -262,6 +262,10 @@ int main(int argc, char *argv[]) { return 0; } + if((add & NXS_NORMALS_SHORT) && compress) { + cerr << "Its not possible to add normals and compress in the same step\n"; + return -1; + } unsigned int signature = nexus.signature; signature |= add; signature &= ~remove; @@ -303,16 +307,17 @@ int main(int argc, char *argv[]) { Nexus::PatchInfo &dst_entry = out.index[patch]; + Patch dst_patch = out.GetPatch(patch); //copy vertices: memcpy(dst_patch.VertBegin(), src_patch.VertBegin(), src_patch.nv * sizeof(Point3f)); - if(qvertex) { + if(qvertex && !add_normals) { float *ptr = (float *)dst_patch.VertBegin(); - for(unsigned int i = 0; i < dst_patch.nv*3; i++) { - ptr[i] = qvertex * nearbyintf(ptr[i]/qvertex); + for(int i = 0; i < dst_patch.nv*3; i++) { + ptr[i] = qvertex * (int)(ptr[i]/qvertex); //ptr[i] = 0; } } @@ -324,22 +329,22 @@ int main(int argc, char *argv[]) { strip.size() * sizeof(short)); } else { if(nexus.signature & NXS_STRIP) { - memcpy(dst_patch.FaceBegin(), src_patch.FaceBegin(), - src_patch.nf * sizeof(unsigned short)); + memcpy(dst_patch.FaceBegin(), src_patch.FaceBegin(), + src_patch.nf * sizeof(unsigned short)); } else { - memcpy(dst_patch.FaceBegin(), src_patch.FaceBegin(), - src_patch.nf * sizeof(unsigned short) * 3); + memcpy(dst_patch.FaceBegin(), src_patch.FaceBegin(), + src_patch.nf * sizeof(unsigned short) * 3); } } if((nexus.signature & NXS_COLORS) && (out.signature & NXS_COLORS)) memcpy(dst_patch.ColorBegin(), src_patch.ColorBegin(), - src_patch.nv * sizeof(unsigned int)); + src_patch.nv * sizeof(unsigned int)); if((nexus.signature & NXS_NORMALS_SHORT) && (out.signature & NXS_NORMALS_SHORT)) memcpy(dst_patch.Norm16Begin(), src_patch.Norm16Begin(), - src_patch.nv * sizeof(short)*4); + src_patch.nv * sizeof(short)*4); //reordering //WATCH OUT BORDERS! @@ -372,7 +377,7 @@ int main(int argc, char *argv[]) { cerr << "Unsupported color\n"; return -1; } - if(qvertex) { + if(qvertex && add_normals) { report.Init(nexus.index.size()); cout << "Quantizing vertices\n"; for(unsigned int patch = 0; patch < nexus.index.size(); patch++) { @@ -380,8 +385,8 @@ int main(int argc, char *argv[]) { Patch src_patch = nexus.GetPatch(patch); float *ptr = (float *)src_patch.VertBegin(); - for(unsigned int i = 0; i < src_patch.nv*3; i++) - ptr[i] = qvertex * nearbyintf(ptr[i]/qvertex); + for(int i = 0; i < src_patch.nv*3; i++) + ptr[i] = qvertex * (int)(ptr[i]/qvertex); } report.Finish(); } diff --git a/apps/nexus/patchserver.cpp b/apps/nexus/patchserver.cpp index c012717c..dac912e2 100644 --- a/apps/nexus/patchserver.cpp +++ b/apps/nexus/patchserver.cpp @@ -221,7 +221,7 @@ void PatchServer::Flush(PTime &ptime) { if(entry.disk_size == 0xffff) {//allocate space assert(entry.patch_start == 0xffffffff); entry.disk_size = (unsigned int)((compressed_size-1)/chunk_size) + 1; - entry.patch_start = Length()/chunk_size; + entry.patch_start = (unsigned int)(Length()/chunk_size); Redim(Length() + entry.disk_size * chunk_size); } else { cerr << "OOOOPSPPPS not supported!" << endl; @@ -233,7 +233,7 @@ void PatchServer::Flush(PTime &ptime) { } else { if(entry.disk_size == 0xffff) { entry.disk_size = entry.ram_size; - entry.patch_start = Length()/chunk_size; + entry.patch_start = (unsigned int)(Length()/chunk_size); Redim(Length() + entry.disk_size * chunk_size); } SetPosition(entry.patch_start * chunk_size); diff --git a/apps/nexus/voronoinxs.cpp b/apps/nexus/voronoinxs.cpp index 3a26b67d..56fc6363 100644 --- a/apps/nexus/voronoinxs.cpp +++ b/apps/nexus/voronoinxs.cpp @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.17 2004/10/21 12:22:21 ponchio +Small changes. + Revision 1.16 2004/10/19 01:23:02 ponchio Daily backup (fragment...) @@ -390,7 +393,7 @@ void NexusSplit(Nexus &nexus, VoronoiChain &vchain, } centroid /= newface.size()/3; //prune small cells: - float min_size = (newface.size()/3) / 20; + float min_size = (newface.size()/3) / 20.0f; vector cellremap; VoronoiPartition local; diff --git a/apps/nexus/watch.cpp b/apps/nexus/watch.cpp index 71104905..698f4ff9 100644 --- a/apps/nexus/watch.cpp +++ b/apps/nexus/watch.cpp @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.2 2004/10/21 12:14:02 ponchio +Support for mfile (>4Gb) + Revision 1.1 2004/10/19 17:20:24 ponchio renamed @@ -58,19 +61,19 @@ void Watch::Start(void) { elapsed = 0; } -double Watch::Pause() { +float Watch::Pause() { QueryPerformanceCounter(&tend); elapsed += Diff(); - return elapsed; + return (float)elapsed; } void Watch::Continue() { QueryPerformanceCounter(&tstart); } -double Watch::Time() { +float Watch::Time() { QueryPerformanceCounter(&tend); - return elapsed + Diff(); + return (float)(elapsed + Diff()); } double Watch::Diff() { @@ -88,19 +91,19 @@ void Watch::Start() { elapsed = 0; } -double Watch::Pause() { +float Watch::Pause() { gettimeofday(&tend, &tz); elapsed += Diff(); - return elapsed; + return (float)elapsed; } void Watch::Continue() { gettimeofday(&tstart, &tz); } -double Watch::Time() { +float Watch::Time() { gettimeofday(&tend, &tz); - return elapsed + Diff(); + return (float)(elapsed + Diff()); } double Watch::Diff() { diff --git a/apps/nexus/watch.h b/apps/nexus/watch.h index 414c5ad7..d3b07b91 100644 --- a/apps/nexus/watch.h +++ b/apps/nexus/watch.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.2 2004/10/21 12:14:02 ponchio +Support for mfile (>4Gb) + Revision 1.1 2004/10/19 17:20:24 ponchio renamed @@ -53,10 +56,10 @@ class Watch { public: Watch(); void Start(); - double Pause(); + float Pause(); void Continue(); void Reset(); - double Time(); + float Time(); int Usec(); private: double Diff();