diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 7c200c2353..d0d69cfda3 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -10055,11 +10055,31 @@ do_write_datagram_rawdata(CData *cdata, BamWriter *manager, Datagram &me) { me.add_uint8(cdata->_component_type); me.add_uint8(cdata->_component_width); me.add_uint8(cdata->_ram_image_compression); - me.add_uint8(cdata->_ram_images.size()); - for (size_t n = 0; n < cdata->_ram_images.size(); ++n) { - me.add_uint32(cdata->_ram_images[n]._page_size); - me.add_uint32(cdata->_ram_images[n]._image.size()); - me.append_data(cdata->_ram_images[n]._image, cdata->_ram_images[n]._image.size()); + + if (cdata->_ram_images.empty() && cdata->_has_clear_color && + manager->get_file_minor_ver() < 45) { + // For older .bam versions that don't support clear colors, make up a RAM + // image. + int image_size = do_get_expected_ram_image_size(cdata); + me.add_uint8(1); + me.add_uint32(do_get_expected_ram_page_size(cdata)); + me.add_uint32(image_size); + + // Fill the image with the clear color. + unsigned char pixel[16]; + const int pixel_size = do_get_clear_data(cdata, pixel); + nassertv(pixel_size > 0); + + for (int i = 0; i < image_size; i += pixel_size) { + me.append_data(pixel, pixel_size); + } + } else { + me.add_uint8(cdata->_ram_images.size()); + for (size_t n = 0; n < cdata->_ram_images.size(); ++n) { + me.add_uint32(cdata->_ram_images[n]._page_size); + me.add_uint32(cdata->_ram_images[n]._image.size()); + me.append_data(cdata->_ram_images[n]._image, cdata->_ram_images[n]._image.size()); + } } }