[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [10771] branches/bmesh/source/blender: BMesh Branch

Joseph Eagar joeedh at gmail.com
Thu May 24 05:21:04 CEST 2007


Revision: 10771
          https://svn.blender.org//revision/?rev=10771&view=rev
Author:   joeedh
Date:     2007-05-24 05:21:03 +0200 (Thu, 24 May 2007)

Log Message:
-----------
BMesh Branch

=Drawing Update=
Edges are now drawn in editmode.  Still haven't started
recoding the findnearest stuff yet, so nothing is
selectable.  

Also the derivedmesh backend for bmesh is
being remade every frame for some reason; since it uses
opengl vertex arrays this is actually slower then before.
Need to track down just what is remaking the derivedmesh each
frame :/

Modified Paths:
--------------
    branches/bmesh/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/bmesh/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/source/blender/src/drawobject.c

Modified: branches/bmesh/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/bmesh/source/blender/blenkernel/BKE_DerivedMesh.h	2007-05-24 02:44:57 UTC (rev 10770)
+++ branches/bmesh/source/blender/blenkernel/BKE_DerivedMesh.h	2007-05-24 03:21:03 UTC (rev 10771)
@@ -83,7 +83,7 @@
 	void (*drawFacesSolid)(void *vself, int usecolors);
 	void (*drawFacesTransp)(void *vself);
 	void (*drawVertPoints)(void *vself, float alpha);
-	void (*drawEdges)(void *vself);
+	void (*drawWireEdges)(void *vself, float alpha);
 
 	/*NOTE: does not free the struct pointed to at vself! just direct data*/
 	void (*release)(void *vself);
@@ -149,8 +149,8 @@
 
 	/*actual opengl array stuff:*/
 	bglCacheFaceGroup facegroups[MAX_FACEGROUP];
-	float *edgeverts;
-	char *edgecols;
+	float *wireverts;
+	char *wirecols;
 	float *pointverts;
 	char *pointcols;
 } bglCacheMesh;

Modified: branches/bmesh/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/DerivedMesh.c	2007-05-24 02:44:57 UTC (rev 10770)
+++ branches/bmesh/source/blender/blenkernel/intern/DerivedMesh.c	2007-05-24 03:21:03 UTC (rev 10771)
@@ -630,13 +630,15 @@
 {
 	EditBMeshDerivedMesh *emdm = (EditBMeshDerivedMesh*) dm;
 	emdm->bmesh = emdm->bmesh;
+	emdm->bmesh = emdm->bmesh;
+	if (emdm->recalc_cdraw) emDM_recalcDrawCache(emdm);
+
+	emdm->cdraw->drawWireEdges(emdm->cdraw, 1.0);
 }
 
 static void emDM_drawMappedEdgesInterp(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index), void (*setDrawInterpOptions)(void *userData, int index, float t), void *userData) 
 {
 	EditBMeshDerivedMesh *emdm = (EditBMeshDerivedMesh*) dm;
-	emdm->bmesh = emdm->bmesh;
-
 }
 
 static void emDM_drawUVEdges(DerivedMesh *dm)
@@ -658,15 +660,19 @@
 {
 	BME_Poly *efa;
 	BME_Loop *loop;
+	BME_Edge *eed;
 	BME_Vert *eve;
 	float v[3][3], no[3][3];
 	float nor[3], vsize;
-	char high[4], vcol[3], svcol[3];
+	char high[4], vcol[3], svcol[3], ecol[3], secol[3];
 
 	BIF_GetThemeColor3ubv(TH_VERTEX, vcol);
 	BIF_GetThemeColor3ubv(TH_VERTEX_SELECT, svcol);
 	vsize = BIF_GetThemeValuef(TH_VERTEX_SIZE);
 
+	BIF_GetThemeColor3ubv(TH_EDGE, ecol);
+	BIF_GetThemeColor3ubv(TH_EDGE_SELECT, secol);
+
 	/*Eck! remember to write code to set high (which is the transparent highlight color!)*/
 	if (!emdm->cdraw) emdm->cdraw = bglCacheNew();
 
@@ -705,6 +711,11 @@
 		else emdm->cdraw->addVertPoint(emdm->cdraw, eve->co, vcol, vsize);
 	}
 
+	printf("bleh 3\n");
+	for (eed=emdm->bmesh->edges.first; eed; eed=eed->next) {
+		if (eed->flag & SELECT) emdm->cdraw->addEdgeWire(emdm->cdraw, eed->v1->co, eed->v2->co, secol, secol);
+		else emdm->cdraw->addEdgeWire(emdm->cdraw, eed->v1->co, eed->v2->co, ecol, ecol);
+	}
 	emdm->recalc_cdraw = 0;
 	emdm->cdraw->endCache(emdm->cdraw);
 }

Modified: branches/bmesh/source/blender/src/drawobject.c
===================================================================
--- branches/bmesh/source/blender/src/drawobject.c	2007-05-24 02:44:57 UTC (rev 10770)
+++ branches/bmesh/source/blender/src/drawobject.c	2007-05-24 03:21:03 UTC (rev 10771)
@@ -1933,8 +1933,13 @@
 	VECCOPY(ewire->v1, v1);
 	VECCOPY(ewire->v2, v2);
 	if (c1) VECCOPY(ewire->c2, c2);
-	if (c2) VECCOPY(ewire->c2, c2);
-	
+
+	if (c2) {
+		VECCOPY(ewire->c2, c2);
+	} else if (c1) {
+		VECCOPY(ewire->c2, c1);
+	}
+
 	self->totwire++;
 	BLI_addtail(&self->wires, ewire);
 }
@@ -1959,6 +1964,7 @@
 	bglCacheMesh *self = (bglCacheMesh*) vself;
 	bglCacheFaceGroup *group;
 	bglTriangle *tri;
+	bglEdgeWire *wire;
 	bglVertPoint *point;
 	int i, j;
 
@@ -1995,6 +2001,17 @@
 		}
 	}
 
+	if (self->totwire) {
+		self->wireverts = BLI_memarena_alloc(self->gl_arena, sizeof(float)*3*2*self->totwire);
+		self->wireverts = BLI_memarena_alloc(self->gl_arena, 3*2*self->totwire);
+		for (wire=self->wires.first, i=0; wire; i++, wire=wire->next) {
+			VECCOPY(self->wireverts+i*3*2, wire->v1);
+			VECCOPY(self->wireverts+i*3*2+3, wire->v2);
+			VECCOPY(self->wireverts+i*3*2, wire->v1);
+			VECCOPY(self->wireverts+i*3*2+3, wire->v2);
+		}
+	}
+
 	self->initilized = 3;
 
 	BLI_memarena_free(self->arena);
@@ -2063,15 +2080,31 @@
 	glDisableClientState(GL_VERTEX_ARRAY);
 }
 
-void BGLCache_drawEdges(void *vself)
+void BGLCache_drawEdges(void *vself, float alpha)
 {
+	bglCacheMesh *self = (bglCacheMesh*) vself;
+
+	glDisableClientState(GL_COLOR_ARRAY); /*I remember this can be left on by some of the other vert array code :/ */
+	glDisableClientState(GL_NORMAL_ARRAY); /* this is just paranoia check */
+
+	glColor4f(0, 0, 0, alpha); /*hopefully the color array won't affect alpha. . .eck :/ */
+
+	glEnableClientState(GL_VERTEX_ARRAY);
+	if (self->totwire) {
+		glVertexPointer(3, GL_FLOAT, 0, self->wireverts);
+		if (self->wirecols) {
+			glEnableClientState(GL_COLOR_ARRAY);
+			glColorPointer(3, GL_UNSIGNED_BYTE, 0, self->wirecols);
+		}
+		glDrawArrays(GL_LINES, 0, self->totwire*2);
+	}
+	glDisableClientState(GL_COLOR_ARRAY);
+	glDisableClientState(GL_VERTEX_ARRAY);
 }
 
 void BGLCache_release(void *vself)
 {
 	bglCacheMesh *self = (bglCacheMesh*) vself;
-	bglCacheFaceGroup *group;
-	int i;
 
 	if (self->arena) BLI_memarena_free(self->arena);
 	if (self->gl_arena) BLI_memarena_free(self->gl_arena);
@@ -2089,7 +2122,8 @@
 	self->points.first = self->points.last = NULL;
 
 	memset(self->facegroups, 0, sizeof(bglCacheFaceGroup)*MAX_FACEGROUP);
-	self->edgeverts = self->edgecols = self->pointverts = self->pointcols = NULL;
+	self->wireverts = self->pointverts = NULL;
+	self->wirecols = self->pointcols = NULL;
 }
 
 
@@ -2147,7 +2181,12 @@
 		glDepthMask(0);
 	}
 
+	if (finalDM->drawEdges) finalDM->drawEdges(finalDM, 1);
+
 	if (finalDM->drawEditVerts) finalDM->drawEditVerts(finalDM, 1.0);
+
+	glDepthMask(1);
+	bglPolygonOffset(0.0);
 }
 
 /*this is only here for reference, REMEBER TO DELETE IT!*/





More information about the Bf-blender-cvs mailing list