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

Reply via email to