Browse Source

don't lose alpha format when bouncing through texture cache

David Rose 14 years ago
parent
commit
1ead653ce5
1 changed files with 14 additions and 3 deletions
  1. 14 3
      panda/src/gobj/texture.cxx

+ 14 - 3
panda/src/gobj/texture.cxx

@@ -3945,8 +3945,10 @@ do_reload_ram_image(CData *cdata, bool allow_compression) {
           CDReader cdata_tex(tex->_cycler);
           CDReader cdata_tex(tex->_cycler);
           cdata->_x_size = cdata_tex->_x_size;
           cdata->_x_size = cdata_tex->_x_size;
           cdata->_y_size = cdata_tex->_y_size;
           cdata->_y_size = cdata_tex->_y_size;
-          cdata->_num_components = cdata_tex->_num_components;
-          cdata->_format = cdata_tex->_format;
+          if (cdata->_num_components != cdata_tex->_num_components) {
+            cdata->_num_components = cdata_tex->_num_components;
+            cdata->_format = cdata_tex->_format;
+          }
           cdata->_component_type = cdata_tex->_component_type;
           cdata->_component_type = cdata_tex->_component_type;
           cdata->_compression = cdata_tex->_compression;
           cdata->_compression = cdata_tex->_compression;
           cdata->_ram_image_compression = cdata_tex->_ram_image_compression;
           cdata->_ram_image_compression = cdata_tex->_ram_image_compression;
@@ -4975,8 +4977,17 @@ do_set_compression(CData *cdata, Texture::CompressionMode compression) {
   if (cdata->_compression != compression) {
   if (cdata->_compression != compression) {
     ++(cdata->_properties_modified);
     ++(cdata->_properties_modified);
     cdata->_compression = compression;
     cdata->_compression = compression;
+
     if (do_has_ram_image(cdata)) {
     if (do_has_ram_image(cdata)) {
-      do_reload(cdata);
+      bool has_compression = do_has_compression(cdata);
+      bool has_ram_image_compression = (cdata->_ram_image_compression != CM_off);
+      if (has_compression != has_ram_image_compression ||
+          has_compression) {
+        // Reload if we're turning compression on or off, or if we're
+        // changing the compression mode to a different kind of
+        // compression.
+        do_reload(cdata);
+      }
     }
     }
   }
   }
 }
 }