[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20595] branches/soc-2009-yukishiro/source /blender: need a better way to signal when the sh job is done

Jingyuan Huang jingyuan.huang at gmail.com
Wed Jun 3 04:06:46 CEST 2009


Revision: 20595
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20595
Author:   yukishiro
Date:     2009-06-03 04:06:45 +0200 (Wed, 03 Jun 2009)

Log Message:
-----------
need a better way to signal when the sh job is done

Modified Paths:
--------------
    branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/soc-2009-yukishiro/source/blender/blenkernel/intern/DerivedMesh.c
    branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c
    branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
    branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_DerivedMesh.h	2009-06-03 00:40:38 UTC (rev 20594)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_DerivedMesh.h	2009-06-03 02:06:45 UTC (rev 20595)
@@ -461,8 +461,6 @@
 
 void weight_to_rgb(float input, float *fr, float *fg, float *fb);
 
-void calc_sh_color(struct Scene *scene, struct Object *ob, DerivedMesh *dm, unsigned char *shcol);
-
 /* convert layers requested by a GLSL material to actually available layers in
  * the DerivedMesh, with both a pointer for arrays and an offset for editmesh */
 typedef struct DMVertexAttribs {

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/intern/DerivedMesh.c	2009-06-03 00:40:38 UTC (rev 20594)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/intern/DerivedMesh.c	2009-06-03 02:06:45 UTC (rev 20595)
@@ -1585,69 +1585,8 @@
 	CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_ASSIGN, wtcol, dm->numFaceData);
 }
 
-static void calc_sh_vert_color(Object *ob, int index, MShCoeffs *mco, float (*lco)[3], unsigned char *col)
-{
-        Mesh *me = ob->data;
-        Material * mat;
-        float color[3];
-        float brightness[3];
-        int k;
 
-        // TODO: get face material colour
-        if (me->mat) mat = me->mat[0];
 
-        if (mat != NULL) {
-                color[0] = mat->r;
-                color[1] = mat->g;
-                color[2] = mat->b;
-        } else {
-              color[0] = color[1] = color[2] = 0.8;
-        }
-
-        brightness[0] = brightness[1] = brightness[2] = 0;
-        for (k = 0; k < 9; k++) {
-                brightness[0] += mco[index].val[k] * lco[k][0];
-                brightness[1] += mco[index].val[k] * lco[k][1];
-                brightness[2] += mco[index].val[k] * lco[k][2];
-        }
-	color[0] *= brightness[0];
-	color[1] *= brightness[1];
-	color[2] *= brightness[2];
-
-	col[0] = FTOCHAR(color[0]);
-	col[1] = FTOCHAR(color[1]);
-	col[2] = FTOCHAR(color[2]);
-	col[3] = 255;
-}
-
-void calc_sh_color(Scene *scene, Object *ob, DerivedMesh *dm, unsigned char *shcol)
-{
-        int i, totface= dm->getNumFaces(dm);
-        MFace *mf= dm->getFaceArray(dm);
-        Mesh *me= get_mesh(ob);
-        MShCoeffs *mco= CustomData_get_layer(&me->vdata, CD_MSHCOEFFS);
-        LightEnv *env= get_scene_lightenv(scene);
-
-        for (i=0; i<totface; i++, mf++) {
-                calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 0) * 4]);
-                calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 1) * 4]);
-                calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 2) * 4]);
-                if (mf->v4)
-                        calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 3) * 4]);
-        }
-}
-
-
-static void add_sh_mcol_dm(Scene *scene, Object *ob, DerivedMesh *dm)
-{
-        unsigned char *shcol;
-        int totface= dm->getNumFaces(dm);
-
-        shcol = MEM_callocN (sizeof (unsigned char) * totface * 4 * 4, "sh color");
-        calc_sh_color(scene, ob, dm, shcol);
-        CustomData_add_layer(&dm->faceData, CD_SH_MCOL, CD_ASSIGN, shcol, dm->numFaceData);
-}
-
 static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
                                 DerivedMesh **deform_r, DerivedMesh **final_r,
                                 int useRenderParams, int useDeform,
@@ -1888,10 +1827,11 @@
 			add_orco_dm(ob, NULL, *deform_r, NULL);
 	}
 
-        /* add a sh color layer if needed */
-        if(dataMask & CD_MASK_SH_MCOL) {
-                add_sh_mcol_dm(scene, ob, finaldm);
-        }
+        ///* add a sh color layer if needed */
+        //if((dataMask & CD_MASK_SH_MCOL) && (scene->flag & SCE_SH_COMPUTED)) {
+        //        printf("add? %d %d\n", dataMask & CD_MASK_SH_MCOL, scene->flag & SCE_SH_COMPUTED);
+        //        add_sh_mcol_dm(scene, ob, finaldm);
+        //}
 
 	*final_r = finaldm;
 

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c	2009-06-03 00:40:38 UTC (rev 20594)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c	2009-06-03 02:06:45 UTC (rev 20595)
@@ -120,6 +120,7 @@
 {
         World *world = scene->world;
 
+        if (world == NULL) return &deflightenv;
         if (world->lightenv == NULL) return &deflightenv;
         return world->lightenv;
 }

Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c	2009-06-03 00:40:38 UTC (rev 20594)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c	2009-06-03 02:06:45 UTC (rev 20595)
@@ -103,6 +103,7 @@
 	sj->do_update= do_update;
 	
         SH_ComputeSceneCoefficients(sj->scene, sj->v3d);
+        sj->scene->flag |= SCE_SH_COMPUTED;
 }
 
 
@@ -111,30 +112,30 @@
 static void initial_computation(bContext *C)
 {
         Scene *scene= CTX_data_scene(C);
-        SH_ComputeSceneCoefficients(scene, CTX_wm_view3d(C));
-//        wmJob *job;
-//        ShJob *sj;
-//
-//	/* only one job at a time */
-//	if(WM_jobs_test(CTX_wm_manager(C), scene)) return;
-//
-//	/* handle UI stuff */
-//	WM_cursor_wait(1);
-//
-//	/* job custom data */
-//	sj= MEM_callocN(sizeof(ShJob), "SH job");
-//	sj->scene= scene;
-//	sj->v3d= CTX_wm_view3d(C);
-//
-//	/* setup job */
-//	job= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene);
-//	WM_jobs_customdata(job, sj, sh_freejob);
-//	WM_jobs_timer(job, 0.2, NC_SCENE|ND_SH_RESULT, 0);
-//	WM_jobs_callbacks(job, sh_startjob, NULL, NULL);
-//
-//        /* start job */
-//	WM_jobs_start(job);
-//	WM_cursor_wait(0);
+        wmJob *job;
+        ShJob *sj;
+
+	/* only one job at a time */
+	if(WM_jobs_test(CTX_wm_manager(C), scene)) return;
+
+	/* handle UI stuff */
+	WM_cursor_wait(1);
+
+	/* job custom data */
+	sj= MEM_callocN(sizeof(ShJob), "SH job");
+	sj->scene= scene;
+	sj->v3d= CTX_wm_view3d(C);
+
+	/* setup job */
+	job= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene);
+	WM_jobs_customdata(job, sj, sh_freejob);
+	WM_jobs_timer(job, 0.2, NC_SCENE|ND_SH_RESULT, 0);
+	WM_jobs_callbacks(job, sh_startjob, NULL, NULL);
+
+        /* start job */
+	WM_jobs_start(job);
+	WM_cursor_wait(0);
+
 }
 
 static int *get_indexarray(void)
@@ -263,7 +264,6 @@
 
                 if (!(scene->flag & SCE_SH_COMPUTED)) {
                         initial_computation(C);
-                        scene->flag |= SCE_SH_COMPUTED;
                 }
 		if(lp==NULL)
 			lp= scene->toolsettings->lpaint= new_lpaint();

Modified: branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c	2009-06-03 00:40:38 UTC (rev 20594)
+++ branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c	2009-06-03 02:06:45 UTC (rev 20595)
@@ -2277,7 +2277,71 @@
 	return 1;
 }
 
+static void calc_sh_vert_color(Object *ob, int index, MShCoeffs *mco, float (*lco)[3], unsigned char *col)
+{
+        Mesh *me = ob->data;
+        Material * mat;
+        float color[3];
+        float brightness[3];
+        int k;
 
+        // TODO: get face material colour
+        if (me->mat) mat = me->mat[0];
+
+        if (mat != NULL) {
+                color[0] = mat->r;
+                color[1] = mat->g;
+                color[2] = mat->b;
+        } else {
+              color[0] = color[1] = color[2] = 0.8;
+        }
+
+        brightness[0] = brightness[1] = brightness[2] = 0;
+        for (k = 0; k < 9; k++) {
+                brightness[0] += mco[index].val[k] * lco[k][0];
+                brightness[1] += mco[index].val[k] * lco[k][1];
+                brightness[2] += mco[index].val[k] * lco[k][2];
+        }
+	color[0] *= brightness[0];
+	color[1] *= brightness[1];
+	color[2] *= brightness[2];
+
+	col[0] = FTOCHAR(color[0]);
+	col[1] = FTOCHAR(color[1]);
+	col[2] = FTOCHAR(color[2]);
+	col[3] = 255;
+}
+
+
+static void calc_sh_color(Scene *scene, Object *ob, DerivedMesh *dm, unsigned char *shcol)
+{
+        int i, totface= dm->getNumFaces(dm);
+        MFace *mf= dm->getFaceArray(dm);
+        Mesh *me= get_mesh(ob);
+        MShCoeffs *mco= CustomData_get_layer(&me->vdata, CD_MSHCOEFFS);
+        LightEnv *env= get_scene_lightenv(scene);
+
+        for (i=0; i<totface; i++, mf++) {
+                calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 0) * 4]);
+                calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 1) * 4]);
+                calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 2) * 4]);
+                if (mf->v4)
+                        calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 3) * 4]);
+        }
+}
+
+
+static void* add_sh_mcol_dm(Scene *scene, Object *ob, DerivedMesh *dm)
+{
+        unsigned char *shcol;
+        int totface= dm->getNumFaces(dm);
+
+        shcol = MEM_callocN (sizeof (unsigned char) * totface * 4 * 4, "sh color");
+        calc_sh_color(scene, ob, dm, shcol);
+        return CustomData_add_layer(&dm->faceData, CD_SH_MCOL, CD_ASSIGN, shcol, dm->numFaceData);
+}
+
+
 static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
 {
 	Object *ob= base->object;
@@ -2404,23 +2468,6 @@
 				glColor3f(1.0f, 1.0f, 1.0f);
 				dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 0);
 			}
-                        else if(G.f & G_LIGHTPAINT) {
-
-                                glDisable(GL_LIGHTING);
-                                glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
-                                glEnable(GL_COLOR_MATERIAL); 
-                                glShadeModel(GL_SMOOTH);
-
-                                unsigned char *shcol= DM_get_face_data_layer(dm, CD_SH_MCOL);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list