[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22296] branches/soc-2009-imbusy/source/ blender/editors/space_view3d/drawobject.c: subsurf editmode crash fix
Lukas Steiblys
imbusy at imbusy.org
Fri Aug 7 12:41:14 CEST 2009
Revision: 22296
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22296
Author: imbusy
Date: 2009-08-07 12:41:13 +0200 (Fri, 07 Aug 2009)
Log Message:
-----------
subsurf editmode crash fix
Modified Paths:
--------------
branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c
Modified: branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c 2009-08-07 09:45:48 UTC (rev 22295)
+++ branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c 2009-08-07 10:41:13 UTC (rev 22296)
@@ -2396,9 +2396,8 @@
}
}
else {
- EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) finalDM;
/* 3 floats for position, 3 for normal and times two because the faces may actually be quads instead of triangles */
- GPUBuffer *buffer = GPU_buffer_alloc( sizeof(float)*6*emdm->em->totface*3*2, 0 );
+ GPUBuffer *buffer = GPU_buffer_alloc( sizeof(float)*6*em->totface*3*2, 0 );
float *varray;
EditFace *efa;
int i, curmat = 0, draw = 0;
@@ -2408,7 +2407,7 @@
glEnable(GL_LIGHTING);
glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
- if( (varray = GPU_buffer_lock_stream( buffer )) ) {
+ if( finalDM->getVertCos == 0 && (varray = GPU_buffer_lock_stream( buffer )) ) {
int prevdraw = 0, prevmat = 0;
int numfaces = 0;
int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_N3F, GPU_BUFFER_INTER_END };
@@ -2416,7 +2415,7 @@
GPU_interleaved_setup( buffer, datatype );
glShadeModel(GL_SMOOTH);
GPU_buffer_lock_stream( buffer );
- for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
+ for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
int drawSmooth = (efa->flag & ME_SMOOTH);
if( efa->h == 0 ) {
curmat = efa->mat_nr+1;
@@ -2441,97 +2440,47 @@
}
if( draw != 0 ) {
if(!drawSmooth) {
- if( emdm->vertexCos )
- {
- VECCOPY(&varray[numfaces*18],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY(&varray[numfaces*18+3],emdm->faceNos[i]);
+ VECCOPY(&varray[numfaces*18],efa->v1->co);
+ VECCOPY(&varray[numfaces*18+3],efa->n);
- VECCOPY(&varray[numfaces*18+6],emdm->vertexCos[(int) efa->v2->tmp.l]);
- VECCOPY(&varray[numfaces*18+9],emdm->faceNos[i]);
+ VECCOPY(&varray[numfaces*18+6],efa->v2->co);
+ VECCOPY(&varray[numfaces*18+9],efa->n);
- VECCOPY(&varray[numfaces*18+12],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY(&varray[numfaces*18+15],emdm->faceNos[i]);
- numfaces++;
- if( efa->v4 ) {
- VECCOPY(&varray[numfaces*18],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY(&varray[numfaces*18+3],emdm->faceNos[i]);
-
- VECCOPY(&varray[numfaces*18+6],emdm->vertexCos[(int) efa->v4->tmp.l]);
- VECCOPY(&varray[numfaces*18+9],emdm->faceNos[i]);
-
- VECCOPY(&varray[numfaces*18+12],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY(&varray[numfaces*18+15],emdm->faceNos[i]);
- numfaces++;
- }
- }
- else {
- VECCOPY(&varray[numfaces*18],efa->v1->co);
+ VECCOPY(&varray[numfaces*18+12],efa->v3->co);
+ VECCOPY(&varray[numfaces*18+15],efa->n);
+ numfaces++;
+ if( efa->v4 ) {
+ VECCOPY(&varray[numfaces*18],efa->v3->co);
VECCOPY(&varray[numfaces*18+3],efa->n);
- VECCOPY(&varray[numfaces*18+6],efa->v2->co);
+ VECCOPY(&varray[numfaces*18+6],efa->v4->co);
VECCOPY(&varray[numfaces*18+9],efa->n);
- VECCOPY(&varray[numfaces*18+12],efa->v3->co);
+ VECCOPY(&varray[numfaces*18+12],efa->v1->co);
VECCOPY(&varray[numfaces*18+15],efa->n);
numfaces++;
- if( efa->v4 ) {
- VECCOPY(&varray[numfaces*18],efa->v3->co);
- VECCOPY(&varray[numfaces*18+3],efa->n);
-
- VECCOPY(&varray[numfaces*18+6],efa->v4->co);
- VECCOPY(&varray[numfaces*18+9],efa->n);
-
- VECCOPY(&varray[numfaces*18+12],efa->v1->co);
- VECCOPY(&varray[numfaces*18+15],efa->n);
- numfaces++;
- }
}
}
else {
- if( emdm->vertexCos )
- {
- VECCOPY(&varray[numfaces*18],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY(&varray[numfaces*18+3],emdm->vertexNos[(int) efa->v1->tmp.l]);
+ VECCOPY(&varray[numfaces*18],efa->v1->co);
+ VECCOPY(&varray[numfaces*18+3],efa->v1->no);
- VECCOPY(&varray[numfaces*18+6],emdm->vertexCos[(int) efa->v2->tmp.l]);
- VECCOPY(&varray[numfaces*18+9],emdm->vertexNos[(int) efa->v2->tmp.l]);
+ VECCOPY(&varray[numfaces*18+6],efa->v2->co);
+ VECCOPY(&varray[numfaces*18+9],efa->v2->no);
- VECCOPY(&varray[numfaces*18+12],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY(&varray[numfaces*18+15],emdm->vertexNos[(int) efa->v3->tmp.l]);
- numfaces++;
- if( efa->v4 ) {
- VECCOPY(&varray[numfaces*18],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY(&varray[numfaces*18+3],emdm->vertexNos[(int) efa->v3->tmp.l]);
+ VECCOPY(&varray[numfaces*18+12],efa->v3->co);
+ VECCOPY(&varray[numfaces*18+15],efa->v3->no);
+ numfaces++;
+ if( efa->v4 ) {
+ VECCOPY(&varray[numfaces*18],efa->v3->co);
+ VECCOPY(&varray[numfaces*18+3],efa->v3->no);
- VECCOPY(&varray[numfaces*18+6],emdm->vertexCos[(int) efa->v4->tmp.l]);
- VECCOPY(&varray[numfaces*18+9],emdm->vertexNos[(int) efa->v4->tmp.l]);
+ VECCOPY(&varray[numfaces*18+6],efa->v4->co);
+ VECCOPY(&varray[numfaces*18+9],efa->v4->no);
- VECCOPY(&varray[numfaces*18+12],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY(&varray[numfaces*18+15],emdm->vertexNos[(int) efa->v1->tmp.l]);
- numfaces++;
- }
- }
- else {
- VECCOPY(&varray[numfaces*18],efa->v1->co);
- VECCOPY(&varray[numfaces*18+3],efa->v1->no);
-
- VECCOPY(&varray[numfaces*18+6],efa->v2->co);
- VECCOPY(&varray[numfaces*18+9],efa->v2->no);
-
- VECCOPY(&varray[numfaces*18+12],efa->v3->co);
- VECCOPY(&varray[numfaces*18+15],efa->v3->no);
+ VECCOPY(&varray[numfaces*18+12],efa->v1->co);
+ VECCOPY(&varray[numfaces*18+15],efa->v1->no);
numfaces++;
- if( efa->v4 ) {
- VECCOPY(&varray[numfaces*18],efa->v3->co);
- VECCOPY(&varray[numfaces*18+3],efa->v3->no);
-
- VECCOPY(&varray[numfaces*18+6],efa->v4->co);
- VECCOPY(&varray[numfaces*18+9],efa->v4->no);
-
- VECCOPY(&varray[numfaces*18+12],efa->v1->co);
- VECCOPY(&varray[numfaces*18+15],efa->v1->no);
- numfaces++;
- }
}
}
}
More information about the Bf-blender-cvs
mailing list