[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27774] trunk/blender/source/blender/ blenkernel: Fixed incorrect rendering result when bevel object has got modifiers
Sergey Sharybin
g.ulairi at gmail.com
Fri Mar 26 16:06:31 CET 2010
Revision: 27774
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27774
Author: nazgul
Date: 2010-03-26 16:06:30 +0100 (Fri, 26 Mar 2010)
Log Message:
-----------
Fixed incorrect rendering result when bevel object has got modifiers
enabled only for realtime display or only for rendering
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_curve.h
trunk/blender/source/blender/blenkernel/intern/curve.c
trunk/blender/source/blender/blenkernel/intern/displist.c
Modified: trunk/blender/source/blender/blenkernel/BKE_curve.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_curve.h 2010-03-26 15:06:15 UTC (rev 27773)
+++ trunk/blender/source/blender/blenkernel/BKE_curve.h 2010-03-26 15:06:30 UTC (rev 27774)
@@ -76,7 +76,7 @@
void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
float *make_orco_curve(struct Scene *scene, struct Object *ob);
float *make_orco_surf( struct Object *ob);
-void makebevelcurve(struct Scene *scene, struct Object *ob, struct ListBase *disp);
+void makebevelcurve(struct Scene *scene, struct Object *ob, struct ListBase *disp, int forRender);
void makeBevelList( struct Object *ob);
Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c 2010-03-26 15:06:15 UTC (rev 27773)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c 2010-03-26 15:06:30 UTC (rev 27774)
@@ -1214,7 +1214,7 @@
/* ***************** BEVEL ****************** */
-void makebevelcurve(Scene *scene, Object *ob, ListBase *disp)
+void makebevelcurve(Scene *scene, Object *ob, ListBase *disp, int forRender)
{
DispList *dl, *dlnew;
Curve *bevcu, *cu;
@@ -1231,14 +1231,21 @@
if(cu->bevobj->type==OB_CURVE) {
bevcu= cu->bevobj->data;
if(bevcu->ext1==0.0 && bevcu->ext2==0.0) {
+ ListBase bevdisp= {NULL, NULL};
facx= cu->bevobj->size[0];
facy= cu->bevobj->size[1];
- dl= bevcu->disp.first;
- if(dl==0) {
- makeDispListCurveTypes(scene, cu->bevobj, 0);
+ if (forRender) {
+ makeDispListCurveTypes_forRender(scene, cu->bevobj, &bevdisp, NULL, 0);
+ dl= bevdisp.first;
+ } else {
dl= bevcu->disp.first;
+ if(dl==0) {
+ makeDispListCurveTypes(scene, cu->bevobj, 0);
+ dl= bevcu->disp.first;
+ }
}
+
while(dl) {
if ELEM(dl->type, DL_POLY, DL_SEGM) {
dlnew= MEM_mallocN(sizeof(DispList), "makebevelcurve1");
@@ -1260,6 +1267,8 @@
}
dl= dl->next;
}
+
+ freedisplist(&bevdisp);
}
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c 2010-03-26 15:06:15 UTC (rev 27773)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c 2010-03-26 15:06:30 UTC (rev 27774)
@@ -1299,7 +1299,7 @@
md = preTesselatePoint->next;
}
- if (*derivedFinal) {
+ if (derivedFinal && *derivedFinal) {
(*derivedFinal)->release (*derivedFinal);
}
@@ -1354,6 +1354,13 @@
}
}
} else {
+ if (!derivedFinal) {
+ /* makeDisplistCurveTypes could be used for beveling, where derived mesh */
+ /* is totally unnecessary, so we could stop modifiers applying */
+ /* when we found constructive modifier but derived mesh is unwanted result */
+ break;
+ }
+
if (dm) {
if (dmDeformedVerts) {
DerivedMesh *tdm = CDDM_copy(dm);
@@ -1405,7 +1412,9 @@
MEM_freeN(dmDeformedVerts);
}
- (*derivedFinal) = dm;
+ if (derivedFinal) {
+ (*derivedFinal) = dm;
+ }
if (deformedVerts) {
curve_applyVertexCos(ob->data, nurb, originalVerts);
@@ -1659,7 +1668,7 @@
makeBevelList(ob);
/* If curve has no bevel will return nothing */
- makebevelcurve(scene, ob, &dlbev);
+ makebevelcurve(scene, ob, &dlbev, forRender);
/* no bevel or extrude, and no width correction? */
if (!dlbev.first && cu->width==1.0f) {
More information about the Bf-blender-cvs
mailing list