diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-11-11 12:56:39 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-11-11 12:56:39 +0300 |
commit | cf673cf80a157d13b7cae837cfde58be8d734620 (patch) | |
tree | 259f9b639debe08eb9da79c599db8775dc5cf8a0 /source/blender/blenkernel/intern/displist.c | |
parent | 030253cdf665648eb5a16f3be910ceae26979f30 (diff) |
Fix #24643: Nurbs Surface Preview resolution overrides render resolution
NURBS surfaces always used resol{u,v} from spline and never used curve's render resolutions.
Now, if curve's render resolution is non-zero then it'll override resolution for all
splines when rendering (in needed direction only, ofcource).
Diffstat (limited to 'source/blender/blenkernel/intern/displist.c')
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index a8032f5a40d..9ec23abd842 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -1614,8 +1614,15 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, for (nu=nubase->first; nu; nu=nu->next) { if(forRender || nu->hide==0) { + int resolu= nu->resolu, resolv= nu->resolv; + + if(forRender){ + if(cu->resolu_ren) resolu= cu->resolu_ren; + if(cu->resolv_ren) resolv= cu->resolv_ren; + } + if(nu->pntsv==1) { - len= SEGMENTSU(nu)*nu->resolu; + len= SEGMENTSU(nu)*resolu; dl= MEM_callocN(sizeof(DispList), "makeDispListsurf"); dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts"); @@ -1634,10 +1641,10 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, if(nu->flagu & CU_NURB_CYCLIC) dl->type= DL_POLY; else dl->type= DL_SEGM; - makeNurbcurve(nu, data, NULL, NULL, NULL, nu->resolu, 3*sizeof(float)); + makeNurbcurve(nu, data, NULL, NULL, NULL, resolu, 3*sizeof(float)); } else { - len= (nu->pntsu*nu->resolu) * (nu->pntsv*nu->resolv); + len= (nu->pntsu*resolu) * (nu->pntsv*resolv); dl= MEM_callocN(sizeof(DispList), "makeDispListsurf"); dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts"); @@ -1653,12 +1660,12 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, data= dl->verts; dl->type= DL_SURF; - dl->parts= (nu->pntsu*nu->resolu); /* in reverse, because makeNurbfaces works that way */ - dl->nr= (nu->pntsv*nu->resolv); + dl->parts= (nu->pntsu*resolu); /* in reverse, because makeNurbfaces works that way */ + dl->nr= (nu->pntsv*resolv); if(nu->flagv & CU_NURB_CYCLIC) dl->flag|= DL_CYCL_U; /* reverse too! */ if(nu->flagu & CU_NURB_CYCLIC) dl->flag|= DL_CYCL_V; - makeNurbfaces(nu, data, 0); + makeNurbfaces(nu, data, 0, resolu, resolv); /* gl array drawing: using indices */ displist_surf_indices(dl); |