[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