diff --git a/deploy.bat b/deploy.bat new file mode 100644 index 0000000..8161f4f --- /dev/null +++ b/deploy.bat @@ -0,0 +1,3 @@ +git add * +git commit -m %1 +git push origin master \ No newline at end of file diff --git a/tiny_obj_loader.h b/tiny_obj_loader.h index 66fd5f7..463f0c3 100644 --- a/tiny_obj_loader.h +++ b/tiny_obj_loader.h @@ -50,9 +50,6 @@ THE SOFTWARE. #include #include -//tigra: unordered_map for hashed keywords -#include - namespace tinyobj { // https://en.wikipedia.org/wiki/Wavefront_.obj_file says ... @@ -366,8 +363,99 @@ void LoadMtl(std::map *material_map, #include #include +//tigra: unordered_map for hashed keywords +#include + + +#define TINYOBJLOADER_IMPLEMENTATION_BUFREAD + + + +#ifdef TINYOBJLOADER_IMPLEMENTATION_BUFREAD +#include + #include + #include + #include + + +#define O_LARGEFILE 0100000 +#endif + namespace tinyobj { + +#ifdef TINYOBJLOADER_IMPLEMENTATION_BUFREAD +//tigra: ImportInBuf - buffered input file +class ImportInBuf: public std::streambuf +{ +public: + +ImportInBuf(const char* filename, size_t buf_sz_=64*1024) +:fd_(open(filename,O_RDONLY | O_LARGEFILE)) +{ + //fprintf(stderr, "ImportInBuf(%s\n", filename); + +if(fd_<0) +{ + fprintf(stderr, "can't open file %s\n",filename); + exit(1); +} + +buf_sz = buf_sz_; + +//fprintf(stderr, "buf_sz=%d\n", buf_sz); + +buffer_ = (char*) malloc(buf_sz); + +setg(buffer_,buffer_,buffer_); +struct stat st; +fstat(fd_,&st); +fsize_=st.st_size; + +//fprintf(stderr, "file size: %ld\n", fsize_); +} + +// you don't have to do it like this if your streams are 64 bit +void seekg(uint64_t pos) +{ +lseek(fd_,pos,SEEK_SET); +pos_=pos; +setg(buffer_,buffer_,buffer_); +} + +uint64_t tellg()const { return pos_; } +uint64_t size()const { return fsize_; } + +~ImportInBuf(){ close(fd_); free(buffer_); } + +private: +ImportInBuf(const ImportInBuf&); +ImportInBuf& operator=(const ImportInBuf&); +virtual int underflow() +{ +if(gptr() *shapes, std::stringstream errss; - //tigra: add buffered stream - std::ifstream ifs(filename); + //tigra: add buffered stream + #ifdef TINYOBJLOADER_IMPLEMENTATION_BUFREAD + ImportInBuf buf(filename); + std::istream ifs(&buf); + #else + std::ifstream ifs(filename); + #endif + if (!ifs) { errss << "Cannot open file [" << filename << "]" << std::endl; if (err) {