diff --git a/panda/src/gobj/config_gobj.cxx b/panda/src/gobj/config_gobj.cxx index aa5e5f3cdd..245108a85e 100644 --- a/panda/src/gobj/config_gobj.cxx +++ b/panda/src/gobj/config_gobj.cxx @@ -63,6 +63,12 @@ bool textures_down_square = false; BamTextureMode bam_texture_mode; +// Set this to enable a speedy-load mode where you don't care what the +// world looks like, you just want it to load in minimal time. This +// causes all texture loads via the TexturePool to load the same +// texture file, which will presumably only be loaded once. +const string fake_texture_image = config_gobj.GetString("fake-texture-image", ""); + static BamTextureMode parse_texture_mode(const string &mode) { @@ -93,7 +99,7 @@ ConfigureFn(config_gobj) { } else { textures_up_power_2 = false; - textures_down_power_2 = config_gobj.GetBool("textures-power-2", false); + textures_down_power_2 = config_gobj.GetBool("textures-power-2", true); } string textures_square = config_gobj.GetString("textures-square", ""); diff --git a/panda/src/gobj/config_gobj.h b/panda/src/gobj/config_gobj.h index 96f45ce52f..bedf395c9d 100644 --- a/panda/src/gobj/config_gobj.h +++ b/panda/src/gobj/config_gobj.h @@ -24,6 +24,7 @@ enum BamTextureMode { BTM_basename }; extern EXPCL_PANDA BamTextureMode bam_texture_mode; +extern EXPCL_PANDA const string fake_texture_image; #endif diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 70398b5c38..8daeda3538 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -435,6 +435,7 @@ write_datagram(BamWriter *manager, Datagram &me) me.add_bool(has_pbuffer); if (has_pbuffer) { me.add_uint8(_pbuffer->get_format()); + me.add_uint8(_pbuffer->get_num_components()); } } @@ -469,8 +470,17 @@ fillin(DatagramIterator &scan, BamReader *manager) { bool has_pbuffer = scan.get_bool(); if (has_pbuffer) { PixelBuffer::Format format = (PixelBuffer::Format)scan.get_uint8(); + int num_components = -1; + if (scan.get_remaining_size() > 0) { + num_components = scan.get_uint8(); + } + if (_pbuffer != (PixelBuffer *)NULL) { - _pbuffer->set_format(format); + if (num_components == _pbuffer->get_num_components()) { + // Only reset the format if the number of components hasn't + // changed. + _pbuffer->set_format(format); + } } } } diff --git a/panda/src/gobj/texturePool.cxx b/panda/src/gobj/texturePool.cxx index 4068ef2854..431f70aaeb 100644 --- a/panda/src/gobj/texturePool.cxx +++ b/panda/src/gobj/texturePool.cxx @@ -18,6 +18,10 @@ TexturePool *TexturePool::_global_ptr = (TexturePool *)NULL; //////////////////////////////////////////////////////////////////// bool TexturePool:: ns_has_texture(Filename filename) { + if (!fake_texture_image.empty()) { + filename = fake_texture_image; + } + filename.resolve_filename(get_texture_path()); filename.resolve_filename(get_model_path()); @@ -38,6 +42,10 @@ ns_has_texture(Filename filename) { //////////////////////////////////////////////////////////////////// Texture *TexturePool:: ns_load_texture(Filename filename) { + if (!fake_texture_image.empty()) { + filename = fake_texture_image; + } + filename.resolve_filename(get_texture_path()); filename.resolve_filename(get_model_path()); @@ -68,6 +76,10 @@ ns_load_texture(Filename filename) { //////////////////////////////////////////////////////////////////// Texture *TexturePool:: ns_load_texture(Filename filename, Filename grayfilename) { + if (!fake_texture_image.empty()) { + return ns_load_texture(fake_texture_image); + } + filename.resolve_filename(get_texture_path()); filename.resolve_filename(get_model_path());