Panda3D
Loading...
Searching...
No Matches
textureImage.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file textureImage.h
10 * @author drose
11 * @date 2000-11-28
12 */
13
14#ifndef TEXTUREIMAGE_H
15#define TEXTUREIMAGE_H
16
17#include "pandatoolbase.h"
18
19#include "imageFile.h"
20#include "paletteGroups.h"
21#include "textureRequest.h"
22
23#include "namable.h"
24#include "filename.h"
25#include "pnmImage.h"
26#include "eggRenderMode.h"
27
28#include "pmap.h"
29#include "pset.h"
30
34class EggFile;
35
36/**
37 * This represents a single source texture that is referenced by one or more
38 * egg files. It may be assigned to multiple PaletteGroups, and thus placed
39 * on multiple PaletteImages (up to one per PaletteGroup).
40 *
41 * Since a TextureImage may be referenced by multiple egg files that are each
42 * assigned to a different set of groups, it tries to maximize sharing between
43 * egg files and minimize the number of different PaletteGroups it is assigned
44 * to.
45 */
46class TextureImage : public ImageFile, public Namable {
47public:
49
50 void note_egg_file(EggFile *egg_file);
51 void assign_groups();
52
53 const PaletteGroups &get_groups() const;
55 void force_replace();
56 void mark_eggs_stale();
57
58 void mark_texture_named();
59 bool is_texture_named() const;
60
61 void pre_txa_file();
62 void post_txa_file();
63 bool got_txa_file() const;
65
66 bool get_omit() const;
67 double get_coverage_threshold() const;
68 int get_margin() const;
69 bool is_surprise() const;
70 bool is_used() const;
71 EggRenderMode::AlphaMode get_alpha_mode() const;
72
73 EggTexture::WrapMode get_txa_wrap_u() const;
74 EggTexture::WrapMode get_txa_wrap_v() const;
75
76 SourceTextureImage *get_source(const Filename &filename,
77 const Filename &alpha_filename,
78 int alpha_file_channel);
79
82
83 void copy_unplaced(bool redo_all);
84
87 void set_source_image(const PNMImage &image);
88 void read_header();
89 bool is_newer_than(const Filename &reference_filename);
90
91 void write_source_pathnames(std::ostream &out, int indent_level = 0) const;
92 void write_scale_info(std::ostream &out, int indent_level = 0);
93
94private:
99
100 static int compute_egg_count(PaletteGroup *group,
101 const WorkingEggs &egg_files);
102
103 void assign_to_groups(const PaletteGroups &groups);
104 void consider_grayscale();
105 void consider_alpha();
106
107 void remove_old_dests(const Dests &a, const Dests &b);
108 void copy_new_dests(const Dests &a, const Dests &b);
109
110 std::string get_source_key(const Filename &filename,
111 const Filename &alpha_filename,
112 int alpha_file_channel);
113
114private:
115 TextureRequest _request;
116 TextureProperties _pre_txa_properties;
117 EggRenderMode::AlphaMode _pre_txa_alpha_mode;
118 SourceTextureImage *_preferred_source;
119 bool _is_surprise;
120
121 bool _ever_read_image;
122 bool _forced_grayscale;
123
124 enum AlphaBits {
125 // consider_alpha() sets alpha_bits to the union of all of these pixel
126 // values that might be found in the alpha channel.
127 AB_one = 0x01,
128 AB_mid = 0x02,
129 AB_zero = 0x04,
130 AB_all = 0x07 // == AB_zero | AB_mid | AB_one
131 };
132 int _alpha_bits;
133 double _mid_pixel_ratio;
134 bool _is_cutout;
135 EggRenderMode::AlphaMode _alpha_mode;
136 EggTexture::WrapMode _txa_wrap_u, _txa_wrap_v;
137
138 PaletteGroups _explicitly_assigned_groups;
139 PaletteGroups _actual_assigned_groups;
140
141 EggFiles _egg_files;
142
144 Placement _placement;
145
146 Sources _sources;
147 Dests _dests;
148
149 bool _read_source_image;
150 bool _allow_release_source_image;
151 PNMImage _source_image;
152 bool _texture_named;
153 bool _got_txa_file;
154
155
156 // The TypedWritable interface follows.
157public:
158 static void register_with_read_factory();
159 virtual void write_datagram(BamWriter *writer, Datagram &datagram);
160 virtual int complete_pointers(TypedWritable **p_list,
161 BamReader *manager);
162
163protected:
164 static TypedWritable *make_TextureImage(const FactoryParams &params);
165 void fillin(DatagramIterator &scan, BamReader *manager);
166
167private:
168 // These values are only filled in while reading from the bam file; don't
169 // use them otherwise.
170 int _num_placement;
171 int _num_sources;
172 int _num_dests;
173
174public:
175 static TypeHandle get_class_type() {
176 return _type_handle;
177 }
178 static void init_type() {
179 ImageFile::init_type();
180 Namable::init_type();
181 register_type(_type_handle, "TextureImage",
182 ImageFile::get_class_type(),
183 Namable::get_class_type());
184 }
185 virtual TypeHandle get_type() const {
186 return get_class_type();
187 }
188
189private:
190 static TypeHandle _type_handle;
191
192 friend class TxaLine;
193};
194
195#endif
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition bamReader.h:110
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition bamWriter.h:63
A class to retrieve the individual data elements previously stored in a Datagram.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition datagram.h:38
This represents a texture filename as it has been resized and copied to the map directory (e....
This represents a single egg file known to the palettizer.
Definition eggFile.h:36
An instance of this class is passed to the Factory when requesting it to do its business and construc...
The name of a file, such as a texture file or an Egg file.
Definition filename.h:44
This is the base class of both TextureImage and PaletteImage.
Definition imageFile.h:33
A base class for all things which can have a name.
Definition namable.h:26
The name of this class derives from the fact that we originally implemented it as a layer on top of t...
Definition pnmImage.h:58
This is the highest level of grouping for TextureImages.
A set of PaletteGroups.
This is a texture image reference as it appears in an egg file: the source image of the texture.
This represents a single source texture that is referenced by one or more egg files.
bool got_txa_file() const
Returns true if this TextureImage has been looked up in the .txa file this session,...
void pre_txa_file()
Updates any internal state prior to reading the .txa file.
void note_egg_file(EggFile *egg_file)
Records that a particular egg file references this texture.
void clear_source_basic_properties()
Calls clear_basic_properties() on each source texture image used by this texture, to reset the proper...
const PaletteGroups & get_groups() const
Once assign_groups() has been called, this returns the actual set of groups the TextureImage has been...
void mark_eggs_stale()
Marks all the egg files that reference this texture stale.
virtual void write_datagram(BamWriter *writer, Datagram &datagram)
Fills the indicated datagram up with a binary representation of the current object,...
EggTexture::WrapMode get_txa_wrap_v() const
Returns the wrap mode specified in the v direction in the txa file, or WM_unspecified.
void read_header()
Causes the header part of the image to be reread, usually to confirm that its image properties (size,...
void copy_unplaced(bool redo_all)
Copies the texture to whichever destination directories are appropriate for the groups in which it ha...
SourceTextureImage * get_preferred_source()
Determines the preferred source image for examining size and reading pixels, etc.
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...
int get_margin() const
Returns the appropriate margin for this texture.
bool is_used() const
Returns true if this particular texture has been placed somewhere, anywhere, or false if it is not us...
EggRenderMode::AlphaMode get_alpha_mode() const
Returns the alpha mode that should be used to render objects with this texture, as specified by the u...
void write_scale_info(std::ostream &out, int indent_level=0)
Writes the information about the texture's size and placement.
bool get_omit() const
Returns true if the user specifically requested to omit this texture via the "omit" keyword in the ....
bool is_surprise() const
Returns true if this particular texture is a 'surprise', i.e.
TexturePlacement * get_placement(PaletteGroup *group) const
Gets the TexturePlacement object which represents the assignment of this texture to the indicated gro...
void mark_texture_named()
Indicates that this particular texture has been named by the user for processing this session,...
void release_source_image()
Frees the memory that was allocated by a previous call to read_source_image().
void assign_groups()
Assigns the texture to all of the PaletteGroups the various egg files that use it need.
void set_source_image(const PNMImage &image)
Accepts the indicated source image as if it had been read from disk.
bool is_newer_than(const Filename &reference_filename)
Returns true if the source image is newer than the indicated file, false otherwise.
static void register_with_read_factory()
Registers the current object as something that can be read from a Bam file.
void force_replace()
Removes the texture from any PaletteImages it is assigned to, but does not remove it from the groups.
void post_txa_file()
Once the .txa file has been read and the TextureImage matched against it, considers applying the requ...
void write_source_pathnames(std::ostream &out, int indent_level=0) const
Writes the list of source pathnames that might contribute to this texture to the indicated output str...
bool is_texture_named() const
Returns true if this particular texture has been named by the user for procession this session,...
double get_coverage_threshold() const
Returns the appropriate coverage threshold for this texture.
SourceTextureImage * get_source(const Filename &filename, const Filename &alpha_filename, int alpha_file_channel)
Returns the SourceTextureImage corresponding to the given filename(s).
void determine_placement_size()
Calls determine_size() on each TexturePlacement for the texture, to ensure that each TexturePlacement...
const PNMImage & read_source_image()
Reads in the original image, if it has not already been read, and returns it.
EggTexture::WrapMode get_txa_wrap_u() const
Returns the wrap mode specified in the u direction in the txa file, or WM_unspecified.
This corresponds to a particular assignment of a TextureImage with a PaletteGroup,...
This is the set of characteristics of a texture that, if different from another texture,...
These are the things that a user might explicitly request to adjust on a texture via a line in the ....
This is a single matching line in the .txa file.
Definition txaLine.h:36
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
Base class for objects that can be written to and read from Bam files.
This is our own Panda specialization on the default STL map.
Definition pmap.h:49
This is our own Panda specialization on the default STL set.
Definition pset.h:49
This is our own Panda specialization on the default STL vector.
Definition pvector.h:42
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.