[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16752] branches/nurbs/blender: Tesselation cache buffer is now dynamically allocated.
Emmanuel Stone
emmanuel.stone at gmail.com
Fri Sep 26 21:10:00 CEST 2008
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;
More information about the Bf-blender-cvs
mailing list