| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- // Filename: eggTexture.h
- // Created by: drose (18Jan99)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
- //
- // All use of this software is subject to the terms of the Panda 3d
- // Software license. You should have received a copy of this license
- // along with this source code; you will also find a current copy of
- // the license at http://www.panda3d.org/license.txt .
- //
- // To contact the maintainers of this program write to
- // [email protected] .
- //
- ////////////////////////////////////////////////////////////////////
- #ifndef EGGTEXTURE_H
- #define EGGTEXTURE_H
- #include <pandabase.h>
- #include "eggRenderMode.h"
- #include "eggFilenameNode.h"
- #include <luse.h>
- ////////////////////////////////////////////////////////////////////
- // Class : EggTexture
- // Description : Defines a texture map that may be applied to
- // geometry.
- ////////////////////////////////////////////////////////////////////
- class EXPCL_PANDAEGG EggTexture : public EggFilenameNode, public EggRenderMode {
- public:
- EggTexture(const string &tref_name, const string &filename);
- EggTexture(const EggTexture ©);
- EggTexture &operator = (const EggTexture ©);
- virtual void write(ostream &out, int indent_level) const;
- enum Equivalence {
- E_basename = 0x001,
- E_extension = 0x002,
- E_dirname = 0x004,
- E_complete_filename = 0x007,
- E_transform = 0x008,
- E_attributes = 0x010,
- E_tref_name = 0x020,
- };
- bool is_equivalent_to(const EggTexture &other, int eq) const;
- bool sorts_less_than(const EggTexture &other, int eq) const;
- bool has_alpha_channel(int num_components) const;
- enum Format {
- F_unspecified,
- F_rgba, F_rgbm, F_rgba12, F_rgba8, F_rgba4, F_rgba5,
- F_rgb, F_rgb12, F_rgb8, F_rgb5, F_rgb332,
- F_red, F_green, F_blue, F_alpha, F_luminance,
- F_luminance_alpha, F_luminance_alphamask
- };
- enum WrapMode {
- WM_unspecified, WM_repeat, WM_clamp
- };
- enum FilterType {
- // Note that these type values match up, name-for-name, with a
- // similar enumerated type in Panda's Texture object. However,
- // they do *not* match up numerically. You must convert between
- // them using a switch statement.
- FT_unspecified,
- // Mag Filter and Min Filter
- FT_nearest,
- FT_linear,
- // Min Filter Only
- FT_nearest_mipmap_nearest, // "mipmap point"
- FT_linear_mipmap_nearest, // "mipmap linear"
- FT_nearest_mipmap_linear, // "mipmap bilinear"
- FT_linear_mipmap_linear, // "mipmap trilinear"
- };
- enum EnvType {
- ET_unspecified, ET_modulate, ET_decal
- };
- INLINE void set_format(Format format);
- INLINE Format get_format() const;
- INLINE void set_wrap_mode(WrapMode mode);
- INLINE WrapMode get_wrap_mode() const;
- INLINE void set_wrap_u(WrapMode mode);
- INLINE WrapMode get_wrap_u() const;
- INLINE WrapMode determine_wrap_u() const;
- INLINE void set_wrap_v(WrapMode mode);
- INLINE WrapMode get_wrap_v() const;
- INLINE WrapMode determine_wrap_v() const;
- INLINE void set_minfilter(FilterType type);
- INLINE FilterType get_minfilter() const;
- INLINE void set_magfilter(FilterType type);
- INLINE FilterType get_magfilter() const;
- INLINE void set_anisotropic_degree(int anisotropic_degree);
- INLINE void clear_anisotropic_degree();
- INLINE bool has_anisotropic_degree() const;
- INLINE int get_anisotropic_degree() const;
- INLINE void set_env_type(EnvType type);
- INLINE EnvType get_env_type() const;
- INLINE void set_transform(const LMatrix3d &transform);
- INLINE void clear_transform();
- INLINE bool has_transform() const;
- INLINE LMatrix3d get_transform() const;
- INLINE bool transform_is_identity() const;
- INLINE void set_alpha_file(const Filename &filename);
- INLINE void clear_alpha_file();
- INLINE bool has_alpha_file() const;
- INLINE const Filename &get_alpha_file() const;
- INLINE Filename &update_alpha_file();
- static Format string_format(const string &string);
- static WrapMode string_wrap_mode(const string &string);
- static FilterType string_filter_type(const string &string);
- static EnvType string_env_type(const string &string);
- protected:
- virtual bool egg_start_parse_body();
- private:
- enum Flags {
- F_has_transform = 0x0001,
- F_has_alpha_file = 0x0002,
- F_has_anisotropic_degree = 0x0004,
- };
- Format _format;
- WrapMode _wrap_mode, _wrap_u, _wrap_v;
- FilterType _minfilter, _magfilter;
- int _anisotropic_degree;
- EnvType _env_type;
- int _flags;
- LMatrix3d _transform;
- Filename _alpha_file;
- public:
- static TypeHandle get_class_type() {
- return _type_handle;
- }
- static void init_type() {
- EggFilenameNode::init_type();
- EggRenderMode::init_type();
- register_type(_type_handle, "EggTexture",
- EggFilenameNode::get_class_type(),
- EggRenderMode::get_class_type());
- }
- virtual TypeHandle get_type() const {
- return get_class_type();
- }
- virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
- private:
- static TypeHandle _type_handle;
- };
- ///////////////////////////////////////////////////////////////////
- // Class : UniqueEggTextures
- // Description : An STL function object for sorting textures into
- // order by properties. Returns true if the two
- // referenced EggTexture pointers are in sorted order,
- // false otherwise.
- ////////////////////////////////////////////////////////////////////
- class EXPCL_PANDAEGG UniqueEggTextures {
- public:
- INLINE UniqueEggTextures(int eq = ~0);
- INLINE bool operator ()(const EggTexture *t1, const EggTexture *t2) const;
- int _eq;
- };
- INLINE ostream &operator << (ostream &out, const EggTexture &n) {
- return out << n.get_filename();
- }
- ostream EXPCL_PANDAEGG &operator << (ostream &out, EggTexture::Format format);
- ostream EXPCL_PANDAEGG &operator << (ostream &out, EggTexture::WrapMode mode);
- ostream EXPCL_PANDAEGG &operator << (ostream &out, EggTexture::FilterType type);
- ostream EXPCL_PANDAEGG &operator << (ostream &out, EggTexture::EnvType type);
- #include "eggTexture.I"
- #endif
|