[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23639] trunk/blender/source/blender/gpu/ intern/gpu_buffers.c: VBO:
Brecht Van Lommel
brecht at blender.org
Mon Oct 5 18:48:52 CEST 2009
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
+}
More information about the Bf-blender-cvs
mailing list