From 741203a6935641140dd9355b0f4ad95277fcd7cd Mon Sep 17 00:00:00 2001 From: David Rose Date: Fri, 6 Dec 2013 20:53:40 +0000 Subject: [PATCH] some minor debug aids and robustness additions --- panda/src/glstuff/glGraphicsBuffer_src.cxx | 7 +- .../glstuff/glGraphicsStateGuardian_src.cxx | 11 +- panda/src/gobj/texture.I | 68 ++++++++--- panda/src/gobj/texture.cxx | 112 +++++++++--------- panda/src/gobj/texture.h | 3 + panda/src/gobj/textureContext.I | 36 ++++++ panda/src/gobj/textureContext.h | 4 + panda/src/putil/updateSeq.I | 11 ++ panda/src/putil/updateSeq.h | 2 + 9 files changed, 172 insertions(+), 82 deletions(-) diff --git a/panda/src/glstuff/glGraphicsBuffer_src.cxx b/panda/src/glstuff/glGraphicsBuffer_src.cxx index 15fdd5cba7..0811e0bf12 100644 --- a/panda/src/glstuff/glGraphicsBuffer_src.cxx +++ b/panda/src/glstuff/glGraphicsBuffer_src.cxx @@ -1156,8 +1156,11 @@ select_tex_view(int view) { CLP(TextureContext) *gtc = DCAST(CLP(TextureContext), tc); glgsg->update_texture(tc, true); - GLCAT.spam() << "Binding texture " << *tex - << " view " << view << " to color attachment.\n"; + if (GLCAT.is_spam()) { + GLCAT.spam() + << "Binding texture " << *tex + << " view " << view << " to color attachment.\n"; + } #ifndef OPENGLES GLclampf priority = 1.0f; diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index 7fdb6f675b..883c458b6d 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -3543,12 +3543,6 @@ update_texture(TextureContext *tc, bool force) { CLP(TextureContext) *gtc = DCAST(CLP(TextureContext), tc); - if (GLCAT.is_debug() && gtc->get_texture()->get_name() != string("buf")) { - GLCAT.debug() - << "Considering update " << gtc->get_texture()->get_name() - << ": " << gtc->was_image_modified() << ", modified = " << gtc->get_texture()->get_image_modified() << "\n"; - } - if (gtc->was_image_modified()) { // If the texture image was modified, reload the texture. This // means we also re-specify the properties for good measure. @@ -9040,7 +9034,7 @@ upload_texture(CLP(TextureContext) *gtc, bool force) { // in the case of cube mapping, in which case // texture_target will be target for the overall // texture, e.g. GL_TEXTURE_CUBE_MAP, and page_target -// will the target for this particular page, +// will be the target for this particular page, // e.g. GL_TEXTURE_CUBE_MAP_POSITIVE_X. //////////////////////////////////////////////////////////////////// bool CLP(GraphicsStateGuardian):: @@ -9082,6 +9076,8 @@ upload_texture_image(CLP(TextureContext) *gtc, GLCAT.debug() << "loading uncompressed texture " << tex->get_name() << "\n"; } + GLCAT.debug() + << "page_target " << hex << page_target << dec << "\n"; } int num_ram_mipmap_levels = 0; @@ -9104,6 +9100,7 @@ upload_texture_image(CLP(TextureContext) *gtc, uses_mipmaps = false; } } + } else { num_ram_mipmap_levels = 1; if (uses_mipmaps) { diff --git a/panda/src/gobj/texture.I b/panda/src/gobj/texture.I index 810c652f3b..af06f05e08 100644 --- a/panda/src/gobj/texture.I +++ b/panda/src/gobj/texture.I @@ -31,9 +31,9 @@ INLINE PT(Texture) Texture:: make_copy() const { PT(Texture) tex = make_copy_impl(); CDWriter cdata_tex(tex->_cycler, true); - ++(cdata_tex->_properties_modified); - ++(cdata_tex->_image_modified); - ++(cdata_tex->_simple_image_modified); + cdata_tex->inc_properties_modified(); + cdata_tex->inc_image_modified(); + cdata_tex->inc_simple_image_modified(); return tex; } @@ -288,8 +288,8 @@ INLINE bool Texture:: load(const PNMImage &pnmimage, const LoaderOptions &options) { CDWriter cdata(_cycler, true); do_clear(cdata); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); if (do_load_one(cdata, pnmimage, get_name(), 0, 0, options)) { bool generate_mipmaps = ((options.get_texture_flags() & LoaderOptions::TF_generate_mipmaps) != 0); consider_auto_process_ram_image(generate_mipmaps || uses_mipmaps(), true); @@ -307,8 +307,8 @@ load(const PNMImage &pnmimage, const LoaderOptions &options) { INLINE bool Texture:: load(const PNMImage &pnmimage, int z, int n, const LoaderOptions &options) { CDWriter cdata(_cycler, true); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); if (do_load_one(cdata, pnmimage, get_name(), z, n, options)) { return true; } @@ -324,8 +324,8 @@ INLINE bool Texture:: load(const PfmFile &pfm, const LoaderOptions &options) { CDWriter cdata(_cycler, true); do_clear(cdata); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); if (do_load_one(cdata, pfm, get_name(), 0, 0, options)) { bool generate_mipmaps = ((options.get_texture_flags() & LoaderOptions::TF_generate_mipmaps) != 0); consider_auto_process_ram_image(generate_mipmaps || uses_mipmaps(), true); @@ -343,8 +343,8 @@ load(const PfmFile &pfm, const LoaderOptions &options) { INLINE bool Texture:: load(const PfmFile &pfm, int z, int n, const LoaderOptions &options) { CDWriter cdata(_cycler, true); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); if (do_load_one(cdata, pfm, get_name(), z, n, options)) { return true; } @@ -1412,7 +1412,7 @@ get_ram_image_compression() const { INLINE PTA_uchar Texture:: modify_ram_image() { CDWriter cdata(_cycler, true); - ++(cdata->_image_modified); + cdata->inc_image_modified(); return do_modify_ram_image(cdata); } @@ -1453,7 +1453,7 @@ get_uncompressed_ram_image() { INLINE PTA_uchar Texture:: make_ram_image() { CDWriter cdata(_cycler, true); - ++(cdata->_image_modified); + cdata->inc_image_modified(); return do_make_ram_image(cdata); } @@ -1537,7 +1537,7 @@ compress_ram_image(Texture::CompressionMode compression, GraphicsStateGuardianBase *gsg) { CDWriter cdata(_cycler, false); if (do_compress_ram_image(cdata, compression, quality_level, gsg)) { - ++(cdata->_image_modified); + cdata->inc_image_modified(); return true; } return false; @@ -1558,7 +1558,7 @@ INLINE bool Texture:: uncompress_ram_image() { CDWriter cdata(_cycler, false); if (do_uncompress_ram_image(cdata)) { - ++(cdata->_image_modified); + cdata->inc_image_modified(); return true; } return false; @@ -1723,7 +1723,7 @@ get_expected_ram_mipmap_page_size(int n) const { INLINE PTA_uchar Texture:: modify_ram_mipmap_image(int n) { CDWriter cdata(_cycler, false); - ++(cdata->_image_modified); + cdata->inc_image_modified(); return do_modify_ram_mipmap_image(cdata, n); } @@ -1739,7 +1739,7 @@ modify_ram_mipmap_image(int n) { INLINE PTA_uchar Texture:: make_ram_mipmap_image(int n) { CDWriter cdata(_cycler, false); - ++(cdata->_image_modified); + cdata->inc_image_modified(); return do_make_ram_mipmap_image(cdata, n); } @@ -1769,7 +1769,7 @@ set_ram_mipmap_image(int n, CPTA_uchar image, size_t page_size) { INLINE void Texture:: clear_ram_mipmap_images() { CDWriter cdata(_cycler, false); - ++(cdata->_image_modified); + cdata->inc_image_modified(); do_clear_ram_mipmap_images(cdata); } @@ -1790,7 +1790,7 @@ clear_ram_mipmap_images() { INLINE void Texture:: generate_ram_mipmap_images() { CDWriter cdata(_cycler, unlocked_ensure_ram_image(false)); - ++(cdata->_image_modified); + cdata->inc_image_modified(); do_generate_ram_mipmap_images(cdata); } @@ -2627,6 +2627,36 @@ is_dds_filename(const Filename &fullpath) { return (downcase(extension) == "dds"); } +//////////////////////////////////////////////////////////////////// +// Function: Texture::CData::inc_properties_modified +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE void Texture::CData:: +inc_properties_modified() { + ++_properties_modified; +} + +//////////////////////////////////////////////////////////////////// +// Function: Texture::CData::inc_image_modified +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE void Texture::CData:: +inc_image_modified() { + ++_image_modified; +} + +//////////////////////////////////////////////////////////////////// +// Function: Texture::CData::inc_simple_image_modified +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE void Texture::CData:: +inc_simple_image_modified() { + ++_simple_image_modified; +} + //////////////////////////////////////////////////////////////////// // Function: Texture::RamImage::Constructor // Access: Public diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 3cd11090e1..b4b96217f9 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -238,8 +238,8 @@ generate_normalization_cube_map(int size) { PTA_uchar image = do_make_ram_image(cdata); cdata->_keep_ram_image = true; - ++(cdata->_image_modified); - ++(cdata->_properties_modified); + cdata->inc_image_modified(); + cdata->inc_properties_modified(); PN_stdfloat half_size = (PN_stdfloat)size * 0.5f; PN_stdfloat center = half_size - 0.5f; @@ -345,8 +345,8 @@ generate_alpha_scale_map() { cdata->_magfilter = FT_nearest; cdata->_compression = CM_off; - ++(cdata->_image_modified); - ++(cdata->_properties_modified); + cdata->inc_image_modified(); + cdata->inc_properties_modified(); PTA_uchar image = do_make_ram_image(cdata); cdata->_keep_ram_image = true; @@ -366,8 +366,8 @@ bool Texture:: read(const Filename &fullpath, const LoaderOptions &options) { CDWriter cdata(_cycler, true); do_clear(cdata); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); return do_read(cdata, fullpath, Filename(), 0, 0, 0, 0, false, false, options, NULL); } @@ -389,8 +389,8 @@ read(const Filename &fullpath, const Filename &alpha_fullpath, const LoaderOptions &options) { CDWriter cdata(_cycler, true); do_clear(cdata); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); return do_read(cdata, fullpath, alpha_fullpath, primary_file_num_channels, alpha_file_channel, 0, 0, false, false, options, NULL); @@ -411,8 +411,8 @@ read(const Filename &fullpath, int z, int n, bool read_pages, bool read_mipmaps, const LoaderOptions &options) { CDWriter cdata(_cycler, true); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); return do_read(cdata, fullpath, Filename(), 0, 0, z, n, read_pages, read_mipmaps, options, NULL); } @@ -493,8 +493,8 @@ read(const Filename &fullpath, const Filename &alpha_fullpath, BamCacheRecord *record, const LoaderOptions &options) { CDWriter cdata(_cycler, true); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); return do_read(cdata, fullpath, alpha_fullpath, primary_file_num_channels, alpha_file_channel, z, n, read_pages, read_mipmaps, options, record); @@ -652,8 +652,8 @@ get_aux_data(const string &key) const { bool Texture:: read_txo(istream &in, const string &filename) { CDWriter cdata(_cycler, true); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); return do_read_txo(cdata, in, filename); } @@ -760,8 +760,8 @@ write_txo(ostream &out, const string &filename) const { bool Texture:: read_dds(istream &in, const string &filename, bool header_only) { CDWriter cdata(_cycler, true); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); return do_read_dds(cdata, in, filename, header_only); } @@ -1122,7 +1122,7 @@ set_ram_mipmap_pointer(int n, void *image, size_t page_size) { cdata->_ram_images[n]._page_size = page_size; //_ram_images[n]._image.clear(); wtf is going on?! cdata->_ram_images[n]._pointer_image = image; - ++(cdata->_image_modified); + cdata->inc_image_modified(); } //////////////////////////////////////////////////////////////////// @@ -1189,7 +1189,7 @@ new_simple_ram_image(int x_size, int y_size) { cdata->_simple_ram_image._image = PTA_uchar::empty_array(expected_page_size); cdata->_simple_ram_image._page_size = expected_page_size; cdata->_simple_image_date_generated = (PN_int32)time(NULL); - ++(cdata->_simple_image_modified); + cdata->inc_simple_image_modified(); return cdata->_simple_ram_image._image; } @@ -4127,8 +4127,8 @@ unlocked_ensure_ram_image(bool allow_compression) { cdataw->_format = cdata_tex->_format; cdataw->_component_type = cdata_tex->_component_type; - ++(cdataw->_properties_modified); - ++(cdataw->_image_modified); + cdataw->inc_properties_modified(); + cdataw->inc_image_modified(); } cdataw->_keep_ram_image = cdata_tex->_keep_ram_image; @@ -4343,7 +4343,7 @@ do_set_ram_image(CData *cdata, CPTA_uchar image, Texture::CompressionMode compre cdata->_ram_images[0]._page_size = page_size; cdata->_ram_images[0]._pointer_image = NULL; cdata->_ram_image_compression = compression; - ++(cdata->_image_modified); + cdata->inc_image_modified(); } } @@ -4404,7 +4404,7 @@ do_set_ram_mipmap_image(CData *cdata, int n, CPTA_uchar image, size_t page_size) cdata->_ram_images[n]._image = image.cast_non_const(); cdata->_ram_images[n]._pointer_image = NULL; cdata->_ram_images[n]._page_size = page_size; - ++(cdata->_image_modified); + cdata->inc_image_modified(); } } @@ -4839,7 +4839,7 @@ do_rescale_texture(CData *cdata) { new_image.quick_filter_from(orig_image); do_clear_ram_image(cdata); - ++(cdata->_image_modified); + cdata->inc_image_modified(); cdata->_x_size = new_x_size; cdata->_y_size = new_y_size; if (!do_load_one(cdata, new_image, get_name(), 0, 0, LoaderOptions())) { @@ -4871,7 +4871,7 @@ do_rescale_texture(CData *cdata) { do_clear_ram_image(cdata); cdata->_loaded_from_image = false; - ++(cdata->_image_modified); + cdata->inc_image_modified(); if (!do_load_one(cdata, new_image, get_name(), 0, 0, LoaderOptions())) { return false; } @@ -4933,9 +4933,9 @@ do_clear(CData *cdata) { CDReader cdata_tex(tex._cycler); do_assign(cdata, &tex, cdata_tex); - ++(cdata->_properties_modified); - ++(cdata->_image_modified); - ++(cdata->_simple_image_modified); + cdata->inc_properties_modified(); + cdata->inc_image_modified(); + cdata->inc_simple_image_modified(); } //////////////////////////////////////////////////////////////////// @@ -5008,7 +5008,7 @@ do_set_format(CData *cdata, Texture::Format format) { return; } cdata->_format = format; - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); switch (cdata->_format) { case F_color_index: @@ -5091,7 +5091,7 @@ void Texture:: do_set_x_size(CData *cdata, int x_size) { if (cdata->_x_size != x_size) { cdata->_x_size = x_size; - ++(cdata->_image_modified); + cdata->inc_image_modified(); do_clear_ram_image(cdata); do_set_pad_size(cdata, 0, 0, 0); } @@ -5107,7 +5107,7 @@ do_set_y_size(CData *cdata, int y_size) { if (cdata->_y_size != y_size) { nassertv(cdata->_texture_type != Texture::TT_1d_texture || y_size == 1); cdata->_y_size = y_size; - ++(cdata->_image_modified); + cdata->inc_image_modified(); do_clear_ram_image(cdata); do_set_pad_size(cdata, 0, 0, 0); } @@ -5127,7 +5127,7 @@ do_set_z_size(CData *cdata, int z_size) { (cdata->_texture_type == Texture::TT_cube_map && z_size == 6) || (cdata->_texture_type == Texture::TT_2d_texture_array) || (z_size == 1)); cdata->_z_size = z_size; - ++(cdata->_image_modified); + cdata->inc_image_modified(); do_clear_ram_image(cdata); do_set_pad_size(cdata, 0, 0, 0); } @@ -5143,8 +5143,10 @@ do_set_num_views(CData *cdata, int num_views) { nassertv(num_views >= 1); if (cdata->_num_views != num_views) { cdata->_num_views = num_views; - ++(cdata->_image_modified); - do_clear_ram_image(cdata); + if (do_has_ram_image(cdata)) { + cdata->inc_image_modified(); + do_clear_ram_image(cdata); + } do_set_pad_size(cdata, 0, 0, 0); } } @@ -5157,7 +5159,7 @@ do_set_num_views(CData *cdata, int num_views) { void Texture:: do_set_wrap_u(CData *cdata, Texture::WrapMode wrap) { if (cdata->_wrap_u != wrap) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_wrap_u = wrap; } } @@ -5170,7 +5172,7 @@ do_set_wrap_u(CData *cdata, Texture::WrapMode wrap) { void Texture:: do_set_wrap_v(CData *cdata, Texture::WrapMode wrap) { if (cdata->_wrap_v != wrap) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_wrap_v = wrap; } } @@ -5183,7 +5185,7 @@ do_set_wrap_v(CData *cdata, Texture::WrapMode wrap) { void Texture:: do_set_wrap_w(CData *cdata, Texture::WrapMode wrap) { if (cdata->_wrap_w != wrap) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_wrap_w = wrap; } } @@ -5196,7 +5198,7 @@ do_set_wrap_w(CData *cdata, Texture::WrapMode wrap) { void Texture:: do_set_minfilter(CData *cdata, Texture::FilterType filter) { if (cdata->_minfilter != filter) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_minfilter = filter; } } @@ -5209,7 +5211,7 @@ do_set_minfilter(CData *cdata, Texture::FilterType filter) { void Texture:: do_set_magfilter(CData *cdata, Texture::FilterType filter) { if (cdata->_magfilter != filter) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_magfilter = filter; } } @@ -5222,7 +5224,7 @@ do_set_magfilter(CData *cdata, Texture::FilterType filter) { void Texture:: do_set_anisotropic_degree(CData *cdata, int anisotropic_degree) { if (cdata->_anisotropic_degree != anisotropic_degree) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_anisotropic_degree = anisotropic_degree; } } @@ -5235,7 +5237,7 @@ do_set_anisotropic_degree(CData *cdata, int anisotropic_degree) { void Texture:: do_set_border_color(CData *cdata, const LColor &color) { if (cdata->_border_color != color) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_border_color = color; } } @@ -5248,7 +5250,7 @@ do_set_border_color(CData *cdata, const LColor &color) { void Texture:: do_set_compression(CData *cdata, Texture::CompressionMode compression) { if (cdata->_compression != compression) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_compression = compression; if (do_has_ram_image(cdata)) { @@ -5273,7 +5275,7 @@ do_set_compression(CData *cdata, Texture::CompressionMode compression) { void Texture:: do_set_quality_level(CData *cdata, Texture::QualityLevel quality_level) { if (cdata->_quality_level != quality_level) { - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_quality_level = quality_level; } } @@ -5325,12 +5327,14 @@ do_get_ram_image(CData *cdata) { if (!do_has_ram_image(cdata) && do_can_reload(cdata)) { do_reload_ram_image(cdata, true); - // Normally, we don't update the cdata->_modified semaphores in a do_blah - // method, but we'll make an exception in this case, because it's - // easiest to modify these here, and only when we know it's - // needed. - ++(cdata->_image_modified); - ++(cdata->_properties_modified); + if (do_has_ram_image(cdata)) { + // Normally, we don't update the cdata->_modified semaphores in a do_blah + // method, but we'll make an exception in this case, because it's + // easiest to modify these here, and only when we know it's + // needed. + cdata->inc_image_modified(); + cdata->inc_properties_modified(); + } } if (cdata->_ram_images.empty()) { @@ -5539,7 +5543,7 @@ do_set_simple_ram_image(CData *cdata, CPTA_uchar image, int x_size, int y_size) cdata->_simple_ram_image._image = image.cast_non_const(); cdata->_simple_ram_image._page_size = image.size(); cdata->_simple_image_date_generated = (PN_int32)time(NULL); - ++(cdata->_simple_image_modified); + cdata->inc_simple_image_modified(); } //////////////////////////////////////////////////////////////////// @@ -5644,7 +5648,7 @@ do_clear_simple_ram_image(CData *cdata) { // We allow this exception: we update the _simple_image_modified // here, since no one really cares much about that anyway, and it's // convenient to do it here. - ++(cdata->_simple_image_modified); + cdata->inc_simple_image_modified(); } //////////////////////////////////////////////////////////////////// @@ -5804,7 +5808,7 @@ do_reload(CData *cdata) { do_reload_ram_image(cdata, true); if (do_has_ram_image(cdata)) { // An explicit call to reload() should increment image_modified. - ++(cdata->_image_modified); + cdata->inc_image_modified(); return true; } return false; @@ -7769,7 +7773,7 @@ do_fillin_body(CData *cdata, DatagramIterator &scan, BamReader *manager) { cdata->_format = (Format)scan.get_uint8(); cdata->_num_components = scan.get_uint8(); - ++(cdata->_properties_modified); + cdata->inc_properties_modified(); cdata->_auto_texture_scale = ATS_unspecified; if (manager->get_file_minor_ver() >= 28) { @@ -7797,7 +7801,7 @@ do_fillin_body(CData *cdata, DatagramIterator &scan, BamReader *manager) { cdata->_simple_ram_image._image = image; cdata->_simple_ram_image._page_size = u_size; - ++(cdata->_simple_image_modified); + cdata->inc_simple_image_modified(); } } @@ -7856,7 +7860,7 @@ do_fillin_rawdata(CData *cdata, DatagramIterator &scan, BamReader *manager) { cdata->_ram_images[n]._image = image; } cdata->_loaded_from_image = true; - ++(cdata->_image_modified); + cdata->inc_image_modified(); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/gobj/texture.h b/panda/src/gobj/texture.h index 73307e02da..638bbc4120 100644 --- a/panda/src/gobj/texture.h +++ b/panda/src/gobj/texture.h @@ -776,6 +776,9 @@ protected: } void do_assign(const CData *copy); + INLINE void inc_properties_modified(); + INLINE void inc_image_modified(); + INLINE void inc_simple_image_modified(); Filename _filename; Filename _alpha_filename; diff --git a/panda/src/gobj/textureContext.I b/panda/src/gobj/textureContext.I index a0202f6245..d3a857a9f6 100644 --- a/panda/src/gobj/textureContext.I +++ b/panda/src/gobj/textureContext.I @@ -98,6 +98,42 @@ was_simple_image_modified() const { return _simple_image_modified != _texture->get_simple_image_modified(); } +//////////////////////////////////////////////////////////////////// +// Function: TextureContext::get_properties_modified +// Access: Published +// Description: Returns a sequence number which is guaranteed to +// change at least every time the texture properties +// (unrelated to the image) are modified. +//////////////////////////////////////////////////////////////////// +INLINE UpdateSeq TextureContext:: +get_properties_modified() const { + return _properties_modified; +} + +//////////////////////////////////////////////////////////////////// +// Function: TextureContext::get_image_modified +// Access: Published +// Description: Returns a sequence number which is guaranteed to +// change at least every time the texture image data +// (including mipmap levels) are modified. +//////////////////////////////////////////////////////////////////// +INLINE UpdateSeq TextureContext:: +get_image_modified() const { + return _image_modified; +} + +//////////////////////////////////////////////////////////////////// +// Function: TextureContext::get_simple_image_modified +// Access: Published +// Description: Returns a sequence number which is guaranteed to +// change at least every time the texture's "simple" +// image data is modified. +//////////////////////////////////////////////////////////////////// +INLINE UpdateSeq TextureContext:: +get_simple_image_modified() const { + return _simple_image_modified; +} + //////////////////////////////////////////////////////////////////// // Function: TextureContext::update_data_size_bytes // Access: Public diff --git a/panda/src/gobj/textureContext.h b/panda/src/gobj/textureContext.h index 4bbb1d0cc9..660edeff3e 100644 --- a/panda/src/gobj/textureContext.h +++ b/panda/src/gobj/textureContext.h @@ -48,6 +48,10 @@ PUBLISHED: INLINE bool was_image_modified() const; INLINE bool was_simple_image_modified() const; + INLINE UpdateSeq get_properties_modified() const; + INLINE UpdateSeq get_image_modified() const; + INLINE UpdateSeq get_simple_image_modified() const; + public: INLINE void update_data_size_bytes(size_t new_data_size_bytes); INLINE void mark_loaded(); diff --git a/panda/src/putil/updateSeq.I b/panda/src/putil/updateSeq.I index ea5bbdd1b8..a47b2fccfc 100644 --- a/panda/src/putil/updateSeq.I +++ b/panda/src/putil/updateSeq.I @@ -264,6 +264,17 @@ operator ++ (int) { return temp; } +//////////////////////////////////////////////////////////////////// +// Function: UpdateSeq::get_seq +// Access: Published +// Description: Returns the internal integer value associated with +// the UpdateSeq. Useful for debugging only. +//////////////////////////////////////////////////////////////////// +INLINE AtomicAdjust::Integer UpdateSeq:: +get_seq() const { + return _seq; +} + //////////////////////////////////////////////////////////////////// // Function: UpdateSeq::output // Access: Published diff --git a/panda/src/putil/updateSeq.h b/panda/src/putil/updateSeq.h index 6fdee69da9..b6a55adf25 100644 --- a/panda/src/putil/updateSeq.h +++ b/panda/src/putil/updateSeq.h @@ -67,6 +67,8 @@ PUBLISHED: INLINE UpdateSeq operator ++ (); INLINE UpdateSeq operator ++ (int); + INLINE AtomicAdjust::Integer get_seq() const; + INLINE void output(ostream &out) const; private: