Revision: 16752 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16752 Author: eman Date: 2008-09-26 21:09:59 +0200 (Fri, 26 Sep 2008)
Log Message: ----------- Tesselation cache buffer is now dynamically allocated. Fixed Incremental Calculation logic. Modified Paths: -------------- branches/nurbs/blender/intern/nurbana/extern/nurbana.h branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp branches/nurbs/blender/source/blender/src/buttons_editing.c branches/nurbs/blender/source/blender/src/editcurve.c Modified: branches/nurbs/blender/intern/nurbana/extern/nurbana.h =================================================================== --- branches/nurbs/blender/intern/nurbana/extern/nurbana.h 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/intern/nurbana/extern/nurbana.h 2008-09-26 19:09:59 UTC (rev 16752) @@ -108,7 +108,7 @@ -extern void NRB_ResChanged(NurbanaObj_ptr nop, short tessU, short tessV); +extern void NRB_ResChanged(NurbanaObj_ptr nop ); extern void NRB_SizeChanged(NurbanaObj_ptr nop, int newU, int newV); extern void NRB_ConvertToPrimitive(NurbanaObj_ptr nop,unsigned char type); Modified: branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp =================================================================== --- branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/intern/nurbana/intern/NURBS_Generate.cpp 2008-09-26 19:09:59 UTC (rev 16752) @@ -247,9 +247,11 @@ for(k = 0; k < Unpts + extraPntsU; k++) { for(l = 0; l < Vnpts+ extraPntsV; l++) { - m0 = ((k%Unpts)*Vnpts)+(l%Vnpts); + // m0 = ((k%Unpts)*Vnpts)+(l%Vnpts); + m0 = ((l%Vnpts)*Unpts)+(k%Unpts);//((k%Unpts)*Vnpts)+(l%Vnpts); + printf("incremental m: %d %d\n",m,m0); m = m0; - // printf("incremental m: %d %d\n",m,m0); + //dh = obj -> H()[m] - obj -> Hold()[m]; dx = obj -> CtlPts()[m].x - obj -> CtlPtsOld()[m].x; dy = obj -> CtlPts()[m].y - obj -> CtlPtsOld()[m].y; @@ -274,13 +276,13 @@ // Calculate the change in the surface for each u,w j = 0; + for(i = 0; i <= TessU; i++) { + if(BasisU[i][k]) { - for(n = 0; n <= TessV; n++) { - if(BasisV[n][l]) { + for(n = 0; n <= TessV; n++) { + if(BasisV[n][l]) { - for(i = 0; i <= TessU; i++) { - if(BasisU[i][k]) { - printf("J: %i\n",j); + printf("J: %i\n",j); if(dh) { // Homogeneous coordinate changed BasisResult = dh*BasisU[i][k]*BasisV[n][l]/Sum[j]; Modified: branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp =================================================================== --- branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp 2008-09-26 19:09:59 UTC (rev 16752) @@ -21,8 +21,8 @@ _Sum = (nbReal*)MEM_mallocN(sizeof(nbReal)*OBJECT_MAX_DENSITY*OBJECT_MAX_DENSITY, "_Sum"); - _OldBuffer = (nbReal*)MEM_mallocN(sizeof(nbReal)*OBJECT_MAX_DENSITY*OBJECT_MAX_DENSITY, "_OldBuffer"); //FIXME eman - //_OldBuffer = (nbReal*)MEM_mallocN(sizeof(nbReal)*3*(*_TessUV[0] * *_TessUV[1]),"_OldBuffer(Cached tess points)");// ( OBJECT_MAX_DENSITY*OBJECT_MAX_DENSITY, "_OldBuffer"); //FIXME eman + //_OldBuffer = (nbReal*)MEM_mallocN(sizeof(nbReal)*OBJECT_MAX_DENSITY*OBJECT_MAX_DENSITY, "_OldBuffer"); //FIXME eman + _OldBuffer = (nbReal*)MEM_callocN(sizeof(nbReal)*4*(*_TessUV[0] * *_TessUV[1]),"_OldBuffer(Cached tess points)");// ( OBJECT_MAX_DENSITY*OBJECT_MAX_DENSITY, "_OldBuffer"); //FIXME eman // FIXME for curves. //len= nu->resolu*nu->resolv; @@ -108,12 +108,19 @@ MEM_freeN(_CtlPtsOld); _CtlPtsOld= (Point3d*)MEM_callocN(sizeof(Point3d)*U*V, "_CtlPtsOld realloc"); } -//void Object_NURBS::SetCacheTessBuffer() { -// if(_OldBuffer) -// MEM_freeN(_OldBuffer); -//} +void Object_NURBS::SetCacheTessBuffer() { + if(_OldBuffer) + MEM_freeN(_OldBuffer); + int tessU = *_TessUV[0]; + int tessV = *_TessUV[1]; + int len = 4 * tessU * tessV; + _OldBuffer = (nbReal*)MEM_callocN(sizeof(nbReal)*len,"_OldBuffer(Cached tess points)"); + printf("allocating _OldBuffer size=%d\n",len); + //_Change[0] = 1; +} + int Object_NURBS::getLength(bool UV, bool withCyclic) { int result = Length(UV); if(withCyclic && Cyclic(UV)) Modified: branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h =================================================================== --- branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h 2008-09-26 19:09:59 UTC (rev 16752) @@ -36,6 +36,8 @@ void SetCacheBuffer(); + void SetCacheTessBuffer(); + void SetLength(int U, int V); int getLength(bool UV, bool withCyclic); Modified: branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp =================================================================== --- branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/intern/nurbana/intern/libNurbana.cpp 2008-09-26 19:09:59 UTC (rev 16752) @@ -105,11 +105,12 @@ NRB_Print(on); } -void NRB_ResChanged(NurbanaObj_ptr nop, short tessU, short tessV) { +void NRB_ResChanged(NurbanaObj_ptr nop) { Object_NURBS *on; on = reinterpret_cast<Object_NURBS*>(nop); - //on->SetCacheTessBuffer - printf("feeeeee!\n"); + on->SetCacheTessBuffer(); + on->Change(0,1); + } int NRB_getNumIsoPoints(NurbanaObj_ptr nop) { Object_NURBS *on; @@ -148,20 +149,20 @@ return buffer; } -int NRB_getNumTessPoints(NurbanaObj_ptr nurb) { +int NRB_getNumTessPoints(NurbanaObj_ptr nop) { Object_NURBS *on; int ntps; - on = reinterpret_cast<Object_NURBS*>(nurb); + on = reinterpret_cast<Object_NURBS*>(nop); ntps = on->Tess(0); if(on->Length(1)>1) ntps *= on->Tess(1); return (ntps); } -void NRB_resetIsoLines(NurbanaObj_ptr nurb) { +void NRB_resetIsoLines(NurbanaObj_ptr nop) { Object_NURBS *on; int ntps; - on = reinterpret_cast<Object_NURBS*>(nurb); + on = reinterpret_cast<Object_NURBS*>(nop); on->ResetIsoLines(); } Modified: branches/nurbs/blender/source/blender/src/buttons_editing.c =================================================================== --- branches/nurbs/blender/source/blender/src/buttons_editing.c 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/source/blender/src/buttons_editing.c 2008-09-26 19:09:59 UTC (rev 16752) @@ -3173,7 +3173,7 @@ if(G.obedit) { nu= get_actNurb(); if(nu && (nu->type & 7)==CU_NURBS ) { - NRB_ResChanged(nu); + NRB_ResChanged(nu->nurbanaPtr); // If can't call for here directly nurbanaResChanged(nu); } DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); allqueue(REDRAWVIEW3D, 0); Modified: branches/nurbs/blender/source/blender/src/editcurve.c =================================================================== --- branches/nurbs/blender/source/blender/src/editcurve.c 2008-09-26 19:00:49 UTC (rev 16751) +++ branches/nurbs/blender/source/blender/src/editcurve.c 2008-09-26 19:09:59 UTC (rev 16752) @@ -2010,9 +2010,9 @@ } void nurbanaResChanged(Nurb *nu) { + NRB_ResChanged(nu->nurbanaPtr); +} - NRB_ResChanged(nu->nurbanaPtr,nu->resolu,nu->resolv); -} void nurbanaSubdivide() { Nurb *nu; int a, b, c, d, sel, amount, *usel, *vsel; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs