Revision: 57181
          http://sourceforge.net/p/brlcad/code/57181
Author:   n_reed
Date:     2013-08-27 17:00:36 +0000 (Tue, 27 Aug 2013)
Log Message:
-----------
Make it possible to specify a point size or line width within a vlist. 
Implemented for ogl vlist drawing.

Modified Paths:
--------------
    brlcad/trunk/include/bn.h
    brlcad/trunk/include/raytrace.h
    brlcad/trunk/src/libdm/dm-ogl.c
    brlcad/trunk/src/libged/dg_obj.c
    brlcad/trunk/src/libged/draw.c
    brlcad/trunk/src/libged/select.c
    brlcad/trunk/src/mged/dodraw.c

Modified: brlcad/trunk/include/bn.h
===================================================================
--- brlcad/trunk/include/bn.h   2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/include/bn.h   2013-08-27 17:00:36 UTC (rev 57181)
@@ -4107,8 +4107,10 @@
 #define BN_VLIST_TRI_DRAW      9       /**< @brief subsequent triangle vertex 
*/
 #define BN_VLIST_TRI_END       10      /**< @brief last vert (repeats 1st), 
draw poly */
 #define BN_VLIST_TRI_VERTNORM  11      /**< @brief per-vertex normal, for 
interpolation */
-#define BN_VLIST_POINT_DRAW    12      /**< @brief  Draw a single point */
-#define BN_VLIST_CMD_MAX       12      /**< @brief  Max command number */
+#define BN_VLIST_POINT_DRAW    12      /**< @brief Draw a single point */
+#define BN_VLIST_POINT_SIZE    13      /**< @brief specify point pixel size */
+#define BN_VLIST_LINE_WIDTH    14      /**< @brief specify line pixel width */
+#define BN_VLIST_CMD_MAX       14      /**< @brief Max command number */
 
 /**
  * Applications that are going to use BN_ADD_VLIST and BN_GET_VLIST
@@ -4146,6 +4148,32 @@
        _vp->cmd[_vp->nused++] = (draw); \
     }
 
+/** Set a point size to apply to the vlist elements that follow. */
+#define BN_VLIST_SET_POINT_SIZE(_free_hd, _dest_hd, _size) { \
+       struct bn_vlist *_vp; \
+       BU_CK_LIST_HEAD(_dest_hd); \
+       _vp = BU_LIST_LAST(bn_vlist, (_dest_hd)); \
+       if (BU_LIST_IS_HEAD(_vp, (_dest_hd)) || _vp->nused >= BN_VLIST_CHUNK) { 
\
+           BN_GET_VLIST(_free_hd, _vp); \
+           BU_LIST_INSERT((_dest_hd), &(_vp->l)); \
+       } \
+       _vp->pt[_vp->nused][0] = (_size); \
+       _vp->cmd[_vp->nused++] = BN_VLIST_POINT_SIZE; \
+}
+
+/** Set a line width to apply to the vlist elements that follow. */
+#define BN_VLIST_SET_LINE_WIDTH(_free_hd, _dest_hd, _width) { \
+       struct bn_vlist *_vp; \
+       BU_CK_LIST_HEAD(_dest_hd); \
+       _vp = BU_LIST_LAST(bn_vlist, (_dest_hd)); \
+       if (BU_LIST_IS_HEAD(_vp, (_dest_hd)) || _vp->nused >= BN_VLIST_CHUNK) { 
\
+           BN_GET_VLIST(_free_hd, _vp); \
+           BU_LIST_INSERT((_dest_hd), &(_vp->l)); \
+       } \
+       _vp->pt[_vp->nused][0] = (_width); \
+       _vp->cmd[_vp->nused++] = BN_VLIST_LINE_WIDTH; \
+}
+
 /**
  * B N _ V L B L O C K
  *

Modified: brlcad/trunk/include/raytrace.h
===================================================================
--- brlcad/trunk/include/raytrace.h     2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/include/raytrace.h     2013-08-27 17:00:36 UTC (rev 57181)
@@ -1945,7 +1945,13 @@
 
 #define RT_ADD_VLIST(hd, pnt, draw) BN_ADD_VLIST(&RTG.rtg_vlfree, hd, pnt, 
draw)
 
+/** Set a point size to apply to the vlist elements that follow. */
+#define RT_VLIST_SET_POINT_SIZE(hd, size) 
BN_VLIST_SET_POINT_SIZE(&RTG.rtg_vlfree, hd, size)
 
+/** Set a line width to apply to the vlist elements that follow. */
+#define RT_VLIST_SET_LINE_WIDTH(hd, width) 
BN_VLIST_SET_LINE_WIDTH(&RTG.rtg_vlfree, hd, width)
+
+
 /*
  * Replacements for definitions from vmath.h
  */

Modified: brlcad/trunk/src/libdm/dm-ogl.c
===================================================================
--- brlcad/trunk/src/libdm/dm-ogl.c     2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/src/libdm/dm-ogl.c     2013-08-27 17:00:36 UTC (rev 57181)
@@ -1629,7 +1629,11 @@
     register int first;
     register int mflag = 1;
     static float black[4] = {0.0, 0.0, 0.0, 0.0};
+    GLfloat originalPointSize, originalLineWidth;
 
+    glGetFloatv(GL_POINT_SIZE, &originalPointSize);
+    glGetFloatv(GL_LINE_WIDTH, &originalLineWidth);
+
     if (dmp->dm_debugLevel)
        bu_log("ogl_drawVList()\n");
 
@@ -1641,6 +1645,7 @@
        int *cmd = tvp->cmd;
        point_t *pt = tvp->pt;
        for (i = 0; i < nused; i++, cmd++, pt++) {
+           GLfloat pointSize, lineWidth;
            GLdouble dpt[3];
            VMOVE(dpt, *pt);
 
@@ -1734,10 +1739,21 @@
                    if (first == 0)
                        glEnd();
                    first = 0;
-                   glPointSize(1.0);
                    glBegin(GL_POINTS);
                    glVertex3dv(dpt);
                    break;
+               case BN_VLIST_LINE_WIDTH:
+                   lineWidth = (GLfloat)pt[0][0];
+                   if (lineWidth > 0.0) {
+                       glLineWidth(lineWidth);
+                   }
+                   break;
+               case BN_VLIST_POINT_SIZE:
+                   pointSize = (GLfloat)pt[0][0];
+                   if (pointSize > 0.0) {
+                       glPointSize(pointSize);
+                   }
+                   break;
            }
        }
     }
@@ -1748,6 +1764,9 @@
     if (dmp->dm_light && dmp->dm_transparency)
        glDisable(GL_BLEND);
 
+    glPointSize(originalPointSize);
+    glLineWidth(originalLineWidth);
+
     return TCL_OK;
 }
 

Modified: brlcad/trunk/src/libged/dg_obj.c
===================================================================
--- brlcad/trunk/src/libged/dg_obj.c    2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/src/libged/dg_obj.c    2013-08-27 17:00:36 UTC (rev 57181)
@@ -3321,7 +3321,9 @@
                case BN_VLIST_POLY_VERTNORM:
                case BN_VLIST_TRI_START:
                case BN_VLIST_TRI_VERTNORM:
-                   /* Has normal vector, not location */
+               case BN_VLIST_POINT_SIZE:
+               case BN_VLIST_LINE_WIDTH:
+                   /* attribute, not location */
                    break;
                case BN_VLIST_LINE_MOVE:
                case BN_VLIST_LINE_DRAW:

Modified: brlcad/trunk/src/libged/draw.c
===================================================================
--- brlcad/trunk/src/libged/draw.c      2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/src/libged/draw.c      2013-08-27 17:00:36 UTC (rev 57181)
@@ -243,7 +243,9 @@
                case BN_VLIST_POLY_VERTNORM:
                case BN_VLIST_TRI_START:
                case BN_VLIST_TRI_VERTNORM:
-                   /* Has normal vector, not location */
+               case BN_VLIST_POINT_SIZE:
+               case BN_VLIST_LINE_WIDTH:
+                   /* attribute, not location */
                    break;
                case BN_VLIST_LINE_MOVE:
                case BN_VLIST_LINE_DRAW:

Modified: brlcad/trunk/src/libged/select.c
===================================================================
--- brlcad/trunk/src/libged/select.c    2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/src/libged/select.c    2013-08-27 17:00:36 UTC (rev 57181)
@@ -87,7 +87,9 @@
                        case BN_VLIST_POLY_VERTNORM:
                        case BN_VLIST_TRI_START:
                        case BN_VLIST_TRI_VERTNORM:
-                           /* Has normal vector, not location */
+                       case BN_VLIST_POINT_SIZE:
+                       case BN_VLIST_LINE_WIDTH:
+                           /* attribute, not location */
                            break;
                        case BN_VLIST_LINE_MOVE:
                        case BN_VLIST_LINE_DRAW:

Modified: brlcad/trunk/src/mged/dodraw.c
===================================================================
--- brlcad/trunk/src/mged/dodraw.c      2013-08-27 15:36:17 UTC (rev 57180)
+++ brlcad/trunk/src/mged/dodraw.c      2013-08-27 17:00:36 UTC (rev 57181)
@@ -144,7 +144,9 @@
                case BN_VLIST_POLY_VERTNORM:
                case BN_VLIST_TRI_START:
                case BN_VLIST_TRI_VERTNORM:
-                   /* Has normal vector, not location */
+               case BN_VLIST_POINT_SIZE:
+               case BN_VLIST_LINE_WIDTH:
+                   /* attribute, not location */
                    break;
                case BN_VLIST_LINE_MOVE:
                case BN_VLIST_LINE_DRAW:

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to