Revision: 21208
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21208
Author:   yukishiro
Date:     2009-06-28 05:01:08 +0200 (Sun, 28 Jun 2009)

Log Message:
-----------
fix crash after applying modifiers

Modified Paths:
--------------
    
branches/soc-2009-yukishiro/source/blender/editors/interface/interface_templates.c
    branches/soc-2009-yukishiro/source/blender/sh/SH_api.h
    branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c

Modified: 
branches/soc-2009-yukishiro/source/blender/editors/interface/interface_templates.c
===================================================================
--- 
branches/soc-2009-yukishiro/source/blender/editors/interface/interface_templates.c
  2009-06-28 02:47:49 UTC (rev 21207)
+++ 
branches/soc-2009-yukishiro/source/blender/editors/interface/interface_templates.c
  2009-06-28 03:01:08 UTC (rev 21208)
@@ -406,6 +406,8 @@
        BKE_reports_init(&reports, RPT_STORE);
 
        if(ED_object_modifier_apply(&reports, scene, obv, mdv)) {
+               SH_computeMeshCoefficients(scene, ob);
+
                WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
                DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
 

Modified: branches/soc-2009-yukishiro/source/blender/sh/SH_api.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/sh/SH_api.h      2009-06-28 
02:47:49 UTC (rev 21207)
+++ branches/soc-2009-yukishiro/source/blender/sh/SH_api.h      2009-06-28 
03:01:08 UTC (rev 21208)
@@ -29,8 +29,8 @@
 #ifndef _SH_API_H
 #define _SH_API_H
 
+struct Object;
 struct Scene;
-struct View3D;
 struct LightEnv;
 struct ImBuf;
 
@@ -39,6 +39,7 @@
 
 void SH_computeSceneCoefficients(struct Scene *scene, unsigned int 
customdata_mask, 
                                 short compute_shadow, short recompute);
+void SH_computeMeshCoefficients(struct Object *ob, int compute_shadow);
 void SH_computeLightCoefficients(struct LightEnv *env);
 
 void SH_rotateLightEnv(struct LightEnv *env, float quat[4]);

Modified: branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c      
2009-06-28 02:47:49 UTC (rev 21207)
+++ branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c      
2009-06-28 03:01:08 UTC (rev 21208)
@@ -635,7 +635,46 @@
         }
 }
 
+void SH_computeMeshCoefficients(Scene *scene, Object *ob)
+{
+        Mesh *me= NULL;
+        MShCoeffs *coeffs= NULL;
+        MVert* verts= NULL;
+       LightEnv* env=scene->lightenv;
 
+        int i, k, m;
+        float N, *y_val;
+       int num_sh= (env->degree + 1) * (env->degree + 1);
+        float weight= 4.0f/(float)NUM_SAMPLES;
+
+       me = get_mesh(ob);
+       if (me == NULL) return;
+       
+       coeffs= CustomData_get_layer(&me->vdata, CD_MSHCOEFFS);
+       if (coeffs == NULL) {
+               coeffs= MEM_callocN(sizeof(MShCoeffs) * me->totvert, "sh 
coeffs");
+               CustomData_add_layer(&me->vdata, CD_MSHCOEFFS, CD_ASSIGN, 
coeffs, me->totvert);
+       }
+       
+       for (i = 0; i < me->totvert; i++) {
+               for (k = 0; k < NUM_SAMPLES; k++) {
+                       N = (samples[k][0] * me->mvert[i].no[0] +
+                            samples[k][1] * me->mvert[i].no[1] +
+                            samples[k][2] * me->mvert[i].no[2]) / 32767.0;
+       
+                       if (N > 0) {
+                               y_val = *(samples_Y[k]);
+                               for (m = 0; m < num_sh; m++) {
+                                       coeffs[i].val[m] += N * y_val[m];
+                               }
+                       }
+               }
+               for (m = 0; m < num_sh; m++) {
+                       coeffs[i].val[m] *= weight;
+               }
+       }
+}
+
 void SH_computeLightCoefficients(LightEnv *env)
 {
         int k, m, i, j;


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

Reply via email to