Panda3D
textureProperties.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 textureProperties.h
10 * @author drose
11 * @date 2000-11-28
12 */
13
14#ifndef TEXTUREPROPERTIES_H
15#define TEXTUREPROPERTIES_H
16
17#include "pandatoolbase.h"
18
19#include "eggTexture.h"
20#include "typedWritable.h"
21
22class PNMFileType;
23class FactoryParams;
24
25/**
26 * This is the set of characteristics of a texture that, if different from
27 * another texture, prevent the two textures from sharing a PaletteImage. It
28 * includes properties such as mipmapping, number of channels, etc.
29 */
31public:
34 void operator = (const TextureProperties &copy);
35
36 void clear_basic();
37
38 bool has_num_channels() const;
39 int get_num_channels() const;
40 void set_num_channels(int num_channels);
41 void force_grayscale();
42 void force_nonalpha();
43 bool uses_alpha() const;
44
45 std::string get_string() const;
46 void update_properties(const TextureProperties &other);
47 void fully_define();
48
49 void update_egg_tex(EggTexture *egg_tex) const;
50 bool egg_properties_match(const TextureProperties &other) const;
51
52 bool operator < (const TextureProperties &other) const;
53 bool operator == (const TextureProperties &other) const;
54 bool operator != (const TextureProperties &other) const;
55
56 EggTexture::Format _format;
57 bool _force_format; // true when format has been explicitly specified
58 bool _generic_format; // true if 'generic' keyword, meaning rgba8 -> rgba.
59 bool _keep_format; // true if 'keep-format' keyword.
60 EggTexture::FilterType _minfilter, _magfilter;
61 EggTexture::QualityLevel _quality_level;
62 int _anisotropic_degree;
63 PNMFileType *_color_type;
64 PNMFileType *_alpha_type;
65
66private:
67 static std::string get_format_string(EggTexture::Format format);
68 static std::string get_filter_string(EggTexture::FilterType filter_type);
69 static std::string get_anisotropic_degree_string(int aniso_degree);
70 static std::string get_quality_level_string(EggTexture::QualityLevel quality_level);
71 static std::string get_type_string(PNMFileType *color_type,
72 PNMFileType *alpha_type);
73
74 static EggTexture::Format union_format(EggTexture::Format a,
75 EggTexture::Format b);
76
77 static EggTexture::FilterType union_filter(EggTexture::FilterType a,
78 EggTexture::FilterType b);
79 static EggTexture::QualityLevel union_quality_level(EggTexture::QualityLevel a,
80 EggTexture::QualityLevel b);
81
82 bool _got_num_channels;
83 int _num_channels;
84 int _effective_num_channels;
85
86 // The TypedWritable interface follows.
87public:
88 static void register_with_read_factory();
89 virtual void write_datagram(BamWriter *writer, Datagram &datagram);
90 virtual int complete_pointers(TypedWritable **p_list,
91 BamReader *manager);
92
93protected:
94 static TypedWritable *make_TextureProperties(const FactoryParams &params);
95
96public:
97 void fillin(DatagramIterator &scan, BamReader *manager);
98
99public:
100 static TypeHandle get_class_type() {
101 return _type_handle;
102 }
103 static void init_type() {
104 TypedWritable::init_type();
105 register_type(_type_handle, "TextureProperties",
106 TypedWritable::get_class_type());
107 }
108 virtual TypeHandle get_type() const {
109 return get_class_type();
110 }
111
112private:
113 static TypeHandle _type_handle;
114};
115
116#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
Defines a texture map that may be applied to geometry.
Definition: eggTexture.h:30
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
This is the base class of a family of classes that represent particular image file types that PNMImag...
Definition: pnmFileType.h:32
This is the set of characteristics of a texture that, if different from another texture,...
void update_egg_tex(EggTexture *egg_tex) const
Adjusts the texture properties of the indicated egg reference to match these properties.
int get_num_channels() const
Returns the number of channels (1 through 4) associated with the image.
void clear_basic()
Resets only the properties that might be changed by update_properties() to a neutral state.
void update_properties(const TextureProperties &other)
If the indicate TextureProperties structure is more specific than this one, updates this one.
void force_grayscale()
Sets the actual number of channels to indicate a grayscale image, presumably after discovering that t...
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...
void force_nonalpha()
Sets the actual number of channels to indicate an image with no alpha channel, presumably after disco...
bool egg_properties_match(const TextureProperties &other) const
Returns true if all of the properties that are reflected directly in an egg file match between this T...
static void register_with_read_factory()
Registers the current object as something that can be read from a Bam file.
void fillin(DatagramIterator &scan, BamReader *manager)
Reads the binary data from the given datagram iterator, which was written by a previous call to write...
void set_num_channels(int num_channels)
Sets the number of channels (1 through 4) associated with the image, presumably after reading this in...
void fully_define()
If any properties remain unspecified, specify them now.
virtual void write_datagram(BamWriter *writer, Datagram &datagram)
Fills the indicated datagram up with a binary representation of the current object,...
bool has_num_channels() const
Returns true if the number of channels is known.
std::string get_string() const
Returns a string corresponding to the TextureProperties object.
bool uses_alpha() const
Returns true if the texture uses an alpha channel, false otherwise.
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.
Definition: typedWritable.h:35
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(),...
Definition: register_type.I:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.