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