Panda3D
|
This corresponds to a particular assignment of a TextureImage with a PaletteGroup, and specifically describes which PaletteImage (if any), and where on the PaletteImage, the TextureImage has been assigned to. More...
#include "texturePlacement.h"
Public Types | |
typedef pvector< TextureImage * > | TextureSwaps |
Public Member Functions | |
TexturePlacement (TextureImage *texture, PaletteGroup *group) | |
void | add_egg (TextureReference *reference) |
Records the fact that a particular egg file is using this particular TexturePlacement. | |
virtual int | complete_pointers (TypedWritable **p_list, BamReader *manager) |
Called after the object is otherwise completely read from a Bam file, this function's job is to store the pointers that were retrieved from the Bam file for each pointer object written. | |
void | compute_tex_matrix (LMatrix3d &transform) |
Stores in the indicated matrix the appropriate texture matrix transform for the new placement of the texture. | |
bool | determine_size () |
Attempts to determine the appropriate size of the texture for the given placement. | |
void | fill_image (PNMImage &image) |
Fills in the rectangle of the palette image represented by the texture placement with the image pixels. | |
void | fill_swapped_image (PNMImage &image, int index) |
Fills in the rectangle of the swapped palette image represented by the texture placement with the image pixels. | |
void | flag_error_image (PNMImage &image) |
Sets the rectangle of the palette image represented by the texture placement to red, to represent a missing texture. | |
void | force_replace () |
Removes the texture from its particular PaletteImage, but does not remove it from the PaletteGroup. | |
DestTextureImage * | get_dest () const |
Returns the DestTextureImage that corresponds to this texture as it was copied to the install directory. | |
PaletteGroup * | get_group () const |
Returns the group that this placement represents. | |
PaletteImage * | get_image () const |
Returns the particular PaletteImage on which the texture has been placed. | |
const std::string & | get_name () const |
Returns the name of the texture that this placement represents. | |
OmitReason | get_omit_reason () const |
Returns the reason the texture has been omitted from a palette image, or OR_none if it has not. | |
PalettePage * | get_page () const |
Returns the particular PalettePage on which the texture has been placed. | |
double | get_placed_uv_area () const |
Returns the total area of the rectangle occupied by the UV minmax box, as it has been placed. | |
int | get_placed_x () const |
Returns the X pixel at which the texture has been placed within its PaletteImage. | |
int | get_placed_x_size () const |
Returns the size in the X dimension, in pixels, of the texture image as it has been placed within the palette. | |
int | get_placed_y () const |
Returns the Y pixel at which the texture has been placed within its PaletteImage. | |
int | get_placed_y_size () const |
Returns the size in the Y dimension, in pixels, of the texture image as it has been placed within the palette. | |
const TextureProperties & | get_properties () const |
Returns the grouping properties of the image. | |
TextureImage * | get_texture () const |
Returns the texture that this placement represents. | |
virtual TypeHandle | get_type () const |
double | get_uv_area () const |
Returns the total area of the rectangle occupied by the UV minmax box, in UV coordinates. | |
int | get_x_size () const |
Returns the size in the X dimension, in pixels, of the texture image as it must appear in the palette. | |
int | get_y_size () const |
Returns the size in the Y dimension, in pixels, of the texture image as it must appear in the palette. | |
bool | intersects (int x, int y, int x_size, int y_size) |
Returns true if the particular position this texture has been assigned to overlaps the rectangle whose top left corner is at x, y and whose size is given by x_size, y_size, or false otherwise. | |
bool | is_filled () const |
Returns true if the texture has been filled (i.e. | |
bool | is_placed () const |
Returns true if the texture has been placed on a palette image, false otherwise. | |
bool | is_size_known () const |
Returns true if the texture's size is known, false otherwise. | |
void | mark_eggs_stale () |
Marks all the egg files that reference this placement stale. | |
void | mark_unfilled () |
Marks the texture as unfilled, so that it will need to be copied into the palette image again. | |
void | not_solitary () |
Indicates that the texture, formerly indicated as solitary, is now no longer. | |
void | omit_solitary () |
Sets the omit reason (returned by get_omit()) to OR_solitary, indicating that the palettized version of the texture should not be used because it is the only texture on a PaletteImage. | |
void | place_at (PaletteImage *image, int x, int y) |
Assigns the texture to a particular position within the indicated PaletteImage. | |
void | remove_egg (TextureReference *reference) |
Notes that a particular egg file is no longer using this particular TexturePlacement. | |
void | set_dest (DestTextureImage *dest) |
Sets the DestTextureImage that corresponds to this texture as it was copied to the install directory. | |
virtual void | write_datagram (BamWriter *writer, Datagram &datagram) |
Fills the indicated datagram up with a binary representation of the current object, in preparation for writing to a Bam file. | |
void | write_placed (std::ostream &out, int indent_level=0) |
Writes the placement position information on a line by itself. | |
![]() | |
TypedWritable (const TypedWritable ©) | |
virtual ReferenceCount * | as_reference_count () |
Returns the pointer cast to a ReferenceCount pointer, if it is in fact of that type. | |
vector_uchar | encode_to_bam_stream () const |
Converts the TypedWritable object into a single stream of data using a BamWriter, and returns that data as a bytes object. | |
bool | encode_to_bam_stream (vector_uchar &data, BamWriter *writer=nullptr) const |
Converts the TypedWritable object into a single stream of data using a BamWriter, and stores that data in the indicated string. | |
virtual void | finalize (BamReader *manager) |
Called by the BamReader to perform any final actions needed for setting up the object after all objects have been read and all pointers have been completed. | |
virtual TypeHandle | force_init_type () |
UpdateSeq | get_bam_modified () const |
Returns the current bam_modified counter. | |
void | mark_bam_modified () |
Increments the bam_modified counter, so that this object will be invalidated and retransmitted on any open bam streams. | |
void | operator= (const TypedWritable ©) |
virtual bool | require_fully_complete () const |
Some objects require all of their nested pointers to have been completed before the objects themselves can be completed. | |
virtual void | update_bam_nested (BamWriter *manager) |
Called by the BamWriter when this object has not itself been modified recently, but it should check its nested objects for updates. | |
![]() | |
TypedObject (const TypedObject ©)=default | |
TypedObject * | as_typed_object () |
Returns the object, upcast (if necessary) to a TypedObject pointer. | |
const TypedObject * | as_typed_object () const |
Returns the object, upcast (if necessary) to a TypedObject pointer. | |
int | get_best_parent_from_Set (const std::set< int > &) const |
int | get_type_index () const |
Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. | |
bool | is_exact_type (TypeHandle handle) const |
Returns true if the current object is the indicated type exactly. | |
bool | is_of_type (TypeHandle handle) const |
Returns true if the current object is or derives from the indicated type. | |
TypedObject & | operator= (const TypedObject ©)=default |
![]() | |
void | operator delete (void *, void *) |
void | operator delete (void *ptr) |
void | operator delete[] (void *, void *) |
void | operator delete[] (void *ptr) |
void * | operator new (size_t size) |
void * | operator new (size_t size, void *ptr) |
void * | operator new[] (size_t size) |
void * | operator new[] (size_t size, void *ptr) |
Static Public Member Functions | |
static TypeHandle | get_class_type () |
static void | init_type () |
static void | register_with_read_factory () |
Registers the current object as something that can be read from a Bam file. | |
![]() | |
static bool | decode_raw_from_bam_stream (TypedWritable *&ptr, ReferenceCount *&ref_ptr, vector_uchar data, BamReader *reader=nullptr) |
Reads the bytes created by a previous call to encode_to_bam_stream(), and extracts the single object on those bytes. | |
static TypeHandle | get_class_type () |
static void | init_type () |
![]() | |
static TypeHandle | get_class_type () |
static void | init_type () |
This function is declared non-inline to work around a compiler bug in g++ 2.96. | |
Public Attributes | |
TextureSwaps | _textureSwaps |
![]() | |
get_type | |
Additional Inherited Members | |
![]() | |
static TypedWritable *const | Null = nullptr |
This corresponds to a particular assignment of a TextureImage with a PaletteGroup, and specifically describes which PaletteImage (if any), and where on the PaletteImage, the TextureImage has been assigned to.
Definition at line 41 of file texturePlacement.h.
typedef pvector<TextureImage *> TexturePlacement::TextureSwaps |
Definition at line 93 of file texturePlacement.h.
TexturePlacement::TexturePlacement | ( | TextureImage * | texture, |
PaletteGroup * | group ) |
Definition at line 53 of file texturePlacement.cxx.
TexturePlacement::~TexturePlacement | ( | ) |
Definition at line 76 of file texturePlacement.cxx.
void TexturePlacement::add_egg | ( | TextureReference * | reference | ) |
Records the fact that a particular egg file is using this particular TexturePlacement.
Definition at line 127 of file texturePlacement.cxx.
References TextureReference::mark_egg_stale().
Referenced by TextureReference::set_placement().
|
virtual |
Called after the object is otherwise completely read from a Bam file, this function's job is to store the pointers that were retrieved from the Bam file for each pointer object written.
The return value is the number of pointers processed from the list.
Reimplemented from TypedWritable.
Definition at line 1033 of file texturePlacement.cxx.
References TypedWritable::complete_pointers().
void TexturePlacement::compute_tex_matrix | ( | LMatrix3d & | transform | ) |
Stores in the indicated matrix the appropriate texture matrix transform for the new placement of the texture.
Definition at line 607 of file texturePlacement.cxx.
References ImageFile::get_x_size(), ImageFile::get_y_size(), and is_placed().
Referenced by fill_image(), fill_swapped_image(), and TextureReference::update_egg().
bool TexturePlacement::determine_size | ( | ) |
Attempts to determine the appropriate size of the texture for the given placement.
This is based on the UV range of the egg files that reference the texture. Returns true on success, or false if the texture size cannot be determined (e.g. the texture file is unknown).
After this returns true, get_x_size() and get_y_size() may safely be called.
Definition at line 195 of file texturePlacement.cxx.
References force_replace(), TextureImage::get_coverage_threshold(), TextureReference::get_max_uv(), TextureReference::get_min_uv(), TextureImage::get_omit(), TextureImage::get_txa_wrap_u(), TextureImage::get_txa_wrap_v(), get_uv_area(), TextureReference::get_wrap_u(), TextureReference::get_wrap_v(), TextureReference::has_uvs(), PaletteGroup::is_none_texture_swap(), is_placed(), ImageFile::is_size_known(), and mark_eggs_stale().
Referenced by TextureImage::determine_placement_size(), and PaletteGroup::update_unknown_textures().
void TexturePlacement::fill_image | ( | PNMImage & | image | ) |
Fills in the rectangle of the palette image represented by the texture placement with the image pixels.
Definition at line 693 of file texturePlacement.cxx.
References compute_tex_matrix(), flag_error_image(), PNMImage::get_alpha(), PNMImageHeader::get_maxval, PNMImageHeader::get_num_channels, ImageFile::get_x_size(), PNMImage::get_xel(), ImageFile::get_y_size(), PNMImageHeader::has_alpha(), is_placed(), PNMImage::is_valid(), PNMImage::quick_filter_from(), TextureImage::read_source_image(), TextureImage::release_source_image(), PNMImage::set_alpha(), and PNMImage::set_xel().
Referenced by PaletteImage::update_image().
void TexturePlacement::fill_swapped_image | ( | PNMImage & | image, |
int | index ) |
Fills in the rectangle of the swapped palette image represented by the texture placement with the image pixels.
Definition at line 822 of file texturePlacement.cxx.
References compute_tex_matrix(), flag_error_image(), PNMImage::get_alpha(), PNMImageHeader::get_maxval, PNMImageHeader::get_num_channels, ImageFile::get_x_size(), PNMImage::get_xel(), ImageFile::get_y_size(), PNMImageHeader::has_alpha(), is_placed(), PNMImage::is_valid(), PNMImage::quick_filter_from(), TextureImage::read_source_image(), TextureImage::release_source_image(), PNMImage::set_alpha(), and PNMImage::set_xel().
Referenced by PaletteImage::update_image().
void TexturePlacement::flag_error_image | ( | PNMImage & | image | ) |
Sets the rectangle of the palette image represented by the texture placement to red, to represent a missing texture.
Definition at line 917 of file texturePlacement.cxx.
References PNMImageHeader::has_alpha(), is_placed(), PNMImage::set_alpha_val(), and PNMImage::set_xel_val().
Referenced by fill_image(), and fill_swapped_image().
void TexturePlacement::force_replace | ( | ) |
Removes the texture from its particular PaletteImage, but does not remove it from the PaletteGroup.
It will be re-placed when the PaletteGroup::place_all() is called.
Definition at line 544 of file texturePlacement.cxx.
References mark_eggs_stale(), and PaletteImage::unplace().
Referenced by determine_size(), and PaletteImage::reset_image().
|
inlinestatic |
Definition at line 133 of file texturePlacement.h.
DestTextureImage * TexturePlacement::get_dest | ( | ) | const |
Returns the DestTextureImage that corresponds to this texture as it was copied to the install directory.
Definition at line 181 of file texturePlacement.cxx.
Referenced by TextureMemoryCounter::add_placement(), TextureReference::update_egg(), and TextureImage::write_scale_info().
PaletteGroup * TexturePlacement::get_group | ( | ) | const |
Returns the group that this placement represents.
Definition at line 118 of file texturePlacement.cxx.
Referenced by EggFile::choose_placements(), and PaletteGroup::unplace().
PaletteImage * TexturePlacement::get_image | ( | ) | const |
Returns the particular PaletteImage on which the texture has been placed.
Definition at line 455 of file texturePlacement.cxx.
References is_placed().
Referenced by TextureMemoryCounter::add_placement(), PaletteImage::unplace(), PalettePage::unplace(), TextureReference::update_egg(), and TextureImage::write_scale_info().
const std::string & TexturePlacement::get_name | ( | ) | const |
Returns the name of the texture that this placement represents.
Definition at line 94 of file texturePlacement.cxx.
Referenced by SortPlacementBySize::operator()().
OmitReason TexturePlacement::get_omit_reason | ( | ) | const |
Returns the reason the texture has been omitted from a palette image, or OR_none if it has not.
Definition at line 400 of file texturePlacement.cxx.
Referenced by TextureMemoryCounter::add_placement(), PaletteImage::check_solitary(), TextureImage::copy_unplaced(), PalettePage::place(), PaletteGroup::place_all(), TextureReference::update_egg(), PaletteGroup::write_image_info(), and TextureImage::write_scale_info().
PalettePage * TexturePlacement::get_page | ( | ) | const |
Returns the particular PalettePage on which the texture has been placed.
Definition at line 464 of file texturePlacement.cxx.
References PaletteImage::get_page(), and is_placed().
Referenced by PaletteGroup::unplace(), and PalettePage::unplace().
double TexturePlacement::get_placed_uv_area | ( | ) | const |
Returns the total area of the rectangle occupied by the UV minmax box, as it has been placed.
See also get_uv_area().
Definition at line 514 of file texturePlacement.cxx.
References is_placed().
Referenced by write_placed().
int TexturePlacement::get_placed_x | ( | ) | const |
Returns the X pixel at which the texture has been placed within its PaletteImage.
It is an error to call this unless is_placed() returns true.
Definition at line 474 of file texturePlacement.cxx.
References is_placed().
Referenced by write_placed().
int TexturePlacement::get_placed_x_size | ( | ) | const |
Returns the size in the X dimension, in pixels, of the texture image as it has been placed within the palette.
Definition at line 494 of file texturePlacement.cxx.
References is_placed().
Referenced by TextureMemoryCounter::add_placement(), PaletteImage::count_coverage(), PaletteImage::count_utilization(), and write_placed().
int TexturePlacement::get_placed_y | ( | ) | const |
Returns the Y pixel at which the texture has been placed within its PaletteImage.
It is an error to call this unless is_placed() returns true.
Definition at line 484 of file texturePlacement.cxx.
References is_placed().
Referenced by write_placed().
int TexturePlacement::get_placed_y_size | ( | ) | const |
Returns the size in the Y dimension, in pixels, of the texture image as it has been placed within the palette.
Definition at line 504 of file texturePlacement.cxx.
References is_placed().
Referenced by TextureMemoryCounter::add_placement(), PaletteImage::count_coverage(), PaletteImage::count_utilization(), and write_placed().
const TextureProperties & TexturePlacement::get_properties | ( | ) | const |
Returns the grouping properties of the image.
Definition at line 110 of file texturePlacement.cxx.
References ImageFile::get_properties().
Referenced by PaletteGroup::place_all().
TextureImage * TexturePlacement::get_texture | ( | ) | const |
Returns the texture that this placement represents.
Definition at line 102 of file texturePlacement.cxx.
Referenced by TextureMemoryCounter::add_placement(), PaletteImage::count_coverage(), PaletteImage::update_image(), PaletteGroup::update_unknown_textures(), PaletteGroup::write_image_info(), and write_placed().
|
inlinevirtual |
Reimplemented from TypedWritable.
Definition at line 141 of file texturePlacement.h.
double TexturePlacement::get_uv_area | ( | ) | const |
Returns the total area of the rectangle occupied by the UV minmax box, in UV coordinates.
1.0 is the entire texture; values greater than 1 imply the texture repeats.
Definition at line 432 of file texturePlacement.cxx.
Referenced by determine_size(), and PaletteGroup::write_image_info().
int TexturePlacement::get_x_size | ( | ) | const |
Returns the size in the X dimension, in pixels, of the texture image as it must appear in the palette.
This accounts for any growing or shrinking of the texture due to the UV coordinate range.
Definition at line 410 of file texturePlacement.cxx.
Referenced by SortPlacementBySize::operator()(), PaletteImage::place(), and PaletteGroup::write_image_info().
int TexturePlacement::get_y_size | ( | ) | const |
Returns the size in the Y dimension, in pixels, of the texture image as it must appear in the palette.
This accounts for any growing or shrinking of the texture due to the UV coordinate range.
Definition at line 421 of file texturePlacement.cxx.
Referenced by SortPlacementBySize::operator()(), PaletteImage::place(), and PaletteGroup::write_image_info().
|
inlinestatic |
Definition at line 136 of file texturePlacement.h.
bool TexturePlacement::intersects | ( | int | x, |
int | y, | ||
int | x_size, | ||
int | y_size ) |
Returns true if the particular position this texture has been assigned to overlaps the rectangle whose top left corner is at x, y and whose size is given by x_size, y_size, or false otherwise.
Definition at line 589 of file texturePlacement.cxx.
References is_placed().
bool TexturePlacement::is_filled | ( | ) | const |
Returns true if the texture has been filled (i.e.
fill_image() has been called) since it was placed.
Definition at line 675 of file texturePlacement.cxx.
Referenced by PaletteImage::update_image().
bool TexturePlacement::is_placed | ( | ) | const |
Returns true if the texture has been placed on a palette image, false otherwise.
This will generally be true if get_omit_reason() returns OR_none or OR_solitary and false otherwise.
Definition at line 447 of file texturePlacement.cxx.
Referenced by compute_tex_matrix(), determine_size(), fill_image(), fill_swapped_image(), flag_error_image(), get_image(), get_page(), get_placed_uv_area(), get_placed_x(), get_placed_x_size(), get_placed_y(), get_placed_y_size(), intersects(), not_solitary(), omit_solitary(), PaletteImage::place(), place_at(), PaletteGroup::unplace(), PaletteImage::unplace(), PalettePage::unplace(), and write_placed().
bool TexturePlacement::is_size_known | ( | ) | const |
Returns true if the texture's size is known, false otherwise.
Usually this can only be false after determine_size() has been called there is something wrong with the texture (in which case the placement will automatically omit itself from the palette anyway).
Definition at line 391 of file texturePlacement.cxx.
Referenced by PaletteImage::place(), and PaletteGroup::update_unknown_textures().
void TexturePlacement::mark_eggs_stale | ( | ) |
Marks all the egg files that reference this placement stale.
Presumably this is called after moving the texture around in the palette or something.
Definition at line 158 of file texturePlacement.cxx.
References TextureReference::mark_egg_stale().
Referenced by determine_size(), force_replace(), not_solitary(), omit_solitary(), and PaletteImage::update_filename().
void TexturePlacement::mark_unfilled | ( | ) |
Marks the texture as unfilled, so that it will need to be copied into the palette image again.
Definition at line 684 of file texturePlacement.cxx.
Referenced by TextureImage::post_txa_file(), and PaletteImage::update_image().
void TexturePlacement::not_solitary | ( | ) |
Indicates that the texture, formerly indicated as solitary, is now no longer.
Definition at line 575 of file texturePlacement.cxx.
References is_placed(), and mark_eggs_stale().
Referenced by PaletteImage::check_solitary().
void TexturePlacement::omit_solitary | ( | ) |
Sets the omit reason (returned by get_omit()) to OR_solitary, indicating that the palettized version of the texture should not be used because it is the only texture on a PaletteImage.
However, the texture is still considered placed, and is_placed() will return true.
Definition at line 562 of file texturePlacement.cxx.
References is_placed(), and mark_eggs_stale().
Referenced by PaletteImage::check_solitary().
void TexturePlacement::place_at | ( | PaletteImage * | image, |
int | x, | ||
int | y ) |
Assigns the texture to a particular position within the indicated PaletteImage.
It is an error to call this if the texture has already been placed elsewhere.
Definition at line 526 of file texturePlacement.cxx.
References is_placed().
Referenced by PaletteImage::place().
|
static |
Registers the current object as something that can be read from a Bam file.
Definition at line 987 of file texturePlacement.cxx.
References BamReader::get_factory().
Referenced by init_palettizer().
void TexturePlacement::remove_egg | ( | TextureReference * | reference | ) |
Notes that a particular egg file is no longer using this particular TexturePlacement.
Definition at line 144 of file texturePlacement.cxx.
References TextureReference::mark_egg_stale().
Referenced by EggFile::remove_egg(), and TextureReference::set_placement().
void TexturePlacement::set_dest | ( | DestTextureImage * | dest | ) |
Sets the DestTextureImage that corresponds to this texture as it was copied to the install directory.
Definition at line 172 of file texturePlacement.cxx.
Referenced by TextureImage::copy_unplaced().
Fills the indicated datagram up with a binary representation of the current object, in preparation for writing to a Bam file.
Reimplemented from TypedWritable.
Definition at line 997 of file texturePlacement.cxx.
References Datagram::add_bool(), Datagram::add_int32(), TypedWritable::write_datagram(), TexturePosition::write_datagram(), and BamWriter::write_pointer().
void TexturePlacement::write_placed | ( | std::ostream & | out, |
int | indent_level = 0 ) |
Writes the placement position information on a line by itself.
Definition at line 645 of file texturePlacement.cxx.
References get_placed_uv_area(), get_placed_x(), get_placed_x_size(), get_placed_y(), get_placed_y_size(), get_texture(), indent(), and is_placed().
Referenced by PaletteImage::write_placements().
TextureSwaps TexturePlacement::_textureSwaps |
Definition at line 94 of file texturePlacement.h.