31EggTexture(
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];
125write(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();
521 case F_luminance_alpha:
522 case F_luminance_alphamask:
532 return (num_components == 2 || num_components == 4);
552 case ET_blend_color_scale:
553 case ET_modulate_glow:
554 case ET_modulate_gloss:
556 case ET_normal_height:
560 case ET_normal_gloss:
571 switch (_combiner[CC_alpha]._mode) {
601 _multitexture_sort = 0;
608 orig_over_textures.swap(_over_textures);
609 orig_under_textures.swap(_under_textures);
611 MultiTextures::iterator mti;
612 for (mti = orig_over_textures.begin();
613 mti != orig_over_textures.end();
616 other->_under_textures.erase(
this);
618 for (mti = orig_under_textures.begin();
619 mti != orig_under_textures.end();
622 other->_over_textures.erase(
this);
647 if (_over_textures.insert(other).second) {
648 bool inserted_under = other->_under_textures.insert(
this).second;
649 nassertr(inserted_under,
false);
663 if (cmp_nocase_uh(
string,
"1d") == 0 ||
664 cmp_nocase_uh(
string,
"1dtexture") == 0 ||
665 cmp_nocase_uh(
string,
"1d_texture") == 0) {
666 return TT_1d_texture;
668 }
else if (cmp_nocase_uh(
string,
"2d") == 0 ||
669 cmp_nocase_uh(
string,
"2dtexture") == 0 ||
670 cmp_nocase_uh(
string,
"2d_texture") == 0) {
671 return TT_2d_texture;
673 }
else if (cmp_nocase_uh(
string,
"3d") == 0 ||
674 cmp_nocase_uh(
string,
"3dtexture") == 0 ||
675 cmp_nocase_uh(
string,
"3d_texture") == 0) {
676 return TT_3d_texture;
678 }
else if (cmp_nocase_uh(
string,
"cube") == 0 ||
679 cmp_nocase_uh(
string,
"cubemap") == 0 ||
680 cmp_nocase_uh(
string,
"cube_map") == 0) {
684 return TT_unspecified;
694 if (cmp_nocase_uh(
string,
"rgba") == 0) {
696 }
else if (cmp_nocase_uh(
string,
"srgb_alpha") == 0) {
698 }
else if (cmp_nocase_uh(
string,
"rgbm") == 0) {
700 }
else if (cmp_nocase_uh(
string,
"rgba12") == 0) {
702 }
else if (cmp_nocase_uh(
string,
"rgba8") == 0) {
704 }
else if (cmp_nocase_uh(
string,
"rgba4") == 0) {
707 }
else if (cmp_nocase_uh(
string,
"rgb") == 0) {
709 }
else if (cmp_nocase_uh(
string,
"srgb") == 0) {
711 }
else if (cmp_nocase_uh(
string,
"rgb12") == 0) {
713 }
else if (cmp_nocase_uh(
string,
"rgb8") == 0) {
715 }
else if (cmp_nocase_uh(
string,
"rgb5") == 0) {
717 }
else if (cmp_nocase_uh(
string,
"rgba5") == 0) {
719 }
else if (cmp_nocase_uh(
string,
"rgb332") == 0) {
721 }
else if (cmp_nocase_uh(
string,
"red") == 0) {
723 }
else if (cmp_nocase_uh(
string,
"green") == 0) {
725 }
else if (cmp_nocase_uh(
string,
"blue") == 0) {
727 }
else if (cmp_nocase_uh(
string,
"alpha") == 0) {
729 }
else if (cmp_nocase_uh(
string,
"luminance") == 0) {
731 }
else if (cmp_nocase_uh(
string,
"luminance_alpha") == 0) {
732 return F_luminance_alpha;
733 }
else if (cmp_nocase_uh(
string,
"luminance_alphamask") == 0) {
734 return F_luminance_alphamask;
736 return F_unspecified;
747 if (cmp_nocase_uh(
string,
"off") == 0) {
749 }
else if (cmp_nocase_uh(
string,
"on") == 0) {
751 }
else if (cmp_nocase_uh(
string,
"fxt1") == 0) {
753 }
else if (cmp_nocase_uh(
string,
"dxt1") == 0) {
755 }
else if (cmp_nocase_uh(
string,
"dxt2") == 0) {
757 }
else if (cmp_nocase_uh(
string,
"dxt3") == 0) {
759 }
else if (cmp_nocase_uh(
string,
"dxt4") == 0) {
761 }
else if (cmp_nocase_uh(
string,
"dxt5") == 0) {
774 if (cmp_nocase_uh(
string,
"repeat") == 0) {
776 }
else if (cmp_nocase_uh(
string,
"clamp") == 0) {
778 }
else if (cmp_nocase_uh(
string,
"mirror") == 0) {
780 }
else if (cmp_nocase_uh(
string,
"mirror_once") == 0) {
781 return WM_mirror_once;
782 }
else if (cmp_nocase_uh(
string,
"border_color") == 0) {
783 return WM_border_color;
785 return WM_unspecified;
797 if (cmp_nocase_uh(
string,
"point") == 0) {
799 }
else if (cmp_nocase_uh(
string,
"linear") == 0) {
801 }
else if (cmp_nocase_uh(
string,
"bilinear") == 0) {
803 }
else if (cmp_nocase_uh(
string,
"trilinear") == 0) {
804 return FT_linear_mipmap_linear;
805 }
else if (cmp_nocase_uh(
string,
"mipmap") == 0) {
806 return FT_linear_mipmap_linear;
807 }
else if (cmp_nocase_uh(
string,
"mipmap_point") == 0) {
808 return FT_nearest_mipmap_nearest;
809 }
else if (cmp_nocase_uh(
string,
"mipmap_linear") == 0) {
810 return FT_nearest_mipmap_linear;
811 }
else if (cmp_nocase_uh(
string,
"mipmap_bilinear") == 0) {
812 return FT_linear_mipmap_nearest;
813 }
else if (cmp_nocase_uh(
string,
"mipmap_trilinear") == 0) {
814 return FT_linear_mipmap_linear;
817 }
else if (cmp_nocase_uh(
string,
"nearest") == 0) {
819 }
else if (cmp_nocase_uh(
string,
"linear") == 0) {
821 }
else if (cmp_nocase_uh(
string,
"nearest_mipmap_nearest") == 0) {
822 return FT_nearest_mipmap_nearest;
823 }
else if (cmp_nocase_uh(
string,
"linear_mipmap_nearest") == 0) {
824 return FT_linear_mipmap_nearest;
825 }
else if (cmp_nocase_uh(
string,
"nearest_mipmap_linear") == 0) {
826 return FT_nearest_mipmap_linear;
827 }
else if (cmp_nocase_uh(
string,
"linear_mipmap_linear") == 0) {
828 return FT_linear_mipmap_linear;
831 return FT_unspecified;
841 if (cmp_nocase_uh(
string,
"modulate") == 0) {
844 }
else if (cmp_nocase_uh(
string,
"decal") == 0) {
847 }
else if (cmp_nocase_uh(
string,
"blend") == 0) {
850 }
else if (cmp_nocase_uh(
string,
"replace") == 0) {
853 }
else if (cmp_nocase_uh(
string,
"add") == 0) {
856 }
else if (cmp_nocase_uh(
string,
"blend_color_scale") == 0) {
857 return ET_blend_color_scale;
859 }
else if (cmp_nocase_uh(
string,
"modulate_glow") == 0) {
860 return ET_modulate_glow;
862 }
else if (cmp_nocase_uh(
string,
"modulate_gloss") == 0) {
863 return ET_modulate_gloss;
865 }
else if (cmp_nocase_uh(
string,
"normal") == 0) {
868 }
else if (cmp_nocase_uh(
string,
"normal_height") == 0) {
869 return ET_normal_height;
871 }
else if (cmp_nocase_uh(
string,
"glow") == 0) {
874 }
else if (cmp_nocase_uh(
string,
"gloss") == 0) {
877 }
else if (cmp_nocase_uh(
string,
"height") == 0) {
880 }
else if (cmp_nocase_uh(
string,
"selector") == 0) {
883 }
else if (cmp_nocase_uh(
string,
"normal_gloss") == 0) {
884 return ET_normal_gloss;
886 }
else if (cmp_nocase_uh(
string,
"emission") == 0) {
890 return ET_unspecified;
901 if (cmp_nocase_uh(
string,
"replace") == 0) {
904 }
else if (cmp_nocase_uh(
string,
"modulate") == 0) {
907 }
else if (cmp_nocase_uh(
string,
"add") == 0) {
910 }
else if (cmp_nocase_uh(
string,
"add_signed") == 0) {
911 return CM_add_signed;
913 }
else if (cmp_nocase_uh(
string,
"interpolate") == 0) {
914 return CM_interpolate;
916 }
else if (cmp_nocase_uh(
string,
"subtract") == 0) {
919 }
else if (cmp_nocase_uh(
string,
"dot3_rgb") == 0) {
922 }
else if (cmp_nocase_uh(
string,
"dot3_rgba") == 0) {
926 return CM_unspecified;
937 if (cmp_nocase_uh(
string,
"texture") == 0) {
940 }
else if (cmp_nocase_uh(
string,
"constant") == 0) {
943 }
else if (cmp_nocase_uh(
string,
"primary_color") == 0) {
944 return CS_primary_color;
946 }
else if (cmp_nocase_uh(
string,
"previous") == 0) {
949 }
else if (cmp_nocase_uh(
string,
"constant_color_scale") == 0) {
950 return CS_constant_color_scale;
952 }
else if (cmp_nocase_uh(
string,
"last_saved_result") == 0) {
953 return CS_last_saved_result;
956 return CS_unspecified;
967 if (cmp_nocase_uh(
string,
"src_color") == 0) {
970 }
else if (cmp_nocase_uh(
string,
"one_minus_src_color") == 0) {
971 return CO_one_minus_src_color;
973 }
else if (cmp_nocase_uh(
string,
"src_alpha") == 0) {
976 }
else if (cmp_nocase_uh(
string,
"one_minus_src_alpha") == 0) {
977 return CO_one_minus_src_alpha;
980 return CO_unspecified;
990 if (cmp_nocase_uh(
string,
"unspecified") == 0) {
991 return TG_unspecified;
993 }
else if (cmp_nocase_uh(
string,
"sphere_map") == 0 ||
994 cmp_nocase_uh(
string,
"eye_sphere_map") == 0) {
995 return TG_eye_sphere_map;
997 }
else if (cmp_nocase_uh(
string,
"world_cube_map") == 0) {
998 return TG_world_cube_map;
1000 }
else if (cmp_nocase_uh(
string,
"cube_map") == 0 ||
1001 cmp_nocase_uh(
string,
"eye_cube_map") == 0) {
1002 return TG_eye_cube_map;
1004 }
else if (cmp_nocase_uh(
string,
"world_normal") == 0) {
1005 return TG_world_normal;
1007 }
else if (cmp_nocase_uh(
string,
"eye_normal") == 0) {
1008 return TG_eye_normal;
1010 }
else if (cmp_nocase_uh(
string,
"world_position") == 0) {
1011 return TG_world_position;
1013 }
else if (cmp_nocase_uh(
string,
"eye_position") == 0) {
1014 return TG_eye_position;
1016 }
else if (cmp_nocase_uh(
string,
"point_sprite") == 0) {
1017 return TG_point_sprite;
1020 return TG_unspecified;
1030 if (cmp_nocase_uh(
string,
"unspecified") == 0) {
1031 return QL_unspecified;
1033 }
else if (cmp_nocase_uh(
string,
"default") == 0) {
1036 }
else if (cmp_nocase_uh(
string,
"fastest") == 0) {
1039 }
else if (cmp_nocase_uh(
string,
"normal") == 0) {
1042 }
else if (cmp_nocase_uh(
string,
"best") == 0) {
1046 return QL_unspecified;
1066egg_start_parse_body() {
1067 egg_start_texture_body();
1076 if (_multitexture_sort >= sort) {
1081 if (!cycle_detector.insert(
this).second) {
1086 _multitexture_sort = sort;
1089 bool no_cycles =
true;
1091 MultiTextures::iterator mti;
1092 for (mti = _under_textures.begin();
1093 mti != _under_textures.end();
1096 if (!other->r_min_multitexture_sort(sort + 1, cycle_detector)) {
1109ostream &operator << (ostream &out, EggTexture::TextureType texture_type) {
1110 switch (texture_type) {
1111 case EggTexture::TT_unspecified:
1112 return out <<
"unspecified";
1114 case EggTexture::TT_1d_texture:
1117 case EggTexture::TT_2d_texture:
1120 case EggTexture::TT_3d_texture:
1123 case EggTexture::TT_cube_map:
1124 return out <<
"cube-map";
1127 nassertr(
false, out);
1128 return out <<
"(**invalid**)";
1135ostream &operator << (ostream &out, EggTexture::Format format) {
1137 case EggTexture::F_unspecified:
1138 return out <<
"unspecified";
1140 case EggTexture::F_rgba:
1141 return out <<
"rgba";
1142 case EggTexture::F_rgbm:
1143 return out <<
"rgbm";
1144 case EggTexture::F_rgba12:
1145 return out <<
"rgba12";
1146 case EggTexture::F_rgba8:
1147 return out <<
"rgba8";
1148 case EggTexture::F_rgba4:
1149 return out <<
"rgba4";
1150 case EggTexture::F_srgb_alpha:
1151 return out <<
"srgb_alpha";
1153 case EggTexture::F_rgb:
1154 return out <<
"rgb";
1155 case EggTexture::F_rgb12:
1156 return out <<
"rgb12";
1157 case EggTexture::F_rgb8:
1158 return out <<
"rgb8";
1159 case EggTexture::F_rgb5:
1160 return out <<
"rgb5";
1161 case EggTexture::F_rgba5:
1162 return out <<
"rgba5";
1163 case EggTexture::F_rgb332:
1164 return out <<
"rgb332";
1165 case EggTexture::F_srgb:
1166 return out <<
"srgb";
1168 case EggTexture::F_red:
1169 return out <<
"red";
1170 case EggTexture::F_green:
1171 return out <<
"green";
1172 case EggTexture::F_blue:
1173 return out <<
"blue";
1174 case EggTexture::F_alpha:
1175 return out <<
"alpha";
1176 case EggTexture::F_luminance:
1177 return out <<
"luminance";
1178 case EggTexture::F_luminance_alpha:
1179 return out <<
"luminance_alpha";
1180 case EggTexture::F_luminance_alphamask:
1181 return out <<
"luminance_alphamask";
1184 nassertr(
false, out);
1185 return out <<
"(**invalid**)";
1191ostream &operator << (ostream &out, EggTexture::CompressionMode mode) {
1193 case EggTexture::CM_default:
1194 return out <<
"default";
1195 case EggTexture::CM_off:
1196 return out <<
"off";
1197 case EggTexture::CM_on:
1199 case EggTexture::CM_fxt1:
1200 return out <<
"fxt1";
1201 case EggTexture::CM_dxt1:
1202 return out <<
"dxt1";
1203 case EggTexture::CM_dxt2:
1204 return out <<
"dxt2";
1205 case EggTexture::CM_dxt3:
1206 return out <<
"dxt3";
1207 case EggTexture::CM_dxt4:
1208 return out <<
"dxt4";
1209 case EggTexture::CM_dxt5:
1210 return out <<
"dxt5";
1213 nassertr(
false, out);
1214 return out <<
"(**invalid**)";
1220ostream &operator << (ostream &out, EggTexture::WrapMode mode) {
1222 case EggTexture::WM_unspecified:
1223 return out <<
"unspecified";
1224 case EggTexture::WM_repeat:
1225 return out <<
"repeat";
1226 case EggTexture::WM_clamp:
1227 return out <<
"clamp";
1228 case EggTexture::WM_mirror:
1229 return out <<
"mirror";
1230 case EggTexture::WM_mirror_once:
1231 return out <<
"mirror_once";
1232 case EggTexture::WM_border_color:
1233 return out <<
"border_color";
1236 nassertr(
false, out);
1237 return out <<
"(**invalid**)";
1243ostream &operator << (ostream &out, EggTexture::FilterType type) {
1245 case EggTexture::FT_unspecified:
1246 return out <<
"unspecified";
1248 case EggTexture::FT_nearest:
1249 return out <<
"nearest";
1250 case EggTexture::FT_linear:
1251 return out <<
"linear";
1253 case EggTexture::FT_nearest_mipmap_nearest:
1254 return out <<
"nearest_mipmap_nearest";
1255 case EggTexture::FT_linear_mipmap_nearest:
1256 return out <<
"linear_mipmap_nearest";
1257 case EggTexture::FT_nearest_mipmap_linear:
1258 return out <<
"nearest_mipmap_linear";
1259 case EggTexture::FT_linear_mipmap_linear:
1260 return out <<
"linear_mipmap_linear";
1263 nassertr(
false, out);
1264 return out <<
"(**invalid**)";
1270ostream &operator << (ostream &out, EggTexture::EnvType type) {
1272 case EggTexture::ET_unspecified:
1273 return out <<
"unspecified";
1275 case EggTexture::ET_modulate:
1276 return out <<
"modulate";
1278 case EggTexture::ET_decal:
1279 return out <<
"decal";
1281 case EggTexture::ET_blend:
1282 return out <<
"blend";
1284 case EggTexture::ET_replace:
1285 return out <<
"replace";
1287 case EggTexture::ET_add:
1288 return out <<
"add";
1290 case EggTexture::ET_blend_color_scale:
1291 return out <<
"blend_color_scale";
1293 case EggTexture::ET_modulate_glow:
1294 return out <<
"modulate_glow";
1296 case EggTexture::ET_modulate_gloss:
1297 return out <<
"modulate_gloss";
1299 case EggTexture::ET_normal:
1300 return out <<
"normal";
1302 case EggTexture::ET_normal_height:
1303 return out <<
"normal_height";
1305 case EggTexture::ET_glow:
1306 return out <<
"glow";
1308 case EggTexture::ET_gloss:
1309 return out <<
"gloss";
1311 case EggTexture::ET_height:
1312 return out <<
"height";
1314 case EggTexture::ET_selector:
1315 return out <<
"selector";
1317 case EggTexture::ET_normal_gloss:
1318 return out <<
"normal_gloss";
1320 case EggTexture::ET_emission:
1321 return out <<
"emission";
1324 nassertr(
false, out);
1325 return out <<
"(**invalid**)";
1329operator << (ostream &out, EggTexture::CombineMode cm) {
1331 case EggTexture::CM_unspecified:
1332 return out <<
"unspecified";
1334 case EggTexture::CM_replace:
1335 return out <<
"replace";
1337 case EggTexture::CM_modulate:
1338 return out <<
"modulate";
1340 case EggTexture::CM_add:
1341 return out <<
"add";
1343 case EggTexture::CM_add_signed:
1344 return out <<
"add_signed";
1346 case EggTexture::CM_interpolate:
1347 return out <<
"interpolate";
1349 case EggTexture::CM_subtract:
1350 return out <<
"subtract";
1352 case EggTexture::CM_dot3_rgb:
1353 return out <<
"dot3_rgb";
1355 case EggTexture::CM_dot3_rgba:
1356 return out <<
"dot3_rgba";
1359 return out <<
"**invalid CombineMode(" << (int)cm <<
")**";
1363operator << (ostream &out, EggTexture::CombineChannel cm) {
1365 case EggTexture::CC_rgb:
1366 return out <<
"rgb";
1368 case EggTexture::CC_alpha:
1369 return out <<
"alpha";
1371 case EggTexture::CC_num_channels:
1377 return out <<
"**invalid CombineChannel(" << (int)cm <<
")**";
1381operator << (ostream &out, EggTexture::CombineSource cs) {
1383 case EggTexture::CS_unspecified:
1384 return out <<
"unspecified";
1386 case EggTexture::CS_texture:
1387 return out <<
"texture";
1389 case EggTexture::CS_constant:
1390 return out <<
"constant";
1392 case EggTexture::CS_primary_color:
1393 return out <<
"primary_color";
1395 case EggTexture::CS_previous:
1396 return out <<
"previous";
1398 case EggTexture::CS_constant_color_scale:
1399 return out <<
"constant_color_scale";
1401 case EggTexture::CS_last_saved_result:
1402 return out <<
"last_saved_result";
1405 return out <<
"**invalid CombineSource(" << (int)cs <<
")**";
1409operator << (ostream &out, EggTexture::CombineOperand co) {
1411 case EggTexture::CO_unspecified:
1412 return out <<
"unspecified";
1414 case EggTexture::CO_src_color:
1415 return out <<
"src_color";
1417 case EggTexture::CO_one_minus_src_color:
1418 return out <<
"one_minus_src_color";
1420 case EggTexture::CO_src_alpha:
1421 return out <<
"src_alpha";
1423 case EggTexture::CO_one_minus_src_alpha:
1424 return out <<
"one_minus_src_alpha";
1427 return out <<
"**invalid CombineOperand(" << (int)co <<
")**";
1431operator << (ostream &out, EggTexture::TexGen tex_gen) {
1433 case EggTexture::TG_unspecified:
1434 return out <<
"unspecified";
1436 case EggTexture::TG_eye_sphere_map:
1437 return out <<
"eye_sphere_map";
1439 case EggTexture::TG_world_cube_map:
1440 return out <<
"world_cube_map";
1442 case EggTexture::TG_eye_cube_map:
1443 return out <<
"eye_cube_map";
1445 case EggTexture::TG_world_normal:
1446 return out <<
"world_normal";
1448 case EggTexture::TG_eye_normal:
1449 return out <<
"eye_normal";
1451 case EggTexture::TG_world_position:
1452 return out <<
"world_position";
1454 case EggTexture::TG_eye_position:
1455 return out <<
"eye_position";
1457 case EggTexture::TG_point_sprite:
1458 return out <<
"point_sprite";
1461 return out <<
"**invalid TexGen(" << (int)tex_gen <<
")**";
1465operator << (ostream &out, EggTexture::QualityLevel quality_level) {
1466 switch (quality_level) {
1467 case EggTexture::QL_unspecified:
1468 return out <<
"unspecified";
1469 case EggTexture::QL_default:
1470 return out <<
"default";
1471 case EggTexture::QL_fastest:
1472 return out <<
"fastest";
1473 case EggTexture::QL_normal:
1474 return out <<
"normal";
1475 case EggTexture::QL_best:
1476 return out <<
"best";
1479 return out <<
"**invalid QualityLevel(" << (int)quality_level <<
")**";
This is an egg node that contains a filename.
const Filename & get_filename() const
Returns a nonmodifiable reference to the filename.
void write_header(std::ostream &out, int indent_level, const char *egg_keyword) const
Writes the first line of the egg object, e.g.
void write(std::ostream &out, int indent_level) const
Writes the attributes to the indicated output stream in Egg format.
Defines a texture map that may be applied to geometry.
static CombineOperand string_combine_operand(const std::string &string)
Returns the CombineOperand value associated with the given string representation, or CO_unspecified i...
get_stage_name
Returns the stage name that has been specified for this texture, or the tref name if no texture stage...
get_read_mipmaps
Returns the current setting of the read_mipmaps flag.
has_uv_name
Returns true if a texcoord name has been explicitly specified for this texture, false otherwise.
get_alpha_scale
Returns the alpha_scale value that has been specified for the texture, or 1 if no alpha_scale value h...
get_wrap_w
Returns the amount specified for W wrap.
get_uv_name
Returns the texcoord name that has been specified for this texture, or the empty string if no texcoor...
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...
static CombineSource string_combine_source(const std::string &string)
Returns the CombineSource value associated with the given string representation, or CS_unspecified if...
get_multiview
Returns the current setting of the multiview flag.
get_multitexture_sort
Returns an integer that represents the depth to which this texture is layered on all other textures i...
has_num_views
Returns true if the number of views has been specified for the 3-D multiview texture,...
virtual EggTransform * as_transform()
Returns this object cross-cast to an EggTransform pointer, if it inherits from EggTransform,...
get_alpha_file_channel
Returns the particular channel that has been specified for the alpha-file image, or 0 if no channel h...
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...
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...
get_wrap_u
Returns the amount specified for U wrap.
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...
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,...
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 FilterType string_filter_type(const std::string &string)
Returns the FilterType value associated with the given string representation, or FT_unspecified if th...
static CombineMode string_combine_mode(const std::string &string)
Returns the CombineMode value associated with the given string representation, or CM_unspecified if t...
bool multitexture_over(EggTexture *other)
Indicates that this texture should be layered on top of the other texture.
get_anisotropic_degree
Returns the anisotropic filtering degree that has been specified for this texture,...
has_color
Returns true if a blend color has been specified for the texture.
get_alpha_filename
Returns the separate file assigned for the alpha channel.
has_alpha_file_channel
Returns true if a particular channel has been specified for the alpha-file image, false otherwise.
virtual void write(std::ostream &out, int indent_level) const
Writes the texture definition to the indicated output stream in Egg format.
has_priority
Returns true if a priority value for multitexture importance has been specified for the texture,...
bool affects_polygon_alpha() const
Returns true if this texture's environment type or combine mode allows the texture to have an effect ...
has_rgb_scale
Returns true if an rgb_scale has been specified for the texture, false otherwise.
void clear_multitexture()
Resets the multitexture flags set by multitexture_over().
bool sorts_less_than(const EggTexture &other, int eq) const
An ordering operator to compare two textures for sorting order.
has_alpha_scale
Returns true if an alpha_scale has been specified for the texture, false otherwise.
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...
static CompressionMode string_compression_mode(const std::string &string)
Returns the CompressionMode value associated with the given string representation,...
get_wrap_v
Returns the amount specified for V wrap.
get_rgb_scale
Returns the rgb_scale value that has been specified for the texture, or 1 if no rgb_scale value has b...
static WrapMode string_wrap_mode(const std::string &string)
Returns the WrapMode value associated with the given string representation, or WM_unspecified if the ...
has_border_color
Returns true if a border color has been specified for the texture.
get_priority
Returns the multitexture importance value that has been specified for the texture,...
has_stage_name
Returns true if a stage name has been explicitly specified for this texture, false otherwise.
has_alpha_filename
Returns true if a separate file for the alpha component has been applied, false otherwise.
get_num_views
Returns the specified number of views specified for the 3-D multiview texture.
get_saved_result
Returns the current setting of the saved_result flag.
The name of a file, such as a texture file or an Egg file.
std::string get_extension() const
Returns the file extension.
std::string get_basename_wo_extension() const
Returns the basename part of the filename, without the file extension.
std::string get_dirname() const
Returns the directory part of the filename.
TypeHandle is the identifier used to differentiate C++ class types.
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
ostream & enquote_string(ostream &out, const string &str, int indent_level, bool always_quote)
Writes the string to the indicated output stream.
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.