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 brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits