[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22178] branches/soc-2009-imbusy/source/ blender/editors: improved vertex drawing
Lukas Steiblys
imbusy at imbusy.org
Mon Aug 3 16:00:25 CEST 2009
Revision: 22178
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22178
Author: imbusy
Date: 2009-08-03 16:00:23 +0200 (Mon, 03 Aug 2009)
Log Message:
-----------
improved vertex drawing
Modified Paths:
--------------
branches/soc-2009-imbusy/source/blender/editors/include/BIF_glutil.h
branches/soc-2009-imbusy/source/blender/editors/screen/glutil.c
branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c
Modified: branches/soc-2009-imbusy/source/blender/editors/include/BIF_glutil.h
===================================================================
--- branches/soc-2009-imbusy/source/blender/editors/include/BIF_glutil.h 2009-08-03 13:46:45 UTC (rev 22177)
+++ branches/soc-2009-imbusy/source/blender/editors/include/BIF_glutil.h 2009-08-03 14:00:23 UTC (rev 22178)
@@ -197,6 +197,7 @@
/* use this for platform hacks. glPointSize is solved here */
void bglBegin(int mode);
void bglEnd(void);
+int bglPointHack();
void bglVertex3fv(float *vec);
void bglVertex3f(float x, float y, float z);
void bglVertex2fv(float *vec);
Modified: branches/soc-2009-imbusy/source/blender/editors/screen/glutil.c
===================================================================
--- branches/soc-2009-imbusy/source/blender/editors/screen/glutil.c 2009-08-03 13:46:45 UTC (rev 22177)
+++ branches/soc-2009-imbusy/source/blender/editors/screen/glutil.c 2009-08-03 14:00:23 UTC (rev 22178)
@@ -720,6 +720,18 @@
}
}
+int bglPointHack() {
+ float value[4];
+ int pointhack;
+ glGetFloatv(GL_POINT_SIZE_RANGE, value);
+ if(value[1]<2.0) {
+ glGetFloatv(GL_POINT_SIZE, value);
+ pointhack= floor(value[0]+0.5);
+ if(pointhack>4) pointhack= 4;
+ return pointhack;
+ }
+ return 0;
+}
void bglVertex3fv(float *vec)
{
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-03 13:46:45 UTC (rev 22177)
+++ branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c 2009-08-03 14:00:23 UTC (rev 22178)
@@ -1512,7 +1512,7 @@
bglEnd();
- glPointSize(size);
+ //glPointSize(size);
bglBegin(GL_POINTS);
bglVertex3fv(co);
bglEnd();
@@ -1525,15 +1525,72 @@
}
}
}
+/* originally defined in DerivedMesh.c */
+typedef struct {
+ DerivedMesh dm;
+
+ EditMesh *em;
+ float (*vertexCos)[3];
+ float (*vertexNos)[3];
+ float (*faceNos)[3];
+} EditMeshDerivedMesh;
+
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;
-
- bglBegin(GL_POINTS);
- dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
- bglEnd();
+
+ /* first come the unselected vertices, then the selected */
+ buffer = 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 );
+ 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();
+ }
+ else {
+ bglBegin(GL_POINTS);
+ dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
+ bglEnd();
+ }
+ GPU_buffer_free( buffer, 0 );
}
/* Draw edges with color set based on selection */
@@ -1602,16 +1659,6 @@
col0[3] + (col1[3]-col0[3])*t);
}
-/* originally defined in DerivedMesh.c */
-typedef struct {
- DerivedMesh dm;
-
- EditMesh *em;
- float (*vertexCos)[3];
- float (*vertexNos)[3];
- float (*faceNos)[3];
-} EditMeshDerivedMesh;
-
static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol)
{
unsigned char *cols[2];
More information about the Bf-blender-cvs
mailing list