diff --git a/panda/src/downloader/decompressor.cxx b/panda/src/downloader/decompressor.cxx index 3d308c558f..9b42ec1791 100644 --- a/panda/src/downloader/decompressor.cxx +++ b/panda/src/downloader/decompressor.cxx @@ -104,10 +104,12 @@ request_decompress(const Filename &source_file, const string &event_name) { string extension = source_file.get_extension(); if (extension == "pz") dest_file = source_file.get_fullpath_wo_extension(); - else - downloader_cat.debug() - << "Decompressor::request_decompress() - Unknown file extension: ." - << extension << endl; + else { + if (downloader_cat.is_debug()) + downloader_cat.debug() + << "Decompressor::request_decompress() - Unknown file extension: ." + << extension << endl; + } return request_decompress(source_file, dest_file, event_name); } @@ -229,9 +231,10 @@ decompress(Filename &source_file) { if (extension == "pz") dest_file = source_file.get_fullpath_wo_extension(); else { - downloader_cat.debug() - << "Decompressor::request_decompress() - Unknown file extension: ." - << extension << endl; + if (downloader_cat.is_debug()) + downloader_cat.debug() + << "Decompressor::request_decompress() - Unknown file extension: ." + << extension << endl; return false; } return decompress(source_file, dest_file); diff --git a/panda/src/downloader/downloader.cxx b/panda/src/downloader/downloader.cxx index 1d9e70333d..220df859fa 100644 --- a/panda/src/downloader/downloader.cxx +++ b/panda/src/downloader/downloader.cxx @@ -753,6 +753,10 @@ write_to_disk(DownloadStatus &status) { _buffer_lock.lock(); #endif + if (downloader_cat.is_debug()) + downloader_cat.debug() + << "Downloader::write_to_buffer() - resizing buffer to: " + << _new_buffer_size << endl; _buffer.clear(); _buffer = new Buffer(_new_buffer_size); _buffer_size = _new_buffer_size; diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 7817a64117..2785fdb524 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -106,13 +106,11 @@ bool Texture::read(const string &name, const string &gray) { return false; } - int new_xsize, new_ysize; - int new_gxsize, new_gysize; if (max_texture_dimension > 0 && (pnmimage.get_x_size() > max_texture_dimension || pnmimage.get_y_size() > max_texture_dimension)) { - new_xsize = min(pnmimage.get_x_size(), max_texture_dimension); - new_ysize = min(pnmimage.get_y_size(), max_texture_dimension); + int new_xsize = min(pnmimage.get_x_size(), max_texture_dimension); + int new_ysize = min(pnmimage.get_y_size(), max_texture_dimension); gobj_cat.info() << "Automatically rescaling " << name << " from " << pnmimage.get_x_size() << " by " << pnmimage.get_y_size() << " to " @@ -128,8 +126,8 @@ bool Texture::read(const string &name, const string &gray) { if (max_texture_dimension > 0 && (grayimage.get_x_size() > max_texture_dimension || grayimage.get_y_size() > max_texture_dimension)) { - new_gxsize = min(grayimage.get_x_size(), max_texture_dimension); - new_gysize = min(grayimage.get_y_size(), max_texture_dimension); + int new_xsize = min(grayimage.get_x_size(), max_texture_dimension); + int new_ysize = min(grayimage.get_y_size(), max_texture_dimension); gobj_cat.info() << "Automatically rescaling " << gray << " from " << grayimage.get_x_size() << " by " << grayimage.get_y_size() << " to " @@ -142,17 +140,22 @@ bool Texture::read(const string &name, const string &gray) { } // Make sure the 2 images are the same size - if ((new_xsize != new_gxsize) || (new_ysize != new_gysize)) { + int xsize = pnmimage.get_x_size(); + int ysize = pnmimage.get_y_size(); + int gxsize = grayimage.get_x_size(); + int gysize = grayimage.get_y_size(); + if ((xsize != gxsize) || (ysize != gysize)) { gobj_cat.error() - << "Texture::read() - grayscale image not the same size as original" - << endl; + << "Texture::read() - grayscale image not the same size as original - " + << "orig = " << xsize << "x" << ysize << " - gray = " << gxsize + << "x" << gysize << endl; return false; } // Make the original image a 4-component image pnmimage.add_alpha(); - for (int x = 0; x < new_xsize; x++) { - for (int y = 0; y < new_ysize; y++) { + for (int x = 0; x < xsize; x++) { + for (int y = 0; y < ysize; y++) { pnmimage.set_alpha(x, y, grayimage.get_gray(x, y)); } } diff --git a/panda/src/gobj/texturePool.I b/panda/src/gobj/texturePool.I index 59b0909e35..ff468bcead 100644 --- a/panda/src/gobj/texturePool.I +++ b/panda/src/gobj/texturePool.I @@ -43,6 +43,20 @@ load_texture(const string &filename) { return get_ptr()->ns_load_texture(filename); } +//////////////////////////////////////////////////////////////////// +// Function: TexturePool::load_texture +// Access: Public, Static +// Description: Loads the given filename up into a texture, if it has +// not already been loaded, and returns the new texture. +// If a texture with the same filename was previously +// loaded, returns that one instead. If the texture +// file cannot be found, returns NULL. +//////////////////////////////////////////////////////////////////// +INLINE Texture *TexturePool:: +load_texture(const string &filename, const string &grayfilename) { + return get_ptr()->ns_load_texture(filename, grayfilename); +} + //////////////////////////////////////////////////////////////////// // Function: TexturePool::add_texture // Access: Public, Static diff --git a/panda/src/gobj/texturePool.cxx b/panda/src/gobj/texturePool.cxx index e063511294..4666b65f46 100644 --- a/panda/src/gobj/texturePool.cxx +++ b/panda/src/gobj/texturePool.cxx @@ -61,6 +61,37 @@ ns_load_texture(Filename filename) { return tex; } +//////////////////////////////////////////////////////////////////// +// Function: TexturePool::ns_load_texture +// Access: Private +// Description: The nonstatic implementation of load_texture(). +//////////////////////////////////////////////////////////////////// +Texture *TexturePool:: +ns_load_texture(Filename filename, Filename grayfilename) { + filename.resolve_filename(get_texture_path()); + filename.resolve_filename(get_model_path()); + + Textures::const_iterator ti; + ti = _textures.find(filename); + if (ti != _textures.end()) { + // This texture was previously loaded. + return (*ti).second; + } + + gobj_cat.info() + << "Loading texture " << filename << " and grayscale texture " + << grayfilename << endl; + PT(Texture) tex = new Texture; + if (!tex->read(filename, grayfilename)) { + // This texture was not found. + gobj_cat.error() << "Unable to read texture " << filename << "\n"; + return NULL; + } + + _textures[filename] = tex; + return tex; +} + //////////////////////////////////////////////////////////////////// // Function: TexturePool::ns_add_texture // Access: Private diff --git a/panda/src/gobj/texturePool.h b/panda/src/gobj/texturePool.h index aa61b8ef70..bdf154d60d 100644 --- a/panda/src/gobj/texturePool.h +++ b/panda/src/gobj/texturePool.h @@ -30,6 +30,8 @@ PUBLISHED: INLINE static bool has_texture(const string &filename); INLINE static bool verify_texture(const string &filename); INLINE static Texture *load_texture(const string &filename); + INLINE static Texture *load_texture(const string &filename, + const string &grayfilename); INLINE static void add_texture(Texture *texture); INLINE static void release_texture(Texture *texture); INLINE static void release_all_textures(); @@ -39,6 +41,7 @@ private: bool ns_has_texture(Filename filename); Texture *ns_load_texture(Filename filename); + Texture *ns_load_texture(Filename filename, Filename grayfilename); void ns_add_texture(Texture *texture); void ns_release_texture(Texture *texture); void ns_release_all_textures(); diff --git a/panda/src/testbed/rock-floor.rgb b/panda/src/testbed/rock-floor.rgb index 823b5fd381..35389db19d 100644 Binary files a/panda/src/testbed/rock-floor.rgb and b/panda/src/testbed/rock-floor.rgb differ