Revision: 23639
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23639
Author:   blendix
Date:     2009-10-05 18:48:52 +0200 (Mon, 05 Oct 2009)

Log Message:
-----------
VBO:
* Fix slowdown/freeze entering editmode on a high poly mesh,
  dm->getNumFaces can be slow, don't call it in a loop.
* Fix 64bit pointer casting warnings.

Modified Paths:
--------------
    trunk/blender/source/blender/gpu/intern/gpu_buffers.c

Modified: trunk/blender/source/blender/gpu/intern/gpu_buffers.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_buffers.c       2009-10-05 
16:40:13 UTC (rev 23638)
+++ trunk/blender/source/blender/gpu/intern/gpu_buffers.c       2009-10-05 
16:48:52 UTC (rev 23639)
@@ -34,15 +34,19 @@
 
 #include "GL/glew.h"
 
-#include "DNA_userdef_types.h"
+#include "MEM_guardedalloc.h"
 
-#include "gpu_buffers.h"
-#include "MEM_guardedalloc.h"
+#include "BLI_arithb.h"
+
+#include "DNA_meshdata_types.h"
+
 #include "BKE_DerivedMesh.h"
 #include "BKE_utildefines.h"
-#include "DNA_meshdata_types.h"
-#include "BLI_arithb.h"
 
+#include "DNA_userdef_types.h"
+
+#include "gpu_buffers.h"
+
 #define GPU_BUFFER_VERTEX_STATE 1
 #define GPU_BUFFER_NORMAL_STATE 2
 #define GPU_BUFFER_TEXCOORD_STATE 4
@@ -248,7 +252,7 @@
        int redir[32768];               /* material number is an 16-bit short 
so there's at most 32768 materials */
        int *index;
        int i;
-       int curmat, curverts;
+       int curmat, curverts, numfaces;
 
        DEBUG_VBO("GPU_drawobject_new\n");
 
@@ -267,7 +271,8 @@
        mvert = dm->getVertArray(dm);
        mface = dm->getFaceArray(dm);
 
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       for( i=0; i < numfaces; i++ ) {
                if( mface[i].v4 )
                        numverts[mface[i].mat_nr+16383] += 6;   /* split every 
quad into two triangles */
                else
@@ -313,7 +318,7 @@
                        object->indexMemUsage++; \
                }
 
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       for( i=0; i < numfaces; i++ ) {
                int curInd = index[redir[mface[i].mat_nr+16383]];
                object->faceRemap[curInd] = i; 
                ADDLINK( mface[i].v1, curInd*3 );
@@ -461,7 +466,7 @@
 void GPU_buffer_copy_vertex( DerivedMesh *dm, float *varray, int *index, int 
*redir, void *user )
 {
        int start;
-       int i, j;
+       int i, j, numfaces;
 
        MVert *mvert;
        MFace *mface;
@@ -471,7 +476,8 @@
        mvert = dm->getVertArray(dm);
        mface = dm->getFaceArray(dm);
 
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       for( i=0; i < numfaces; i++ ) {
                start = index[redir[mface[i].mat_nr+16383]];
                if( mface[i].v4 )
                        index[redir[mface[i].mat_nr+16383]] += 18;
@@ -508,7 +514,7 @@
 
 void GPU_buffer_copy_normal( DerivedMesh *dm, float *varray, int *index, int 
*redir, void *user )
 {
-       int i;
+       int i, numfaces;
        int start;
        float norm[3];
 
@@ -518,7 +524,8 @@
 
        DEBUG_VBO("GPU_buffer_copy_normal\n");
 
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       for( i=0; i < numfaces; i++ ) {
                start = index[redir[mface[i].mat_nr+16383]];
                if( mface[i].v4 )
                        index[redir[mface[i].mat_nr+16383]] += 18;
@@ -572,7 +579,7 @@
 void GPU_buffer_copy_uv( DerivedMesh *dm, float *varray, int *index, int 
*redir, void *user )
 {
        int start;
-       int i;
+       int i, numfaces;
 
        MTFace *mtface;
        MFace *mface;
@@ -587,7 +594,8 @@
                return;
        }
                
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       for( i=0; i < numfaces; i++ ) {
                start = index[redir[mface[i].mat_nr+16383]];
                if( mface[i].v4 )
                        index[redir[mface[i].mat_nr+16383]] += 12;
@@ -619,14 +627,15 @@
 
 void GPU_buffer_copy_color3( DerivedMesh *dm, float *varray_, int *index, int 
*redir, void *user )
 {
-       int i;
+       int i, numfaces;
        unsigned char *varray = (unsigned char *)varray_;
        unsigned char *mcol = (unsigned char *)user;
        MFace *mface = dm->getFaceArray(dm);
 
        DEBUG_VBO("GPU_buffer_copy_color3\n");
 
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       for( i=0; i < numfaces; i++ ) {
                int start = index[redir[mface[i].mat_nr+16383]];
                if( mface[i].v4 )
                        index[redir[mface[i].mat_nr+16383]] += 18;
@@ -648,14 +657,15 @@
 
 void GPU_buffer_copy_color4( DerivedMesh *dm, float *varray_, int *index, int 
*redir, void *user )
 {
-       int i;
+       int i, numfaces;
        unsigned char *varray = (unsigned char *)varray_;
        unsigned char *mcol = (unsigned char *)user;
        MFace *mface = dm->getFaceArray(dm);
 
        DEBUG_VBO("GPU_buffer_copy_color4\n");
 
-       for( i=0; i < dm->getNumFaces(dm); i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       for( i=0; i < numfaces; i++ ) {
                int start = index[redir[mface[i].mat_nr+16383]];
                if( mface[i].v4 )
                        index[redir[mface[i].mat_nr+16383]] += 18;
@@ -678,7 +688,7 @@
 GPUBuffer *GPU_buffer_color( DerivedMesh *dm )
 {
        unsigned char *colors;
-       int i;
+       int i, numfaces;
        MCol *mcol;
        GPUBuffer *result;
        DEBUG_VBO("GPU_buffer_color\n");
@@ -694,8 +704,9 @@
                dm->drawObject->colType = CD_MCOL;
        }
 
-       colors = MEM_mallocN(dm->getNumFaces(dm)*12*sizeof(unsigned char), 
"GPU_buffer_color");
-       for( i=0; i < dm->getNumFaces(dm)*4; i++ ) {
+       numfaces= dm->getNumFaces(dm);
+       colors = MEM_mallocN(numfaces*12*sizeof(unsigned char), 
"GPU_buffer_color");
+       for( i=0; i < numfaces*4; i++ ) {
                colors[i*3] = mcol[i].b;
                colors[i*3+1] = mcol[i].g;
                colors[i*3+2] = mcol[i].r;
@@ -714,13 +725,15 @@
        MVert *mvert;
        MEdge *medge;
        unsigned int *varray_ = (unsigned int *)varray;
+       int numedges;
  
        DEBUG_VBO("GPU_buffer_copy_edge\n");
 
        mvert = dm->getVertArray(dm);
        medge = dm->getEdgeArray(dm);
 
-       for(i = 0; i < dm->getNumEdges(dm); i++) {
+       numedges= dm->getNumEdges(dm);
+       for(i = 0; i < numedges; i++) {
                varray_[i*2] = (unsigned 
int)dm->drawObject->indices[medge[i].v1].element;
                varray_[i*2+1] = (unsigned 
int)dm->drawObject->indices[medge[i].v2].element;
        }
@@ -933,7 +946,7 @@
 void GPU_interleaved_setup( GPUBuffer *buffer, int data[] ) {
        int i;
        int elementsize = 0;
-       int offset = 0;
+       intptr_t offset = 0;
 
        DEBUG_VBO("GPU_interleaved_setup\n");
 
@@ -1068,7 +1081,7 @@
 void GPU_interleaved_attrib_setup( GPUBuffer *buffer, GPUAttrib data[], int 
numdata ) {
        int i;
        int elementsize;
-       int offset = 0;
+       intptr_t offset = 0;
 
        DEBUG_VBO("GPU_interleaved_attrib_setup\n");
 
@@ -1245,4 +1258,4 @@
        else {
                glDrawElements( mode, count, GL_UNSIGNED_INT, ((int 
*)elements->pointer)+start );
        }
-}
\ No newline at end of file
+}


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to