Skip to content

Commit 9966dda

Browse files
committed
bam2egg: support multitexturing, multiple UV sets
1 parent ebd538a commit 9966dda

File tree

1 file changed

+48
-10
lines changed

1 file changed

+48
-10
lines changed

panda/src/egg2pg/eggSaver.cxx

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,7 @@ convert_primitive(const GeomVertexData *vertex_data,
750750
const LMatrix4 &net_mat, EggGroupNode *egg_parent,
751751
CharacterJointMap *joint_map) {
752752
GeomVertexReader reader(vertex_data);
753+
const GeomVertexFormat *format = vertex_data->get_format();
753754

754755
// Make a zygote that will be duplicated for each primitive.
755756
PT(EggPrimitive) egg_prim;
@@ -808,14 +809,14 @@ convert_primitive(const GeomVertexData *vertex_data,
808809
// Check for a texture.
809810
const TextureAttrib *ta;
810811
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);
812814

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) {
816817
switch (tex_stage->get_mode()) {
817818
case TextureStage::M_modulate:
818-
if (has_color_off == true) {
819+
if (has_color_off == true && i == 0) {
819820
egg_tex->set_env_type(EggTexture::ET_replace);
820821
} else {
821822
egg_tex->set_env_type(EggTexture::ET_modulate);
@@ -836,12 +837,44 @@ convert_primitive(const GeomVertexData *vertex_data,
836837
case TextureStage::M_blend_color_scale:
837838
egg_tex->set_env_type(EggTexture::ET_blend_color_scale);
838839
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;
839867
default:
840868
break;
841869
}
842-
}
843870

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+
}
845878
}
846879
}
847880

@@ -906,10 +939,15 @@ convert_primitive(const GeomVertexData *vertex_data,
906939
color[3] * color_scale[3]));
907940
}
908941

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);
911945
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+
}
913951
}
914952

915953
EggVertex *new_egg_vert = _vpool->create_unique_vertex(egg_vert);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy