@@ -750,6 +750,7 @@ convert_primitive(const GeomVertexData *vertex_data,
750
750
const LMatrix4 &net_mat, EggGroupNode *egg_parent,
751
751
CharacterJointMap *joint_map) {
752
752
GeomVertexReader reader (vertex_data);
753
+ const GeomVertexFormat *format = vertex_data->get_format ();
753
754
754
755
// Make a zygote that will be duplicated for each primitive.
755
756
PT (EggPrimitive) egg_prim;
@@ -808,14 +809,14 @@ convert_primitive(const GeomVertexData *vertex_data,
808
809
// Check for a texture.
809
810
const TextureAttrib *ta;
810
811
if (net_state->get_attrib (ta)) {
811
- EggTexture *egg_tex = get_egg_texture (ta->get_texture ());
812
+ for (size_t i = 0 ; i < ta->get_num_on_stages (); ++i) {
813
+ TextureStage *tex_stage = ta->get_on_stage (i);
812
814
813
- if (egg_tex != nullptr ) {
814
- TextureStage *tex_stage = ta->get_on_stage (0 );
815
- if (tex_stage != nullptr ) {
815
+ EggTexture *egg_tex = get_egg_texture (ta->get_on_texture (tex_stage));
816
+ if (egg_tex != nullptr ) {
816
817
switch (tex_stage->get_mode ()) {
817
818
case TextureStage::M_modulate:
818
- if (has_color_off == true ) {
819
+ if (has_color_off == true && i == 0 ) {
819
820
egg_tex->set_env_type (EggTexture::ET_replace);
820
821
} else {
821
822
egg_tex->set_env_type (EggTexture::ET_modulate);
@@ -836,12 +837,44 @@ convert_primitive(const GeomVertexData *vertex_data,
836
837
case TextureStage::M_blend_color_scale:
837
838
egg_tex->set_env_type (EggTexture::ET_blend_color_scale);
838
839
break ;
840
+ case TextureStage::M_modulate_glow:
841
+ egg_tex->set_env_type (EggTexture::ET_modulate_glow);
842
+ break ;
843
+ case TextureStage::M_modulate_gloss:
844
+ egg_tex->set_env_type (EggTexture::ET_modulate_gloss);
845
+ break ;
846
+ case TextureStage::M_normal:
847
+ egg_tex->set_env_type (EggTexture::ET_normal);
848
+ break ;
849
+ case TextureStage::M_normal_height:
850
+ egg_tex->set_env_type (EggTexture::ET_normal_height);
851
+ break ;
852
+ case TextureStage::M_glow:
853
+ egg_tex->set_env_type (EggTexture::ET_glow);
854
+ break ;
855
+ case TextureStage::M_gloss:
856
+ egg_tex->set_env_type (EggTexture::ET_gloss);
857
+ break ;
858
+ case TextureStage::M_height:
859
+ egg_tex->set_env_type (EggTexture::ET_height);
860
+ break ;
861
+ case TextureStage::M_selector:
862
+ egg_tex->set_env_type (EggTexture::ET_selector);
863
+ break ;
864
+ case TextureStage::M_normal_gloss:
865
+ egg_tex->set_env_type (EggTexture::ET_normal_gloss);
866
+ break ;
839
867
default :
840
868
break ;
841
869
}
842
- }
843
870
844
- egg_prim->set_texture (egg_tex);
871
+ const InternalName *name = tex_stage->get_texcoord_name ();
872
+ if (name != nullptr && name != InternalName::get_texcoord ()) {
873
+ egg_tex->set_uv_name (name->get_basename ());
874
+ }
875
+
876
+ egg_prim->add_texture (egg_tex);
877
+ }
845
878
}
846
879
}
847
880
@@ -906,10 +939,15 @@ convert_primitive(const GeomVertexData *vertex_data,
906
939
color[3 ] * color_scale[3 ]));
907
940
}
908
941
909
- if (vertex_data->has_column (InternalName::get_texcoord ())) {
910
- reader.set_column (InternalName::get_texcoord ());
942
+ for (size_t ti = 0 ; ti < format->get_num_texcoords (); ++ti) {
943
+ const InternalName *texcoord_name = format->get_texcoord (ti);
944
+ reader.set_column (texcoord_name);
911
945
LTexCoord uv = reader.get_data2 ();
912
- egg_vert.set_uv (LCAST (double , uv));
946
+ if (texcoord_name == InternalName::get_texcoord ()) {
947
+ egg_vert.set_uv (LCAST (double , uv));
948
+ } else {
949
+ egg_vert.set_uv (texcoord_name->get_basename (), LCAST (double , uv));
950
+ }
913
951
}
914
952
915
953
EggVertex *new_egg_vert = _vpool->create_unique_vertex (egg_vert);
0 commit comments