Procházet zdrojové kódy

fix problem with uniform color

David Rose před 21 roky
rodič
revize
8ceea8d5bc

+ 7 - 1
panda/src/egg/eggCompositePrimitive.cxx

@@ -254,7 +254,8 @@ unify_attributes(EggPrimitive::Shading shading) {
     {
       iterator pi;
       for (pi = begin(); pi != end(); ++pi) {
-        EggVertex *vertex = (*pi);
+        EggVertex *orig_vertex = (*pi);
+        PT(EggVertex) vertex = new EggVertex(*orig_vertex);
         if (vertex->has_normal()) {
           if (!has_normal()) {
             copy_normal(*vertex);
@@ -267,6 +268,11 @@ unify_attributes(EggPrimitive::Shading shading) {
           }
           vertex->clear_color();
         }
+
+        EggVertexPool *vertex_pool = orig_vertex->get_pool();
+        nassertv(vertex_pool != (EggVertexPool *)NULL);
+        vertex = vertex_pool->create_unique_vertex(*vertex);
+        replace(pi, vertex);
       }
       Components::iterator ci;
       for (ci = _components.begin(); ci != _components.end(); ++ci) {

+ 1 - 1
panda/src/egg/eggMesher.cxx

@@ -194,7 +194,7 @@ add_polygon(const EggPolygon *egg_poly, EggMesherStrip::MesherOrigin origin) {
     for (ci = temp_group->begin(); ci != temp_group->end(); ++ci) {
       add_polygon(DCAST(EggPolygon, *ci), EggMesherStrip::MO_user);
     }
-    return true;
+    return result;
   }
 
   if (_vertex_pool == NULL) {

+ 7 - 1
panda/src/egg/eggPrimitive.cxx

@@ -388,7 +388,8 @@ unify_attributes(EggPrimitive::Shading shading) {
     {
       iterator pi;
       for (pi = begin(); pi != end(); ++pi) {
-        EggVertex *vertex = (*pi);
+        EggVertex *orig_vertex = (*pi);
+        PT(EggVertex) vertex = new EggVertex(*orig_vertex);
         if (vertex->has_normal()) {
           if (!has_normal()) {
             copy_normal(*vertex);
@@ -401,6 +402,11 @@ unify_attributes(EggPrimitive::Shading shading) {
           }
           vertex->clear_color();
         }
+
+        EggVertexPool *vertex_pool = orig_vertex->get_pool();
+        nassertv(vertex_pool != (EggVertexPool *)NULL);
+        vertex = vertex_pool->create_unique_vertex(*vertex);
+        replace(pi, vertex);
       }
     }
     break;