Revision: 57759
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57759
Author:   kupoman
Date:     2013-06-26 06:16:39 +0000 (Wed, 26 Jun 2013)
Log Message:
-----------
Material level of detail is now working. Material levels of detail appear in 
all editing modes (sculpt, edit, etc).

Modified Paths:
--------------
    branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h
    branches/soc-2013-bge/source/blender/blenkernel/intern/material.c
    branches/soc-2013-bge/source/blender/blenkernel/intern/object.c
    branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c

Modified: branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h        
2013-06-26 05:45:36 UTC (rev 57758)
+++ branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h        
2013-06-26 06:16:39 UTC (rev 57759)
@@ -87,7 +87,9 @@
 void BKE_object_lod_add(struct Object *ob);
 void BKE_object_lod_remove(struct Object *ob, int level);
 void BKE_object_lod_update(struct Object *ob, float camera_position[3]);
+bool BKE_object_lod_check(struct Object *ob, struct Scene *scene);
 struct Object *BKE_object_lod_meshob_get(struct Object *ob);
+struct Object *BKE_object_lod_matob_get(struct Object *ob);
 
 struct Object *BKE_object_copy_ex(struct Main *bmain, struct Object *ob, int 
copy_caches);
 struct Object *BKE_object_copy(struct Object *ob);

Modified: branches/soc-2013-bge/source/blender/blenkernel/intern/material.c
===================================================================
--- branches/soc-2013-bge/source/blender/blenkernel/intern/material.c   
2013-06-26 05:45:36 UTC (rev 57758)
+++ branches/soc-2013-bge/source/blender/blenkernel/intern/material.c   
2013-06-26 06:16:39 UTC (rev 57759)
@@ -64,6 +64,7 @@
 #include "BKE_material.h"
 #include "BKE_mesh.h"
 #include "BKE_node.h"
+#include "BKE_object.h"
 #include "BKE_curve.h"
 
 #include "GPU_material.h"
@@ -623,6 +624,9 @@
        short *totcolp;
        
        if (ob == NULL) return NULL;
+       if (BKE_object_lod_check(ob, NULL)) {
+               ob = BKE_object_lod_matob_get(ob);
+       }
        
        /* if object cannot have material, (totcolp == NULL) */
        totcolp = give_totcolp(ob);

Modified: branches/soc-2013-bge/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2013-bge/source/blender/blenkernel/intern/object.c     
2013-06-26 05:45:36 UTC (rev 57758)
+++ branches/soc-2013-bge/source/blender/blenkernel/intern/object.c     
2013-06-26 06:16:39 UTC (rev 57759)
@@ -987,6 +987,12 @@
        return current;
 }
 
+bool BKE_object_lod_check(struct Object *ob, struct Scene *scene)
+{
+       bool active = (scene) ? ob == OBACT : 0;
+       return (ob->mode == OB_MODE_OBJECT || !active);
+}
+
 void BKE_object_lod_update(struct Object *ob, float camera_position[3])
 {
        LodLevel* cur_level = ob->currentlod;
@@ -1009,6 +1015,17 @@
        return current->source;
 }
 
+struct Object *BKE_object_lod_matob_get(struct Object *ob)
+{
+       LodLevel *current = ob->currentlod;
+
+       while( current->prev && (!current->use_mat || current->source->type != 
OB_MESH)) {
+               current = current->prev;
+       }
+
+       return current->source;
+}
+
 SoftBody *copy_softbody(SoftBody *sb, int copy_caches)
 {
        SoftBody *sbn;

Modified: branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c      
2013-06-26 05:45:36 UTC (rev 57758)
+++ branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c      
2013-06-26 06:16:39 UTC (rev 57759)
@@ -3231,9 +3231,8 @@
        DerivedMesh *dm = mesh_get_derived_final(scene, ob, 
scene->customdata_mask);
        const bool is_obact = (ob == OBACT);
        int draw_flags = (is_obact && paint_facesel_test(ob)) ? 
DRAW_FACE_SELECT : 0;
-       bool draw_lod = (ob->mode == OB_MODE_OBJECT || !is_obact);
 
-       if (draw_lod) {
+       if (BKE_object_lod_check(ob, scene)) {
                ob = BKE_object_lod_meshob_get(ob);
                me = ob->data;
                dm->release(dm);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to