[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27386] branches/render25/source/blender/ render/intern: Render Branch: orco' s now use same storage system as other texture coordinates.

Brecht Van Lommel brecht at blender.org
Wed Mar 10 15:37:02 CET 2010


Revision: 27386
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27386
Author:   blendix
Date:     2010-03-10 15:36:49 +0100 (Wed, 10 Mar 2010)

Log Message:
-----------
Render Branch: orco's now use same storage system as other texture coordinates.

Modified Paths:
--------------
    branches/render25/source/blender/render/intern/include/object.h
    branches/render25/source/blender/render/intern/include/object_mesh.h
    branches/render25/source/blender/render/intern/include/object_strand.h
    branches/render25/source/blender/render/intern/include/render_types.h
    branches/render25/source/blender/render/intern/source/database.c
    branches/render25/source/blender/render/intern/source/object.c
    branches/render25/source/blender/render/intern/source/object_mesh.c
    branches/render25/source/blender/render/intern/source/object_particle.c
    branches/render25/source/blender/render/intern/source/object_strand.c
    branches/render25/source/blender/render/intern/source/object_subdivide.c
    branches/render25/source/blender/render/intern/source/shadeinput.c
    branches/render25/source/blender/render/intern/source/texture_stack.c

Modified: branches/render25/source/blender/render/intern/include/object.h
===================================================================
--- branches/render25/source/blender/render/intern/include/object.h	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/include/object.h	2010-03-10 14:36:49 UTC (rev 27386)
@@ -150,6 +150,7 @@
 #define R_HIDDEN			8
 
 /* data layer size */
+#define RE_ORCO_ELEMS		3
 #define RE_STICKY_ELEMS		2
 #define RE_STRESS_ELEMS		1
 #define RE_RAD_ELEMS		4

Modified: branches/render25/source/blender/render/intern/include/object_mesh.h
===================================================================
--- branches/render25/source/blender/render/intern/include/object_mesh.h	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/include/object_mesh.h	2010-03-10 14:36:49 UTC (rev 27386)
@@ -45,6 +45,7 @@
 
 /* Vertex Texture Coordinates */
 
+float *render_vert_get_orco(struct ObjectRen *obr, struct VertRen *ver, int verify);
 float *render_vert_get_sticky(struct ObjectRen *obr, struct VertRen *ver, int verify);
 float *render_vert_get_stress(struct ObjectRen *obr, struct VertRen *ver, int verify);
 float *render_vert_get_rad(struct ObjectRen *obr, struct VertRen *ver, int verify);
@@ -66,13 +67,12 @@
 void init_render_particle_system(struct Render *re, struct ObjectRen *obr, struct ParticleSystem *psys, int timeoffset);
 void finalize_render_object(struct Render *re, struct ObjectRen *obr, int timeoffset);
 void render_object_calc_vnormals(struct Render *re, struct ObjectRen *obr, int do_tangent, int do_nmap_tangent);
-void set_object_orco(struct Render *re, void *ob, float *orco);
 
 /* Structs */
 
 typedef struct VertTableNode {
 	struct VertRen *vert;
-	float *rad;
+	float *orco;
 	float *sticky;
 	float *strand;
 	float *tangent;
@@ -89,13 +89,11 @@
 	float *tangent;
 } VlakTableNode;
 
-typedef struct VertRen
-{
+typedef struct VertRen {
 	float co[3];
 	float n[3];
-	float *orco;
 	unsigned short flag;	/* in use for temp setting stuff in object_mesh.c */
-	float accum;			/* accum for radio weighting, and for strand texco static particles */
+	float accum;			/* for strand texco static particles */
 	int index;				/* index allows extending vertren with any property */
 } VertRen;
 

Modified: branches/render25/source/blender/render/intern/include/object_strand.h
===================================================================
--- branches/render25/source/blender/render/intern/include/object_strand.h	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/include/object_strand.h	2010-03-10 14:36:49 UTC (rev 27386)
@@ -103,6 +103,9 @@
 struct StrandRen *render_object_strand_get(struct ObjectRen *obr, int nr);
 struct StrandBuffer *render_object_strand_buffer_add(struct ObjectRen *obr, int totvert);
 
+/* Strand Texture Coordinates */
+
+float *render_strand_get_orco(struct ObjectRen *obr, struct StrandRen *strand, int verify);
 float *render_strand_get_surfnor(struct ObjectRen *obr, struct StrandRen *strand, int verify);
 float *render_strand_get_uv(struct ObjectRen *obr, struct StrandRen *strand, int n, char **name, int verify);
 struct MCol *render_strand_get_mcol(struct ObjectRen *obr, struct StrandRen *strand, int n, char **name, int verify);
@@ -114,8 +117,9 @@
 
 typedef struct StrandTableNode {
 	struct StrandRen *strand;
+	float *orco;
+	float *surfnor;
 	float *winspeed;
-	float *surfnor;
 	float *simplify;
 	int *face;
 	struct MCol *mcol;
@@ -156,7 +160,6 @@
 	StrandBuffer *buffer;
 	int totvert, flag;
 	int clip, index;
-	float orco[3];
 } StrandRen;
 
 /* strandbuffer->flag */

Modified: branches/render25/source/blender/render/intern/include/render_types.h
===================================================================
--- branches/render25/source/blender/render/intern/include/render_types.h	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/include/render_types.h	2010-03-10 14:36:49 UTC (rev 27386)
@@ -73,7 +73,6 @@
 	/* extra object data */
 	ListBase customdata_names;
 	struct Object *excludeob;
-	struct GHash *orco_hash;
 
 	/* statistics */
 	int totvlak, totvert, totstrand, totlamp;

Modified: branches/render25/source/blender/render/intern/source/database.c
===================================================================
--- branches/render25/source/blender/render/intern/source/database.c	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/source/database.c	2010-03-10 14:36:49 UTC (rev 27386)
@@ -98,11 +98,6 @@
 	BLI_freelistN(&rdb->objecttable);
 	BLI_freelistN(&rdb->instancetable);
 
-	if(rdb->orco_hash) {
-		BLI_ghash_free(rdb->orco_hash, NULL, (GHashValFreeFP)MEM_freeN);
-		rdb->orco_hash = NULL;
-	}
-
 	/* lamps */
 	for(lar= rdb->lampren.first; lar; lar= lar->next)
 		lamp_free(lar);

Modified: branches/render25/source/blender/render/intern/source/object.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object.c	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/source/object.c	2010-03-10 14:36:49 UTC (rev 27386)
@@ -192,8 +192,8 @@
 	for(a=0; vertnodes[a].vert; a++) {
 		MEM_freeN(vertnodes[a].vert);
 		
-		if(vertnodes[a].rad)
-			MEM_freeN(vertnodes[a].rad);
+		if(vertnodes[a].orco)
+			MEM_freeN(vertnodes[a].orco);
 		if(vertnodes[a].sticky)
 			MEM_freeN(vertnodes[a].sticky);
 		if(vertnodes[a].strand)
@@ -246,6 +246,8 @@
 			MEM_freeN(strandnodes[a].mcol);
 		if(strandnodes[a].winspeed)
 			MEM_freeN(strandnodes[a].winspeed);
+		if(strandnodes[a].orco)
+			MEM_freeN(strandnodes[a].orco);
 		if(strandnodes[a].surfnor)
 			MEM_freeN(strandnodes[a].surfnor);
 		if(strandnodes[a].simplify)

Modified: branches/render25/source/blender/render/intern/source/object_mesh.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object_mesh.c	2010-03-10 14:02:31 UTC (rev 27385)
+++ branches/render25/source/blender/render/intern/source/object_mesh.c	2010-03-10 14:36:49 UTC (rev 27386)
@@ -124,6 +124,21 @@
 
 /******************************** Verts **************************************/
 
+float *render_vert_get_orco(ObjectRen *obr, VertRen *ver, int verify)
+{
+	float *orco;
+	int nr= ver->index>>8;
+	
+	orco= obr->vertnodes[nr].orco;
+	if(orco==NULL) {
+		if(verify) 
+			orco= obr->vertnodes[nr].orco= MEM_mallocN(256*RE_ORCO_ELEMS*sizeof(float), "orco table");
+		else
+			return NULL;
+	}
+	return orco + (ver->index & 255)*RE_ORCO_ELEMS;
+}
+
 float *render_vert_get_sticky(ObjectRen *obr, VertRen *ver, int verify)
 {
 	float *sticky;
@@ -154,22 +169,6 @@
 	return stress + (ver->index & 255)*RE_STRESS_ELEMS;
 }
 
-/* this one callocs! */
-float *render_vert_get_rad(ObjectRen *obr, VertRen *ver, int verify)
-{
-	float *rad;
-	int nr= ver->index>>8;
-	
-	rad= obr->vertnodes[nr].rad;
-	if(rad==NULL) {
-		if(verify) 
-			rad= obr->vertnodes[nr].rad= MEM_callocN(256*RE_RAD_ELEMS*sizeof(float), "rad table");
-		else
-			return NULL;
-	}
-	return rad + (ver->index & 255)*RE_RAD_ELEMS;
-}
-
 float *render_vert_get_strand(ObjectRen *obr, VertRen *ver, int verify)
 {
 	float *strand;
@@ -239,11 +238,6 @@
 		fp2= render_vert_get_stress(obr, v1, 1);
 		memcpy(fp2, fp1, RE_STRESS_ELEMS*sizeof(float));
 	}
-	fp1= render_vert_get_rad(obr, ver, 0);
-	if(fp1) {
-		fp2= render_vert_get_rad(obr, v1, 1);
-		memcpy(fp2, fp1, RE_RAD_ELEMS*sizeof(float));
-	}
 	fp1= render_vert_get_strand(obr, ver, 0);
 	if(fp1) {
 		fp2= render_vert_get_strand(obr, v1, 1);
@@ -481,45 +475,6 @@
 
 
 /* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* Orco hash and Materials                                                   */
-/* ------------------------------------------------------------------------- */
-
-static float *get_object_orco(Render *re, Object *ob)
-{
-	float *orco;
-	
-	if (!re->db.orco_hash)
-		re->db.orco_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
-	
-	orco = BLI_ghash_lookup(re->db.orco_hash, ob);
-	
-	if (!orco) {
-		if (ELEM(ob->type, OB_CURVE, OB_FONT)) {
-			orco = make_orco_curve(re->db.scene, ob);
-		} else if (ob->type==OB_SURF) {
-			orco = make_orco_surf(ob);
-		} else if (ob->type==OB_MBALL) {
-			orco = make_orco_mball(ob);
-		}
-		
-		if (orco)
-			BLI_ghash_insert(re->db.orco_hash, ob, orco);
-	}
-	
-	return orco;
-}
-
-void set_object_orco(Render *re, void *ob, float *orco)
-{
-	if (!re->db.orco_hash)
-		re->db.orco_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
-	
-	BLI_ghash_insert(re->db.orco_hash, ob, orco);
-}
-
-/* ------------------------------------------------------------------------- */
 /* tool functions/defines for ad hoc simplification and possible future 
    cleanup      */
 /* ------------------------------------------------------------------------- */
@@ -588,9 +543,11 @@
 /* Stress, tangents and normals                                              */
 /* ------------------------------------------------------------------------- */
 
-static void calc_edge_stress_add(float *accum, VertRen *v1, VertRen *v2)
+static void calc_edge_stress_add(float *accum, ObjectRen *obr, VertRen *v1, VertRen *v2)
 {
-	float len= len_v3v3(v1->co, v2->co)/len_v3v3(v1->orco, v2->orco);
+	float *orco1= render_vert_get_orco(obr, v1, 0);
+	float *orco2= render_vert_get_orco(obr, v2, 0);
+	float len= len_v3v3(v1->co, v2->co)/len_v3v3(orco1, orco2);
 	float *acc;
 	
 	acc= accum + 2*v1->index;
@@ -616,10 +573,12 @@
 	/* de-normalize orco */
 	for(a=0; a<obr->totvert; a++) {
 		VertRen *ver= render_object_vert_get(obr, a);
-		if(ver->orco) {
-			ver->orco[0]= ver->orco[0]*size[0] +loc[0];
-			ver->orco[1]= ver->orco[1]*size[1] +loc[1];
-			ver->orco[2]= ver->orco[2]*size[2] +loc[2];
+		float *vorco= render_vert_get_orco(obr, ver, 0);
+
+		if(vorco) {
+			vorco[0]= vorco[0]*size[0] +loc[0];
+			vorco[1]= vorco[1]*size[1] +loc[1];
+			vorco[2]= vorco[2]*size[2] +loc[2];
 		}
 	}
 	
@@ -628,21 +587,23 @@
 	for(a=0; a<obr->totvlak; a++) {
 		VlakRen *vlr= render_object_vlak_get(obr, a);
 
-		if(vlr->v1->orco && vlr->v4) {
-			calc_edge_stress_add(accumoffs, vlr->v1, vlr->v2);
-			calc_edge_stress_add(accumoffs, vlr->v2, vlr->v3);
-			calc_edge_stress_add(accumoffs, vlr->v3, vlr->v1);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list