aboutsummaryrefslogtreecommitdiff
path: root/generic/Track.c
diff options
context:
space:
mode:
authorlecoanet2003-05-09 14:59:23 +0000
committerlecoanet2003-05-09 14:59:23 +0000
commit53d07f06f02af7e7c800743f37f120dfb8954613 (patch)
treeffef8a164c2828c2bfedb34aaf2f32e53cdb363d /generic/Track.c
parent5e005009bc39734c926977eff9cee07461a18d14 (diff)
downloadtkzinc-53d07f06f02af7e7c800743f37f120dfb8954613.zip
tkzinc-53d07f06f02af7e7c800743f37f120dfb8954613.tar.gz
tkzinc-53d07f06f02af7e7c800743f37f120dfb8954613.tar.bz2
tkzinc-53d07f06f02af7e7c800743f37f120dfb8954613.tar.xz
* (Render): Fixed the marker stippling for openGL
Diffstat (limited to 'generic/Track.c')
-rw-r--r--generic/Track.c57
1 files changed, 42 insertions, 15 deletions
diff --git a/generic/Track.c b/generic/Track.c
index 95f6ac1..7a7e045 100644
--- a/generic/Track.c
+++ b/generic/Track.c
@@ -1300,6 +1300,28 @@ Draw(ZnItem item)
**********************************************************************************
*/
#ifdef GL
+struct MarkerCBData {
+ ZnPoint *p;
+ int num;
+ ZnReal size;
+ ZnPoint center;
+};
+
+static void
+MarkerRenderCB(void *closure)
+{
+ struct MarkerCBData *cbd = (struct MarkerCBData *) closure;
+ int i;
+
+ glBegin(GL_TRIANGLE_FAN);
+ glVertex2d(cbd->center.x, cbd->center.y);
+ for (i = 0; i < cbd->num; i++) {
+ glVertex2d(cbd->center.x + cbd->p[i].x*cbd->size,
+ cbd->center.y + cbd->p[i].y*cbd->size);
+ }
+ glEnd();
+}
+
static void
Render(ZnItem item)
{
@@ -1314,31 +1336,36 @@ Render(ZnItem item)
ZnPoint *points;
unsigned int num_points;
ZnReal x0, y0, size;
-
+
/* Draw the marker */
if (track->marker_size_dev != 0) {
points = ZnGetCirclePoints(3, ZN_CIRCLE_MEDIUM, 0.0, 2*M_PI, &num_points, NULL);
x0 = track->dev.x;
y0 = track->dev.y;
size = track->marker_size_dev;
- color = ZnGetGradientColor(track->marker_color, 0.0, &alpha);
- alpha = ZnComposeAlpha(alpha, wi->alpha);
- glColor4us(color->red, color->green, color->blue, alpha);
if (ISSET(track->flags, MARKER_FILLED_BIT)) {
+ ZnBBox bbox;
+ struct MarkerCBData cbd;
+
+ cbd.center.x = x0;
+ cbd.center.y = y0;
+ cbd.num = num_points;
+ cbd.size = size;
+ cbd.p = points;
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- if (track->marker_fill_pattern != ZnUnspecifiedImage) { /* Fill stippled */
- /*
- * Setup polygon stippling.
- */
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(ZnImageMask(track->marker_fill_pattern, NULL));
+ if (track->marker_fill_pattern != ZnUnspecifiedImage) { /* Fill stippled */
+ ZnResetBBox(&bbox);
+ ZnAddPointToBBox(&bbox, track->dev.x-size, track->dev.y-size);
+ ZnAddPointToBBox(&bbox, track->dev.x+size, track->dev.y+size);
+ ZnRenderTile(wi, track->marker_fill_pattern, track->marker_color,
+ MarkerRenderCB, &cbd, (ZnPoint *) &bbox);
}
- glBegin(GL_TRIANGLE_FAN);
- for (i = 0; i < num_points; i++) {
- glVertex2d(x0, y0);
- glVertex2d(x0 + points[i].x*size, y0 + points[i].y*size);
+ else {
+ color = ZnGetGradientColor(track->marker_color, 0.0, &alpha);
+ alpha = ZnComposeAlpha(alpha, wi->alpha);
+ glColor4us(color->red, color->green, color->blue, alpha);
+ MarkerRenderCB(&cbd);
}
- glEnd();
}
else {
glLineWidth(1.0);