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

Reply via email to