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();
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;
1066 egg_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)) {
1109 ostream &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**)";
1135 ostream &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**)";
1191 ostream &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**)";
1220 ostream &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**)";
1243 ostream &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**)";
1270 ostream &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**)";
1329 operator << (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 <<
")**";
1363 operator << (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 <<
")**";
1381 operator << (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 <<
")**";
1409 operator << (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 <<
")**";
1431 operator << (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 <<
")**";
1465 operator << (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.
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.
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.