forked from bartvdbraak/blender
Fixed incorrect rendering result when bevel object has got modifiers
enabled only for realtime display or only for rendering
This commit is contained in:
parent
95c135f68c
commit
0912d84f2a
@ -76,7 +76,7 @@ void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, float
|
|||||||
void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
|
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_curve(struct Scene *scene, struct Object *ob);
|
||||||
float *make_orco_surf( 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);
|
void makeBevelList( struct Object *ob);
|
||||||
|
|
||||||
|
@ -1214,7 +1214,7 @@ float *make_orco_curve(Scene *scene, Object *ob)
|
|||||||
|
|
||||||
/* ***************** BEVEL ****************** */
|
/* ***************** BEVEL ****************** */
|
||||||
|
|
||||||
void makebevelcurve(Scene *scene, Object *ob, ListBase *disp)
|
void makebevelcurve(Scene *scene, Object *ob, ListBase *disp, int forRender)
|
||||||
{
|
{
|
||||||
DispList *dl, *dlnew;
|
DispList *dl, *dlnew;
|
||||||
Curve *bevcu, *cu;
|
Curve *bevcu, *cu;
|
||||||
@ -1231,14 +1231,21 @@ void makebevelcurve(Scene *scene, Object *ob, ListBase *disp)
|
|||||||
if(cu->bevobj->type==OB_CURVE) {
|
if(cu->bevobj->type==OB_CURVE) {
|
||||||
bevcu= cu->bevobj->data;
|
bevcu= cu->bevobj->data;
|
||||||
if(bevcu->ext1==0.0 && bevcu->ext2==0.0) {
|
if(bevcu->ext1==0.0 && bevcu->ext2==0.0) {
|
||||||
|
ListBase bevdisp= {NULL, NULL};
|
||||||
facx= cu->bevobj->size[0];
|
facx= cu->bevobj->size[0];
|
||||||
facy= cu->bevobj->size[1];
|
facy= cu->bevobj->size[1];
|
||||||
|
|
||||||
|
if (forRender) {
|
||||||
|
makeDispListCurveTypes_forRender(scene, cu->bevobj, &bevdisp, NULL, 0);
|
||||||
|
dl= bevdisp.first;
|
||||||
|
} else {
|
||||||
dl= bevcu->disp.first;
|
dl= bevcu->disp.first;
|
||||||
if(dl==0) {
|
if(dl==0) {
|
||||||
makeDispListCurveTypes(scene, cu->bevobj, 0);
|
makeDispListCurveTypes(scene, cu->bevobj, 0);
|
||||||
dl= bevcu->disp.first;
|
dl= bevcu->disp.first;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while(dl) {
|
while(dl) {
|
||||||
if ELEM(dl->type, DL_POLY, DL_SEGM) {
|
if ELEM(dl->type, DL_POLY, DL_SEGM) {
|
||||||
dlnew= MEM_mallocN(sizeof(DispList), "makebevelcurve1");
|
dlnew= MEM_mallocN(sizeof(DispList), "makebevelcurve1");
|
||||||
@ -1260,6 +1267,8 @@ void makebevelcurve(Scene *scene, Object *ob, ListBase *disp)
|
|||||||
}
|
}
|
||||||
dl= dl->next;
|
dl= dl->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
freedisplist(&bevdisp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1299,7 +1299,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
md = preTesselatePoint->next;
|
md = preTesselatePoint->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*derivedFinal) {
|
if (derivedFinal && *derivedFinal) {
|
||||||
(*derivedFinal)->release (*derivedFinal);
|
(*derivedFinal)->release (*derivedFinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1354,6 +1354,13 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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 (dm) {
|
||||||
if (dmDeformedVerts) {
|
if (dmDeformedVerts) {
|
||||||
DerivedMesh *tdm = CDDM_copy(dm);
|
DerivedMesh *tdm = CDDM_copy(dm);
|
||||||
@ -1405,7 +1412,9 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
MEM_freeN(dmDeformedVerts);
|
MEM_freeN(dmDeformedVerts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (derivedFinal) {
|
||||||
(*derivedFinal) = dm;
|
(*derivedFinal) = dm;
|
||||||
|
}
|
||||||
|
|
||||||
if (deformedVerts) {
|
if (deformedVerts) {
|
||||||
curve_applyVertexCos(ob->data, nurb, originalVerts);
|
curve_applyVertexCos(ob->data, nurb, originalVerts);
|
||||||
@ -1659,7 +1668,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
makeBevelList(ob);
|
makeBevelList(ob);
|
||||||
|
|
||||||
/* If curve has no bevel will return nothing */
|
/* 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? */
|
/* no bevel or extrude, and no width correction? */
|
||||||
if (!dlbev.first && cu->width==1.0f) {
|
if (!dlbev.first && cu->width==1.0f) {
|
||||||
|
Loading…
Reference in New Issue
Block a user