[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25844] trunk/blender/source/blender: Fix #19659, #20387, #20489, part of #20565.

Brecht Van Lommel brecht at blender.org
Fri Jan 8 18:53:17 CET 2010


Revision: 25844
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25844
Author:   blendix
Date:     2010-01-08 18:53:17 +0100 (Fri, 08 Jan 2010)

Log Message:
-----------
Fix #19659, #20387, #20489, part of #20565. VBO's in edit mode were not
working well, and no one seems to be fixing it, so I've just removed the
code for this. It has to be replaced eventually for bmesh anyway.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-01-08 17:52:21 UTC (rev 25843)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-01-08 17:53:17 UTC (rev 25844)
@@ -523,56 +523,14 @@
 		}
 		glEnd();
 	} else {
-		GPUBuffer *buffer = NULL;
-		float *varray;
-
-		if(GPU_buffer_legacy(dm)==FALSE)
-			buffer = GPU_buffer_alloc( sizeof(float)*3*2*emdm->em->totedge, 0 );
-
-		if( buffer != 0 && (varray = GPU_buffer_lock_stream( buffer )) ) {
-			int prevdraw = 0;
-			int numedges = 0;
-			int draw = 0;
-			int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_END };
-			GPU_buffer_unlock( buffer );
-			GPU_interleaved_setup( buffer, datatype );
-			varray = GPU_buffer_lock_stream( buffer );
-			for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
-				if(!setDrawOptions || setDrawOptions(userData, i)) {
-					draw = 1;
-				} else {
-					draw = 0;
-				}
-				if( prevdraw != draw && prevdraw != 0 && numedges > 0) {
-					GPU_buffer_unlock( buffer );
-					glDrawArrays(GL_LINES,0,numedges*2);
-					varray = GPU_buffer_lock_stream( buffer );
-					numedges = 0;
-				}
-				if( draw != 0 ) {
-					VECCOPY(&varray[numedges*6],eed->v1->co);
-					VECCOPY(&varray[numedges*6+3],eed->v2->co);
-					numedges++;
-				}
-				prevdraw = draw;
+		glBegin(GL_LINES);
+		for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
+			if(!setDrawOptions || setDrawOptions(userData, i)) {
+				glVertex3fv(eed->v1->co);
+				glVertex3fv(eed->v2->co);
 			}
-			GPU_buffer_unlock( buffer );
-			if( prevdraw != 0 && numedges > 0) {
-				glDrawArrays(GL_LINES,0,numedges*2);
-			}
-			GPU_buffer_unbind();
-		} else {
-			glBegin(GL_LINES);
-			for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
-				if(!setDrawOptions || setDrawOptions(userData, i)) {
-					glVertex3fv(eed->v1->co);
-					glVertex3fv(eed->v2->co);
-				}
-			}
-			glEnd();
 		}
-		if( buffer != 0 )
-			GPU_buffer_free( buffer, 0 );
+		glEnd();
 	}
 }
 static void emDM_drawEdges(DerivedMesh *dm, int drawLooseEdges)
@@ -733,135 +691,41 @@
 			}
 		}
 	} else {
-		GPUBuffer *buffer = 0;
-		float *varray;
-		if( setDrawOptions == 0 ) {
-			/* 3 floats for position, 3 for normal and times two because the faces may actually be quads instead of triangles */
-			buffer = GPU_buffer_alloc( sizeof(float)*6*emdm->em->totface*3*2, 0 );
-		}
-		if( buffer != 0 && (varray = GPU_buffer_lock_stream( buffer )) ) {
-			int prevdraw = 0;
-			int numfaces = 0;
-			int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_N3F, GPU_BUFFER_INTER_END };
-			GPU_buffer_unlock( buffer );
-			GPU_interleaved_setup( buffer, datatype );
-			glShadeModel(GL_SMOOTH);
-			varray = GPU_buffer_lock_stream( buffer );
-			for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
-				int drawSmooth = (efa->flag & ME_SMOOTH);
-				draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth);
-				if( prevdraw != draw && prevdraw != 0 && numfaces > 0) {
-					if( prevdraw==2 ) {
-						glEnable(GL_POLYGON_STIPPLE);
-		  				glPolygonStipple(stipple_quarttone);
-					}
-					GPU_buffer_unlock( buffer );
-					glDrawArrays(GL_TRIANGLES,0,numfaces*3);
-					if( prevdraw==2 ) {
-						glDisable(GL_POLYGON_STIPPLE);
-					}
-					varray = GPU_buffer_lock_stream( buffer );
-					numfaces = 0;
+		for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
+			int drawSmooth = (efa->flag & ME_SMOOTH);
+			draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth);
+			if(draw) {
+				if (draw==2) { /* enabled with stipple */
+					glEnable(GL_POLYGON_STIPPLE);
+					glPolygonStipple(stipple_quarttone);
 				}
-				if( draw != 0 ) {
-					if(!drawSmooth) {
-						VECCOPY(&varray[numfaces*18],efa->v1->co);
-						VECCOPY(&varray[numfaces*18+3],efa->n);
+				glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
 
-						VECCOPY(&varray[numfaces*18+6],efa->v2->co);
-						VECCOPY(&varray[numfaces*18+9],efa->n);
-
-						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->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++;
-						}
+				glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
+				if (!drawSmooth) {
+					glNormal3fv(efa->n);
+					glVertex3fv(efa->v1->co);
+					glVertex3fv(efa->v2->co);
+					glVertex3fv(efa->v3->co);
+					if(efa->v4) glVertex3fv(efa->v4->co);
+				} else {
+					glNormal3fv(efa->v1->no);
+					glVertex3fv(efa->v1->co);
+					glNormal3fv(efa->v2->no);
+					glVertex3fv(efa->v2->co);
+					glNormal3fv(efa->v3->no);
+					glVertex3fv(efa->v3->co);
+					if(efa->v4) {
+						glNormal3fv(efa->v4->no);
+						glVertex3fv(efa->v4->co);
 					}
-					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);
-						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++;
-						}
-					}
 				}
-				prevdraw = draw;
-			}
-			GPU_buffer_unlock( buffer );
-			if( prevdraw != 0 && numfaces > 0) {
-				if( prevdraw==2 ) {
-					glEnable(GL_POLYGON_STIPPLE);
-	  				glPolygonStipple(stipple_quarttone);
-				}
-				glDrawArrays(GL_TRIANGLES,0,numfaces*3);
-				if( prevdraw==2 ) {
+				glEnd();
+				
+				if (draw==2)
 					glDisable(GL_POLYGON_STIPPLE);
-				}
 			}
-			GPU_buffer_unbind();
-		} else {
-			for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
-				int drawSmooth = (efa->flag & ME_SMOOTH);
-				draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth);
-				if(draw) {
-					if (draw==2) { /* enabled with stipple */
-		  				glEnable(GL_POLYGON_STIPPLE);
-		  				glPolygonStipple(stipple_quarttone);
-					}
-					glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
-
-					glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
-					if (!drawSmooth) {
-						glNormal3fv(efa->n);
-						glVertex3fv(efa->v1->co);
-						glVertex3fv(efa->v2->co);
-						glVertex3fv(efa->v3->co);
-						if(efa->v4) glVertex3fv(efa->v4->co);
-					} else {
-						glNormal3fv(efa->v1->no);
-						glVertex3fv(efa->v1->co);
-						glNormal3fv(efa->v2->no);
-						glVertex3fv(efa->v2->co);
-						glNormal3fv(efa->v3->no);
-						glVertex3fv(efa->v3->co);
-						if(efa->v4) {
-							glNormal3fv(efa->v4->no);
-							glVertex3fv(efa->v4->co);
-						}
-					}
-					glEnd();
-					
-					if (draw==2)
-						glDisable(GL_POLYGON_STIPPLE);
-				}
-			}
 		}
-		if( buffer != 0 )
-			GPU_buffer_free( buffer, 0 );
 	}
 }
 

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2010-01-08 17:52:21 UTC (rev 25843)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2010-01-08 17:53:17 UTC (rev 25844)
@@ -103,7 +103,6 @@
 #include "GPU_draw.h"
 #include "GPU_material.h"
 #include "GPU_extensions.h"
-#include "gpu_buffers.h"
 
 #include "ED_mesh.h"
 #include "ED_particle.h"
@@ -820,6 +819,8 @@
 		circrad = 3.0f*lampsize;
 		drawcircball(GL_LINE_LOOP, vec, circrad, imat);
 	}
+	else
+		circrad = 0.0f;
 	
 	setlinestyle(3);
 
@@ -1575,82 +1576,15 @@
 	}
 }
 
-/* disabled because it crashes combined with e.g. subsurf modifier,
- * the derivedmesh can't be assumed to be an EditMeshDerivedMesh,
- * nor should this struct be copied around, it should be defined in
- * a single place only to avoid them getting out of sync */
-#if 0
-/* originally defined in DerivedMesh.c */
-typedef struct {
-	DerivedMesh dm;
-
-	EditMesh *em;
-	float (*vertexCos)[3];
-	float (*vertexNos)[3];
-	float (*faceNos)[3];
-} EditMeshDerivedMesh;
-#endif
-
 static void draw_dm_verts(DerivedMesh *dm, int sel, EditVert *eve_act)
 {
 	struct { int sel; EditVert *eve_act; } data;
-	//GPUBuffer *buffer;
-	//float *varray;
 	data.sel = sel;
 	data.eve_act = eve_act;
 
-#if 0
-	/* first come the unselected vertices, then the selected */
-	buffer = GPU_buffer_legacy(dm)?0:GPU_buffer_alloc( sizeof(float)*3*dm->getNumVerts(dm)*2, 0 );
-
-	if( (varray = GPU_buffer_lock_stream( buffer )) && bglPointHack() == 0 ) {
-		EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
-		EditVert *eve;
-		int i;
-		int numverts = 0, numselected = 0;
-		int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_END };
-		GPU_buffer_unlock( buffer );
-		GPU_interleaved_setup( buffer, datatype );
-		varray = GPU_buffer_lock_stream( buffer );
-
-		glBegin(GL_POINTS);
-		for (i=0,eve= emdm->em->verts.first; eve; i++,eve=eve->next) {
-			if (eve->h==0 && (eve->f&SELECT)==data.sel) {
-				if (eve==data.eve_act) {
-					if (emdm->vertexCos) {
-						VECCOPY(&varray[3*(dm->getNumVerts(dm)+numselected)],emdm->vertexCos[i]);
-					}
-					else {
-						VECCOPY(&varray[3*(dm->getNumVerts(dm)+numselected)],eve->co);
-					}
-					numselected++;
-				} else {
-					if (emdm->vertexCos) {
-						VECCOPY(&varray[3*numverts],emdm->vertexCos[i]);
-					} else {
-						VECCOPY(&varray[3*numverts],eve->co);
-					}
-					numverts++;
-				}
-			}
-		}
-		glEnd();
-		GPU_buffer_unlock( buffer );
-		glDrawArrays(GL_POINTS,0,numverts);
-		UI_ThemeColor4(TH_EDITMESH_ACTIVE);
-		glDrawArrays(GL_POINTS,dm->getNumVerts(dm),numselected);
-		UI_ThemeColor4(data.sel?TH_VERTEX_SELECT:TH_VERTEX);
-		GPU_buffer_unbind();
-	}
-	{
-#endif
-		bglBegin(GL_POINTS);
-		dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
-		bglEnd();
-#if 0
-	}
-	GPU_buffer_free( buffer, 0 );
-#endif
+	bglBegin(GL_POINTS);
+	dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
+	bglEnd();
 }
 
 	/* Draw edges with color set based on selection */
@@ -1722,55 +1656,8 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list