mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 18:03:56 -04:00
improve rescale_texture() and consider_rescale() when loading texture from in-memory PNMImage
This commit is contained in:
parent
aee35023f0
commit
78e72288ad
@ -1878,9 +1878,12 @@ down_to_power_2(int value) {
|
||||
// the image, according to the whims of the Config.prc
|
||||
// file.
|
||||
//
|
||||
// This method should be called after
|
||||
// pnmimage.read_header() has been called, but before
|
||||
// pnmimage.read(). Also see rescale_texture().
|
||||
// For most efficient results, this method should be
|
||||
// called after pnmimage.read_header() has been called,
|
||||
// but before pnmimage.read(). This method may also be
|
||||
// called after pnmimage.read(), i.e. when the pnmimage
|
||||
// is already loaded; in this case it will rescale the
|
||||
// image on the spot. Also see rescale_texture().
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void Texture::
|
||||
consider_rescale(PNMImage &pnmimage) {
|
||||
@ -1894,16 +1897,29 @@ consider_rescale(PNMImage &pnmimage) {
|
||||
// the image, according to the whims of the Config.prc
|
||||
// file.
|
||||
//
|
||||
// This method should be called after
|
||||
// pnmimage.read_header() has been called, but before
|
||||
// pnmimage.read(). Also see rescale_texture().
|
||||
// For most efficient results, this method should be
|
||||
// called after pnmimage.read_header() has been called,
|
||||
// but before pnmimage.read(). This method may also be
|
||||
// called after pnmimage.read(), i.e. when the pnmimage
|
||||
// is already loaded; in this case it will rescale the
|
||||
// image on the spot. Also see rescale_texture().
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void Texture::
|
||||
consider_rescale(PNMImage &pnmimage, const string &name, AutoTextureScale auto_texture_scale) {
|
||||
int new_x_size = pnmimage.get_x_size();
|
||||
int new_y_size = pnmimage.get_y_size();
|
||||
if (adjust_size(new_x_size, new_y_size, name, false, auto_texture_scale)) {
|
||||
pnmimage.set_read_size(new_x_size, new_y_size);
|
||||
if (pnmimage.is_valid()) {
|
||||
// The image is already loaded. Rescale on the spot.
|
||||
PNMImage new_image(new_x_size, new_y_size, pnmimage.get_num_channels(),
|
||||
pnmimage.get_maxval());
|
||||
new_image.quick_filter_from(pnmimage);
|
||||
pnmimage.take_from(new_image);
|
||||
} else {
|
||||
// Rescale while reading. Some image types (e.g. jpeg) can take
|
||||
// advantage of this.
|
||||
pnmimage.set_read_size(new_x_size, new_y_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4579,6 +4595,8 @@ do_rescale_texture(CData *cdata) {
|
||||
|
||||
do_clear_ram_image(cdata);
|
||||
++(cdata->_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())) {
|
||||
return false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user