Revision: 44645
http://brlcad.svn.sourceforge.net/brlcad/?rev=44645&view=rev
Author: bob1961
Date: 2011-05-20 13:18:53 +0000 (Fri, 20 May 2011)
Log Message:
-----------
Copy points/vectors to an array of GLdouble before sending to OpenGL. This
seems to have remedied a bit of strange behavior seen only on windows (i.e.
data arrows were sometimes being drawn incorrectly).
Modified Paths:
--------------
brlcad/trunk/src/libdm/dm-wgl.c
Modified: brlcad/trunk/src/libdm/dm-wgl.c
===================================================================
--- brlcad/trunk/src/libdm/dm-wgl.c 2011-05-20 13:13:06 UTC (rev 44644)
+++ brlcad/trunk/src/libdm/dm-wgl.c 2011-05-20 13:18:53 UTC (rev 44645)
@@ -962,36 +962,41 @@
register int nused = tvp->nused;
register int *cmd = tvp->cmd;
register point_t *pt = tvp->pt;
+ GLdouble glpt[3];
for (i = 0; i < nused; i++, cmd++, pt++) {
if (dmp->dm_debugLevel > 2)
bu_log(" %d (%g %g %g)\n", *cmd, V3ARGS(pt));
switch (*cmd) {
case BN_VLIST_LINE_MOVE:
+ case BN_VLIST_LINE_DRAW:
break;
case BN_VLIST_POLY_START:
/* Start poly marker & normal */
if (first == 0)
glEnd();
+ first = 0;
glBegin(GL_POLYGON);
/* Set surface normal (vl_pnt points outward) */
- glNormal3dv(*pt);
+ VMOVE(glpt, *pt);
+ glNormal3dv(glpt);
break;
- case BN_VLIST_LINE_DRAW:
- break;
case BN_VLIST_POLY_MOVE:
case BN_VLIST_POLY_DRAW:
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
break;
case BN_VLIST_POLY_END:
/* Draw, End Polygon */
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
glEnd();
first = 1;
break;
case BN_VLIST_POLY_VERTNORM:
/* Set per-vertex normal. Given before vert. */
- glNormal3dv(*pt);
+ VMOVE(glpt, *pt);
+ glNormal3dv(glpt);
break;
}
}
@@ -1000,7 +1005,6 @@
if (first == 0)
glEnd();
-
/* Last, draw wireframe/edges. */
/* Set color to wireColor for drawing wireframe/edges */
@@ -1013,6 +1017,7 @@
register int nused = tvp->nused;
register int *cmd = tvp->cmd;
register point_t *pt = tvp->pt;
+ GLdouble glpt[3];
for (i = 0; i < nused; i++, cmd++, pt++) {
if (dmp->dm_debugLevel > 2)
bu_log(" %d (%g %g %g)\n", *cmd, V3ARGS(pt));
@@ -1024,28 +1029,33 @@
first = 0;
glBegin(GL_LINE_STRIP);
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
break;
case BN_VLIST_POLY_START:
/* Start poly marker & normal */
if (first == 0)
glEnd();
+ first = 0;
glBegin(GL_LINE_STRIP);
break;
case BN_VLIST_LINE_DRAW:
case BN_VLIST_POLY_MOVE:
case BN_VLIST_POLY_DRAW:
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
break;
case BN_VLIST_POLY_END:
/* Draw, End Polygon */
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
glEnd();
first = 1;
break;
case BN_VLIST_POLY_VERTNORM:
/* Set per-vertex normal. Given before vert. */
+ VMOVE(glpt, glpt);
glNormal3dv(*pt);
break;
}
@@ -1088,10 +1098,11 @@
/* Viewing region is from -1.0 to +1.0 */
first = 1;
for (BU_LIST_FOR(tvp, bn_vlist, &vp->l)) {
- int i;
- int nused = tvp->nused;
- int *cmd = tvp->cmd;
- point_t *pt = tvp->pt;
+ register int i;
+ register int nused = tvp->nused;
+ register int *cmd = tvp->cmd;
+ register point_t *pt = tvp->pt;
+ GLdouble glpt[3];
for (i = 0; i < nused; i++, cmd++, pt++) {
if (dmp->dm_debugLevel > 2)
bu_log(" %d (%g %g %g)\n", *cmd, V3ARGS(pt));
@@ -1114,12 +1125,14 @@
}
glBegin(GL_LINE_STRIP);
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
break;
case BN_VLIST_POLY_START:
/* Start poly marker & normal */
if (first == 0)
glEnd();
+ first = 0;
if (dmp->dm_light && mflag) {
mflag = 0;
@@ -1139,22 +1152,26 @@
glBegin(GL_POLYGON);
/* Set surface normal (vl_pnt points outward) */
- glNormal3dv(*pt);
+ VMOVE(glpt, *pt);
+ glNormal3dv(glpt);
break;
case BN_VLIST_LINE_DRAW:
case BN_VLIST_POLY_MOVE:
case BN_VLIST_POLY_DRAW:
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
break;
case BN_VLIST_POLY_END:
/* Draw, End Polygon */
- glVertex3dv(*pt);
+ VMOVE(glpt, *pt);
+ glVertex3dv(glpt);
glEnd();
first = 1;
break;
case BN_VLIST_POLY_VERTNORM:
/* Set per-vertex normal. Given before vert. */
- glNormal3dv(*pt);
+ VMOVE(glpt, *pt);
+ glNormal3dv(glpt);
break;
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its
next-generation tools to help Windows* and Linux* C/C++ and Fortran
developers boost performance applications - including clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits