31 EggTexture(
const string &tref_name,
const Filename &filename)
34 _texture_type = TT_unspecified;
35 _format = F_unspecified;
36 _compression_mode = CM_default;
37 _wrap_mode = WM_unspecified;
38 _wrap_u = WM_unspecified;
39 _wrap_v = WM_unspecified;
40 _wrap_w = WM_unspecified;
41 _minfilter = FT_unspecified;
42 _magfilter = FT_unspecified;
43 _anisotropic_degree = 0;
44 _env_type = ET_unspecified;
45 _saved_result =
false;
48 _tex_gen = TG_unspecified;
49 _quality_level = QL_unspecified;
51 _color.set(0.0f, 0.0f, 0.0f, 1.0f);
52 _border_color.set(0.0f, 0.0f, 0.0f, 1.0f);
54 _alpha_file_channel = 0;
55 _read_mipmaps =
false;
56 _multitexture_sort = 0;
74 EggFilenameNode::operator = (copy);
75 EggRenderMode::operator = (copy);
76 EggTransform::operator = (copy);
78 _texture_type = copy._texture_type;
79 _format = copy._format;
80 _compression_mode = copy._compression_mode;
81 _wrap_mode = copy._wrap_mode;
82 _wrap_u = copy._wrap_u;
83 _wrap_v = copy._wrap_v;
84 _wrap_w = copy._wrap_w;
85 _minfilter = copy._minfilter;
86 _magfilter = copy._magfilter;
87 _anisotropic_degree = copy._anisotropic_degree;
88 _env_type = copy._env_type;
89 _saved_result = copy._saved_result;
90 _multiview = copy._multiview;
91 _num_views = copy._num_views;
92 _tex_gen = copy._tex_gen;
93 _quality_level = copy._quality_level;
94 _stage_name = copy._stage_name;
95 _priority = copy._priority;
97 _border_color = copy._border_color;
98 _uv_name = copy._uv_name;
101 _flags = copy._flags;
102 _alpha_filename = copy._alpha_filename;
103 _alpha_fullpath = copy._alpha_fullpath;
104 _alpha_file_channel = copy._alpha_file_channel;
105 _read_mipmaps = copy._read_mipmaps;
106 _multitexture_sort = 0;
107 _combiner[0] = copy._combiner[0];
108 _combiner[1] = copy._combiner[1];
125 write(ostream &out,
int indent_level)
const {
130 indent(out, indent_level + 2)
131 <<
"<Scalar> alpha-file { ";
137 indent(out, indent_level + 2)
138 <<
"<Scalar> alpha-file-channel { " 143 indent(out, indent_level + 2)
144 <<
"<Scalar> read-mipmaps { 1 }\n";
147 if (get_texture_type() != TT_unspecified) {
148 indent(out, indent_level + 2)
149 <<
"<Scalar> type { " << get_texture_type() <<
" }\n";
152 if (get_format() != F_unspecified) {
153 indent(out, indent_level + 2)
154 <<
"<Scalar> format { " << get_format() <<
" }\n";
157 if (get_compression_mode() != CM_default) {
158 indent(out, indent_level + 2)
159 <<
"<Scalar> compression { " << get_compression_mode() <<
" }\n";
162 if (get_wrap_mode() != WM_unspecified) {
163 indent(out, indent_level + 2)
164 <<
"<Scalar> wrap { " << get_wrap_mode() <<
" }\n";
168 indent(out, indent_level + 2)
169 <<
"<Scalar> wrapu { " <<
get_wrap_u() <<
" }\n";
173 indent(out, indent_level + 2)
174 <<
"<Scalar> wrapv { " <<
get_wrap_v() <<
" }\n";
178 indent(out, indent_level + 2)
179 <<
"<Scalar> wrapw { " <<
get_wrap_w() <<
" }\n";
182 if (get_minfilter() != FT_unspecified) {
183 indent(out, indent_level + 2)
184 <<
"<Scalar> minfilter { " << get_minfilter() <<
" }\n";
187 if (get_magfilter() != FT_unspecified) {
188 indent(out, indent_level + 2)
189 <<
"<Scalar> magfilter { " << get_magfilter() <<
" }\n";
193 indent(out, indent_level + 2)
197 if (get_env_type() != ET_unspecified) {
198 indent(out, indent_level + 2)
199 <<
"<Scalar> envtype { " << get_env_type() <<
" }\n";
202 for (
int ci = 0; ci < (int)CC_num_channels; ci++) {
203 CombineChannel channel = (CombineChannel)ci;
204 if (get_combine_mode(channel) != CM_unspecified) {
205 indent(out, indent_level + 2)
206 <<
"<Scalar> combine-" << channel
207 <<
" { " << get_combine_mode(channel) <<
" }\n";
209 for (
int i = 0; i < (int)CI_num_indices; i++) {
210 if (get_combine_source(channel, i) != CS_unspecified) {
211 indent(out, indent_level + 2)
212 <<
"<Scalar> combine-" << channel <<
"-source" << i
213 <<
" { " << get_combine_source(channel, i) <<
" }\n";
215 if (get_combine_operand(channel, i) != CO_unspecified) {
216 indent(out, indent_level + 2)
217 <<
"<Scalar> combine-" << channel <<
"-operand" << i
218 <<
" { " << get_combine_operand(channel, i) <<
" }\n";
224 indent(out, indent_level + 2)
225 <<
"<Scalar> saved-result { 1 }\n";
228 if (get_tex_gen() != TG_unspecified) {
229 indent(out, indent_level + 2)
230 <<
"<Scalar> tex-gen { " << get_tex_gen() <<
" }\n";
233 if (get_quality_level() != QL_unspecified) {
234 indent(out, indent_level + 2)
235 <<
"<Scalar> quality-level { " << get_quality_level() <<
" }\n";
239 indent(out, indent_level + 2)
244 indent(out, indent_level + 2)
249 indent(out, indent_level + 2)
250 <<
"<Scalar> blendr { " << _color[0] <<
" }\n";
251 indent(out, indent_level + 2)
252 <<
"<Scalar> blendg { " << _color[1] <<
" }\n";
253 indent(out, indent_level + 2)
254 <<
"<Scalar> blendb { " << _color[2] <<
" }\n";
255 indent(out, indent_level + 2)
256 <<
"<Scalar> blenda { " << _color[3] <<
" }\n";
260 indent(out, indent_level + 2)
261 <<
"<Scalar> borderr { " << _border_color[0] <<
" }\n";
262 indent(out, indent_level + 2)
263 <<
"<Scalar> borderg { " << _border_color[1] <<
" }\n";
264 indent(out, indent_level + 2)
265 <<
"<Scalar> borderb { " << _border_color[2] <<
" }\n";
266 indent(out, indent_level + 2)
267 <<
"<Scalar> bordera { " << _border_color[3] <<
" }\n";
271 indent(out, indent_level + 2)
272 <<
"<Scalar> uv-name { " <<
get_uv_name() <<
" }\n";
276 indent(out, indent_level + 2)
281 indent(out, indent_level + 2)
286 indent(out, indent_level + 2)
287 <<
"<Scalar> multiview { 1 }\n";
291 indent(out, indent_level + 2)
301 indent(out, indent_level) <<
"}\n";
330 if ((eq & E_complete_filename) == E_complete_filename) {
340 if (eq & E_basename) {
345 if (eq & E_extension) {
350 if (eq & E_dirname) {
357 if (eq & E_transform) {
370 if (eq & E_attributes) {
372 if (_texture_type != other._texture_type ||
373 _format != other._format ||
374 _compression_mode != other._compression_mode ||
375 _wrap_mode != other._wrap_mode ||
376 _wrap_u != other._wrap_u ||
377 _wrap_v != other._wrap_v ||
378 _wrap_w != other._wrap_w ||
379 _minfilter != other._minfilter ||
380 _magfilter != other._magfilter ||
381 _env_type != other._env_type) {
384 if (EggRenderMode::operator != (other)) {
389 if (eq & E_tref_name) {
391 if (get_name() != other.get_name()) {
406 if ((eq & E_complete_filename) == E_complete_filename) {
414 if (eq & E_basename) {
419 if (eq & E_extension) {
424 if (eq & E_dirname) {
431 if (eq & E_transform) {
434 if (is_identity != other_is_identity) {
435 return (
int)is_identity < (int)other_is_identity;
446 if (eq & E_attributes) {
447 if (_texture_type != other._texture_type) {
448 return (
int)_texture_type < (int)other._texture_type;
450 if (_format != other._format) {
451 return (
int)_format < (int)other._format;
453 if (_compression_mode != other._compression_mode) {
454 return (
int)_compression_mode < (int)other._compression_mode;
456 if (_wrap_mode != other._wrap_mode) {
457 return (
int)_wrap_mode < (int)other._wrap_mode;
459 if (_wrap_u != other._wrap_u) {
460 return (
int)_wrap_u < (int)other._wrap_u;
462 if (_wrap_v != other._wrap_v) {
463 return (
int)_wrap_v < (int)other._wrap_v;
465 if (_wrap_w != other._wrap_w) {
466 return (
int)_wrap_w < (int)other._wrap_w;
468 if (_minfilter != other._minfilter) {
469 return (
int)_minfilter < (int)other._minfilter;
471 if (_magfilter != other._magfilter) {
472 return (
int)_magfilter < (int)other._magfilter;
474 if (_anisotropic_degree != other._anisotropic_degree) {
475 return _anisotropic_degree < other._anisotropic_degree;
477 if (_env_type != other._env_type) {
478 return (
int)_env_type < (int)other._env_type;
480 if (EggRenderMode::operator != (other)) {
481 return EggRenderMode::operator < (other);
485 if (eq & E_tref_name) {
486 if (get_name() != other.get_name()) {
487 return get_name() < other.get_name();
520 case F_luminance_alpha:
521 case F_luminance_alphamask:
530 return (num_components == 2 || num_components == 4);
550 case ET_blend_color_scale:
551 case ET_modulate_glow:
552 case ET_modulate_gloss:
554 case ET_normal_height:
558 case ET_normal_gloss:
568 switch (_combiner[CC_alpha]._mode) {
598 _multitexture_sort = 0;
605 orig_over_textures.swap(_over_textures);
606 orig_under_textures.swap(_under_textures);
608 MultiTextures::iterator mti;
609 for (mti = orig_over_textures.begin();
610 mti != orig_over_textures.end();
613 other->_under_textures.erase(
this);
615 for (mti = orig_under_textures.begin();
616 mti != orig_under_textures.end();
619 other->_over_textures.erase(
this);
644 if (_over_textures.insert(other).second) {
645 bool inserted_under = other->_under_textures.insert(
this).second;
646 nassertr(inserted_under,
false);
660 if (cmp_nocase_uh(
string,
"1d") == 0 ||
661 cmp_nocase_uh(
string,
"1dtexture") == 0 ||
662 cmp_nocase_uh(
string,
"1d_texture") == 0) {
663 return TT_1d_texture;
665 }
else if (cmp_nocase_uh(
string,
"2d") == 0 ||
666 cmp_nocase_uh(
string,
"2dtexture") == 0 ||
667 cmp_nocase_uh(
string,
"2d_texture") == 0) {
668 return TT_2d_texture;
670 }
else if (cmp_nocase_uh(
string,
"3d") == 0 ||
671 cmp_nocase_uh(
string,
"3dtexture") == 0 ||
672 cmp_nocase_uh(
string,
"3d_texture") == 0) {
673 return TT_3d_texture;
675 }
else if (cmp_nocase_uh(
string,
"cube") == 0 ||
676 cmp_nocase_uh(
string,
"cubemap") == 0 ||
677 cmp_nocase_uh(
string,
"cube_map") == 0) {
681 return TT_unspecified;
691 if (cmp_nocase_uh(
string,
"rgba") == 0) {
693 }
else if (cmp_nocase_uh(
string,
"rgbm") == 0) {
695 }
else if (cmp_nocase_uh(
string,
"rgba12") == 0) {
697 }
else if (cmp_nocase_uh(
string,
"rgba8") == 0) {
699 }
else if (cmp_nocase_uh(
string,
"rgba4") == 0) {
702 }
else if (cmp_nocase_uh(
string,
"rgb") == 0) {
704 }
else if (cmp_nocase_uh(
string,
"rgb12") == 0) {
706 }
else if (cmp_nocase_uh(
string,
"rgb8") == 0) {
708 }
else if (cmp_nocase_uh(
string,
"rgb5") == 0) {
710 }
else if (cmp_nocase_uh(
string,
"rgba5") == 0) {
712 }
else if (cmp_nocase_uh(
string,
"rgb332") == 0) {
714 }
else if (cmp_nocase_uh(
string,
"red") == 0) {
716 }
else if (cmp_nocase_uh(
string,
"green") == 0) {
718 }
else if (cmp_nocase_uh(
string,
"blue") == 0) {
720 }
else if (cmp_nocase_uh(
string,
"alpha") == 0) {
722 }
else if (cmp_nocase_uh(
string,
"luminance") == 0) {
724 }
else if (cmp_nocase_uh(
string,
"luminance_alpha") == 0) {
725 return F_luminance_alpha;
726 }
else if (cmp_nocase_uh(
string,
"luminance_alphamask") == 0) {
727 return F_luminance_alphamask;
729 return F_unspecified;
740 if (cmp_nocase_uh(
string,
"off") == 0) {
742 }
else if (cmp_nocase_uh(
string,
"on") == 0) {
744 }
else if (cmp_nocase_uh(
string,
"fxt1") == 0) {
746 }
else if (cmp_nocase_uh(
string,
"dxt1") == 0) {
748 }
else if (cmp_nocase_uh(
string,
"dxt2") == 0) {
750 }
else if (cmp_nocase_uh(
string,
"dxt3") == 0) {
752 }
else if (cmp_nocase_uh(
string,
"dxt4") == 0) {
754 }
else if (cmp_nocase_uh(
string,
"dxt5") == 0) {
767 if (cmp_nocase_uh(
string,
"repeat") == 0) {
769 }
else if (cmp_nocase_uh(
string,
"clamp") == 0) {
771 }
else if (cmp_nocase_uh(
string,
"mirror") == 0) {
773 }
else if (cmp_nocase_uh(
string,
"mirror_once") == 0) {
774 return WM_mirror_once;
775 }
else if (cmp_nocase_uh(
string,
"border_color") == 0) {
776 return WM_border_color;
778 return WM_unspecified;
790 if (cmp_nocase_uh(
string,
"point") == 0) {
792 }
else if (cmp_nocase_uh(
string,
"linear") == 0) {
794 }
else if (cmp_nocase_uh(
string,
"bilinear") == 0) {
796 }
else if (cmp_nocase_uh(
string,
"trilinear") == 0) {
797 return FT_linear_mipmap_linear;
798 }
else if (cmp_nocase_uh(
string,
"mipmap") == 0) {
799 return FT_linear_mipmap_linear;
800 }
else if (cmp_nocase_uh(
string,
"mipmap_point") == 0) {
801 return FT_nearest_mipmap_nearest;
802 }
else if (cmp_nocase_uh(
string,
"mipmap_linear") == 0) {
803 return FT_nearest_mipmap_linear;
804 }
else if (cmp_nocase_uh(
string,
"mipmap_bilinear") == 0) {
805 return FT_linear_mipmap_nearest;
806 }
else if (cmp_nocase_uh(
string,
"mipmap_trilinear") == 0) {
807 return FT_linear_mipmap_linear;
810 }
else if (cmp_nocase_uh(
string,
"nearest") == 0) {
812 }
else if (cmp_nocase_uh(
string,
"linear") == 0) {
814 }
else if (cmp_nocase_uh(
string,
"nearest_mipmap_nearest") == 0) {
815 return FT_nearest_mipmap_nearest;
816 }
else if (cmp_nocase_uh(
string,
"linear_mipmap_nearest") == 0) {
817 return FT_linear_mipmap_nearest;
818 }
else if (cmp_nocase_uh(
string,
"nearest_mipmap_linear") == 0) {
819 return FT_nearest_mipmap_linear;
820 }
else if (cmp_nocase_uh(
string,
"linear_mipmap_linear") == 0) {
821 return FT_linear_mipmap_linear;
824 return FT_unspecified;
834 if (cmp_nocase_uh(
string,
"modulate") == 0) {
837 }
else if (cmp_nocase_uh(
string,
"decal") == 0) {
840 }
else if (cmp_nocase_uh(
string,
"blend") == 0) {
843 }
else if (cmp_nocase_uh(
string,
"replace") == 0) {
846 }
else if (cmp_nocase_uh(
string,
"add") == 0) {
849 }
else if (cmp_nocase_uh(
string,
"blend_color_scale") == 0) {
850 return ET_blend_color_scale;
852 }
else if (cmp_nocase_uh(
string,
"modulate_glow") == 0) {
853 return ET_modulate_glow;
855 }
else if (cmp_nocase_uh(
string,
"modulate_gloss") == 0) {
856 return ET_modulate_gloss;
858 }
else if (cmp_nocase_uh(
string,
"normal") == 0) {
861 }
else if (cmp_nocase_uh(
string,
"normal_height") == 0) {
862 return ET_normal_height;
864 }
else if (cmp_nocase_uh(
string,
"glow") == 0) {
867 }
else if (cmp_nocase_uh(
string,
"gloss") == 0) {
870 }
else if (cmp_nocase_uh(
string,
"height") == 0) {
873 }
else if (cmp_nocase_uh(
string,
"selector") == 0) {
876 }
else if (cmp_nocase_uh(
string,
"normal_gloss") == 0) {
877 return ET_normal_gloss;
880 return ET_unspecified;
891 if (cmp_nocase_uh(
string,
"replace") == 0) {
894 }
else if (cmp_nocase_uh(
string,
"modulate") == 0) {
897 }
else if (cmp_nocase_uh(
string,
"add") == 0) {
900 }
else if (cmp_nocase_uh(
string,
"add_signed") == 0) {
901 return CM_add_signed;
903 }
else if (cmp_nocase_uh(
string,
"interpolate") == 0) {
904 return CM_interpolate;
906 }
else if (cmp_nocase_uh(
string,
"subtract") == 0) {
909 }
else if (cmp_nocase_uh(
string,
"dot3_rgb") == 0) {
912 }
else if (cmp_nocase_uh(
string,
"dot3_rgba") == 0) {
916 return CM_unspecified;
927 if (cmp_nocase_uh(
string,
"texture") == 0) {
930 }
else if (cmp_nocase_uh(
string,
"constant") == 0) {
933 }
else if (cmp_nocase_uh(
string,
"primary_color") == 0) {
934 return CS_primary_color;
936 }
else if (cmp_nocase_uh(
string,
"previous") == 0) {
939 }
else if (cmp_nocase_uh(
string,
"constant_color_scale") == 0) {
940 return CS_constant_color_scale;
942 }
else if (cmp_nocase_uh(
string,
"last_saved_result") == 0) {
943 return CS_last_saved_result;
946 return CS_unspecified;
957 if (cmp_nocase_uh(
string,
"src_color") == 0) {
960 }
else if (cmp_nocase_uh(
string,
"one_minus_src_color") == 0) {
961 return CO_one_minus_src_color;
963 }
else if (cmp_nocase_uh(
string,
"src_alpha") == 0) {
966 }
else if (cmp_nocase_uh(
string,
"one_minus_src_alpha") == 0) {
967 return CO_one_minus_src_alpha;
970 return CO_unspecified;
980 if (cmp_nocase_uh(
string,
"unspecified") == 0) {
981 return TG_unspecified;
983 }
else if (cmp_nocase_uh(
string,
"sphere_map") == 0 ||
984 cmp_nocase_uh(
string,
"eye_sphere_map") == 0) {
985 return TG_eye_sphere_map;
987 }
else if (cmp_nocase_uh(
string,
"world_cube_map") == 0) {
988 return TG_world_cube_map;
990 }
else if (cmp_nocase_uh(
string,
"cube_map") == 0 ||
991 cmp_nocase_uh(
string,
"eye_cube_map") == 0) {
992 return TG_eye_cube_map;
994 }
else if (cmp_nocase_uh(
string,
"world_normal") == 0) {
995 return TG_world_normal;
997 }
else if (cmp_nocase_uh(
string,
"eye_normal") == 0) {
998 return TG_eye_normal;
1000 }
else if (cmp_nocase_uh(
string,
"world_position") == 0) {
1001 return TG_world_position;
1003 }
else if (cmp_nocase_uh(
string,
"eye_position") == 0) {
1004 return TG_eye_position;
1006 }
else if (cmp_nocase_uh(
string,
"point_sprite") == 0) {
1007 return TG_point_sprite;
1010 return TG_unspecified;
1020 if (cmp_nocase_uh(
string,
"unspecified") == 0) {
1021 return QL_unspecified;
1023 }
else if (cmp_nocase_uh(
string,
"default") == 0) {
1026 }
else if (cmp_nocase_uh(
string,
"fastest") == 0) {
1029 }
else if (cmp_nocase_uh(
string,
"normal") == 0) {
1032 }
else if (cmp_nocase_uh(
string,
"best") == 0) {
1036 return QL_unspecified;
1056 egg_start_parse_body() {
1057 egg_start_texture_body();
1066 if (_multitexture_sort >= sort) {
1071 if (!cycle_detector.insert(
this).second) {
1076 _multitexture_sort = sort;
1079 bool no_cycles =
true;
1081 MultiTextures::iterator mti;
1082 for (mti = _under_textures.begin();
1083 mti != _under_textures.end();
1086 if (!other->r_min_multitexture_sort(sort + 1, cycle_detector)) {
1099 ostream &operator << (ostream &out, EggTexture::TextureType texture_type) {
1100 switch (texture_type) {
1101 case EggTexture::TT_unspecified:
1102 return out <<
"unspecified";
1104 case EggTexture::TT_1d_texture:
1107 case EggTexture::TT_2d_texture:
1110 case EggTexture::TT_3d_texture:
1113 case EggTexture::TT_cube_map:
1114 return out <<
"cube-map";
1117 nassertr(
false, out);
1118 return out <<
"(**invalid**)";
1125 ostream &operator << (ostream &out, EggTexture::Format format) {
1127 case EggTexture::F_unspecified:
1128 return out <<
"unspecified";
1130 case EggTexture::F_rgba:
1131 return out <<
"rgba";
1132 case EggTexture::F_rgbm:
1133 return out <<
"rgbm";
1134 case EggTexture::F_rgba12:
1135 return out <<
"rgba12";
1136 case EggTexture::F_rgba8:
1137 return out <<
"rgba8";
1138 case EggTexture::F_rgba4:
1139 return out <<
"rgba4";
1141 case EggTexture::F_rgb:
1142 return out <<
"rgb";
1143 case EggTexture::F_rgb12:
1144 return out <<
"rgb12";
1145 case EggTexture::F_rgb8:
1146 return out <<
"rgb8";
1147 case EggTexture::F_rgb5:
1148 return out <<
"rgb5";
1149 case EggTexture::F_rgba5:
1150 return out <<
"rgba5";
1151 case EggTexture::F_rgb332:
1152 return out <<
"rgb332";
1154 case EggTexture::F_red:
1155 return out <<
"red";
1156 case EggTexture::F_green:
1157 return out <<
"green";
1158 case EggTexture::F_blue:
1159 return out <<
"blue";
1160 case EggTexture::F_alpha:
1161 return out <<
"alpha";
1162 case EggTexture::F_luminance:
1163 return out <<
"luminance";
1164 case EggTexture::F_luminance_alpha:
1165 return out <<
"luminance_alpha";
1166 case EggTexture::F_luminance_alphamask:
1167 return out <<
"luminance_alphamask";
1170 nassertr(
false, out);
1171 return out <<
"(**invalid**)";
1177 ostream &operator << (ostream &out, EggTexture::CompressionMode mode) {
1179 case EggTexture::CM_default:
1180 return out <<
"default";
1181 case EggTexture::CM_off:
1182 return out <<
"off";
1183 case EggTexture::CM_on:
1185 case EggTexture::CM_fxt1:
1186 return out <<
"fxt1";
1187 case EggTexture::CM_dxt1:
1188 return out <<
"dxt1";
1189 case EggTexture::CM_dxt2:
1190 return out <<
"dxt2";
1191 case EggTexture::CM_dxt3:
1192 return out <<
"dxt3";
1193 case EggTexture::CM_dxt4:
1194 return out <<
"dxt4";
1195 case EggTexture::CM_dxt5:
1196 return out <<
"dxt5";
1199 nassertr(
false, out);
1200 return out <<
"(**invalid**)";
1206 ostream &operator << (ostream &out, EggTexture::WrapMode mode) {
1208 case EggTexture::WM_unspecified:
1209 return out <<
"unspecified";
1210 case EggTexture::WM_repeat:
1211 return out <<
"repeat";
1212 case EggTexture::WM_clamp:
1213 return out <<
"clamp";
1214 case EggTexture::WM_mirror:
1215 return out <<
"mirror";
1216 case EggTexture::WM_mirror_once:
1217 return out <<
"mirror_once";
1218 case EggTexture::WM_border_color:
1219 return out <<
"border_color";
1222 nassertr(
false, out);
1223 return out <<
"(**invalid**)";
1229 ostream &operator << (ostream &out, EggTexture::FilterType type) {
1231 case EggTexture::FT_unspecified:
1232 return out <<
"unspecified";
1234 case EggTexture::FT_nearest:
1235 return out <<
"nearest";
1236 case EggTexture::FT_linear:
1237 return out <<
"linear";
1239 case EggTexture::FT_nearest_mipmap_nearest:
1240 return out <<
"nearest_mipmap_nearest";
1241 case EggTexture::FT_linear_mipmap_nearest:
1242 return out <<
"linear_mipmap_nearest";
1243 case EggTexture::FT_nearest_mipmap_linear:
1244 return out <<
"nearest_mipmap_linear";
1245 case EggTexture::FT_linear_mipmap_linear:
1246 return out <<
"linear_mipmap_linear";
1249 nassertr(
false, out);
1250 return out <<
"(**invalid**)";
1256 ostream &operator << (ostream &out, EggTexture::EnvType type) {
1258 case EggTexture::ET_unspecified:
1259 return out <<
"unspecified";
1261 case EggTexture::ET_modulate:
1262 return out <<
"modulate";
1264 case EggTexture::ET_decal:
1265 return out <<
"decal";
1267 case EggTexture::ET_blend:
1268 return out <<
"blend";
1270 case EggTexture::ET_replace:
1271 return out <<
"replace";
1273 case EggTexture::ET_add:
1274 return out <<
"add";
1276 case EggTexture::ET_blend_color_scale:
1277 return out <<
"blend_color_scale";
1279 case EggTexture::ET_modulate_glow:
1280 return out <<
"modulate_glow";
1282 case EggTexture::ET_modulate_gloss:
1283 return out <<
"modulate_gloss";
1285 case EggTexture::ET_normal:
1286 return out <<
"normal";
1288 case EggTexture::ET_normal_height:
1289 return out <<
"normal_height";
1291 case EggTexture::ET_glow:
1292 return out <<
"glow";
1294 case EggTexture::ET_gloss:
1295 return out <<
"gloss";
1297 case EggTexture::ET_height:
1298 return out <<
"height";
1300 case EggTexture::ET_selector:
1301 return out <<
"selector";
1303 case EggTexture::ET_normal_gloss:
1304 return out <<
"normal_gloss";
1307 nassertr(
false, out);
1308 return out <<
"(**invalid**)";
1312 operator << (ostream &out, EggTexture::CombineMode cm) {
1314 case EggTexture::CM_unspecified:
1315 return out <<
"unspecified";
1317 case EggTexture::CM_replace:
1318 return out <<
"replace";
1320 case EggTexture::CM_modulate:
1321 return out <<
"modulate";
1323 case EggTexture::CM_add:
1324 return out <<
"add";
1326 case EggTexture::CM_add_signed:
1327 return out <<
"add_signed";
1329 case EggTexture::CM_interpolate:
1330 return out <<
"interpolate";
1332 case EggTexture::CM_subtract:
1333 return out <<
"subtract";
1335 case EggTexture::CM_dot3_rgb:
1336 return out <<
"dot3_rgb";
1338 case EggTexture::CM_dot3_rgba:
1339 return out <<
"dot3_rgba";
1342 return out <<
"**invalid CombineMode(" << (int)cm <<
")**";
1346 operator << (ostream &out, EggTexture::CombineChannel cm) {
1348 case EggTexture::CC_rgb:
1349 return out <<
"rgb";
1351 case EggTexture::CC_alpha:
1352 return out <<
"alpha";
1354 case EggTexture::CC_num_channels:
1360 return out <<
"**invalid CombineChannel(" << (int)cm <<
")**";
1364 operator << (ostream &out, EggTexture::CombineSource cs) {
1366 case EggTexture::CS_unspecified:
1367 return out <<
"unspecified";
1369 case EggTexture::CS_texture:
1370 return out <<
"texture";
1372 case EggTexture::CS_constant:
1373 return out <<
"constant";
1375 case EggTexture::CS_primary_color:
1376 return out <<
"primary_color";
1378 case EggTexture::CS_previous:
1379 return out <<
"previous";
1381 case EggTexture::CS_constant_color_scale:
1382 return out <<
"constant_color_scale";
1384 case EggTexture::CS_last_saved_result:
1385 return out <<
"last_saved_result";
1388 return out <<
"**invalid CombineSource(" << (int)cs <<
")**";
1392 operator << (ostream &out, EggTexture::CombineOperand co) {
1394 case EggTexture::CO_unspecified:
1395 return out <<
"unspecified";
1397 case EggTexture::CO_src_color:
1398 return out <<
"src_color";
1400 case EggTexture::CO_one_minus_src_color:
1401 return out <<
"one_minus_src_color";
1403 case EggTexture::CO_src_alpha:
1404 return out <<
"src_alpha";
1406 case EggTexture::CO_one_minus_src_alpha:
1407 return out <<
"one_minus_src_alpha";
1410 return out <<
"**invalid CombineOperand(" << (int)co <<
")**";
1414 operator << (ostream &out, EggTexture::TexGen tex_gen) {
1416 case EggTexture::TG_unspecified:
1417 return out <<
"unspecified";
1419 case EggTexture::TG_eye_sphere_map:
1420 return out <<
"eye_sphere_map";
1422 case EggTexture::TG_world_cube_map:
1423 return out <<
"world_cube_map";
1425 case EggTexture::TG_eye_cube_map:
1426 return out <<
"eye_cube_map";
1428 case EggTexture::TG_world_normal:
1429 return out <<
"world_normal";
1431 case EggTexture::TG_eye_normal:
1432 return out <<
"eye_normal";
1434 case EggTexture::TG_world_position:
1435 return out <<
"world_position";
1437 case EggTexture::TG_eye_position:
1438 return out <<
"eye_position";
1440 case EggTexture::TG_point_sprite:
1441 return out <<
"point_sprite";
1444 return out <<
"**invalid TexGen(" << (int)tex_gen <<
")**";
1448 operator << (ostream &out, EggTexture::QualityLevel quality_level) {
1449 switch (quality_level) {
1450 case EggTexture::QL_unspecified:
1451 return out <<
"unspecified";
1452 case EggTexture::QL_default:
1453 return out <<
"default";
1454 case EggTexture::QL_fastest:
1455 return out <<
"fastest";
1456 case EggTexture::QL_normal:
1457 return out <<
"normal";
1458 case EggTexture::QL_best:
1459 return out <<
"best";
1462 return out <<
"**invalid QualityLevel(" << (int)quality_level <<
")**";
get_rgb_scale
Returns the rgb_scale value that has been specified for the texture, or 1 if no rgb_scale value has b...
get_stage_name
Returns the stage name that has been specified for this texture, or the tref name if no texture stage...
get_multiview
Returns the current setting of the multiview flag.
std::string get_dirname() const
Returns the directory part of the filename.
const Filename & get_filename() const
Returns a nonmodifiable reference to the filename.
get_alpha_file_channel
Returns the particular channel that has been specified for the alpha-file image, or 0 if no channel h...
void write_header(std::ostream &out, int indent_level, const char *egg_keyword) const
Writes the first line of the egg object, e.g.
has_alpha_scale
Returns true if an alpha_scale has been specified for the texture, false otherwise.
get_uv_name
Returns the texcoord name that has been specified for this texture, or the empty string if no texcoor...
has_priority
Returns true if a priority value for multitexture importance has been specified for the texture,...
bool multitexture_over(EggTexture *other)
Indicates that this texture should be layered on top of the other texture.
This is an egg node that contains a filename.
get_read_mipmaps
Returns the current setting of the read_mipmaps flag.
ostream & enquote_string(ostream &out, const string &str, int indent_level, bool always_quote)
Writes the string to the indicated output stream.
void clear_multitexture()
Resets the multitexture flags set by multitexture_over().
has_alpha_filename
Returns true if a separate file for the alpha component has been applied, false otherwise.
Defines a texture map that may be applied to geometry.
std::string get_basename_wo_extension() const
Returns the basename part of the filename, without the file extension.
has_border_color
Returns true if a border color has been specified for the texture.
get_wrap_u
Returns the amount specified for U wrap.
bool affects_polygon_alpha() const
Returns true if this texture's environment type or combine mode allows the texture to have an effect ...
static QualityLevel string_quality_level(const std::string &string)
Returns the TexGen value associated with the given string representation, or ET_unspecified if the st...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
static WrapMode string_wrap_mode(const std::string &string)
Returns the WrapMode value associated with the given string representation, or WM_unspecified if the ...
virtual EggTransform * as_transform()
Returns this object cross-cast to an EggTransform pointer, if it inherits from EggTransform,...
has_stage_name
Returns true if a stage name has been explicitly specified for this texture, false otherwise.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
has_color
Returns true if a blend color has been specified for the texture.
get_anisotropic_degree
Returns the anisotropic filtering degree that has been specified for this texture,...
The name of a file, such as a texture file or an Egg file.
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
has_anisotropic_degree
Returns true if a value for the anisotropic filtering degree has been specified for this texture,...
static Format string_format(const std::string &string)
Returns the Format value associated with the given string representation, or F_unspecified if the str...
static TextureType string_texture_type(const std::string &string)
Returns the Texture_ype value associated with the given string representation, or TT_unspecified if t...
static EnvType string_env_type(const std::string &string)
Returns the EnvType value associated with the given string representation, or ET_unspecified if the s...
has_rgb_scale
Returns true if an rgb_scale has been specified for the texture, false otherwise.
static CombineOperand string_combine_operand(const std::string &string)
Returns the CombineOperand value associated with the given string representation, or CO_unspecified i...
bool sorts_less_than(const EggTexture &other, int eq) const
An ordering operator to compare two textures for sorting order.
has_alpha_file_channel
Returns true if a particular channel has been specified for the alpha-file image, false otherwise.
void write(std::ostream &out, int indent_level) const
Writes the attributes to the indicated output stream in Egg format.
std::string get_extension() const
Returns the file extension.
get_alpha_filename
Returns the separate file assigned for the alpha channel.
get_wrap_v
Returns the amount specified for V wrap.
get_alpha_scale
Returns the alpha_scale value that has been specified for the texture, or 1 if no alpha_scale value h...
get_priority
Returns the multitexture importance value that has been specified for the texture,...
has_uv_name
Returns true if a texcoord name has been explicitly specified for this texture, false otherwise.
get_saved_result
Returns the current setting of the saved_result flag.
static TexGen string_tex_gen(const std::string &string)
Returns the TexGen value associated with the given string representation, or ET_unspecified if the st...
get_multitexture_sort
Returns an integer that represents the depth to which this texture is layered on all other textures i...
static FilterType string_filter_type(const std::string &string)
Returns the FilterType value associated with the given string representation, or FT_unspecified if th...
get_num_views
Returns the specified number of views specified for the 3-D multiview texture.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bool has_alpha_channel(int num_components) const
Given the number of color components (channels) in the image file as actually read from the disk,...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TypeHandle is the identifier used to differentiate C++ class types.
virtual void write(std::ostream &out, int indent_level) const
Writes the texture definition to the indicated output stream in Egg format.
static CompressionMode string_compression_mode(const std::string &string)
Returns the CompressionMode value associated with the given string representation,...
bool is_equivalent_to(const EggTexture &other, int eq) const
Returns true if the two textures are equivalent in all relevant properties (according to eq),...
static CombineMode string_combine_mode(const std::string &string)
Returns the CombineMode value associated with the given string representation, or CM_unspecified if t...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
static CombineSource string_combine_source(const std::string &string)
Returns the CombineSource value associated with the given string representation, or CS_unspecified if...
get_wrap_w
Returns the amount specified for W wrap.
has_num_views
Returns true if the number of views has been specified for the 3-D multiview texture,...