[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