static bool test_line(const struct stipple_line *line) { GLuint i; glLineStipple(line->factor, line->pattern); glColor3f(line->color[0], line->color[1], line->color[2]); glBegin(line->primitive); for (i = 0; i < line->nvertices; ++i) glVertex2f(line->vertices[i].x + 0.5, line->vertices[i].y + 0.5); glEnd(); glReadBuffer(GL_BACK); if (line->primitive == GL_LINES) { for (i = 0; i + 1 < line->nvertices; i += 2) { GLuint fragment = 0; if (!probe_line(line, i, i + 1, &fragment)) return false; } } else { GLuint fragment = 0; for (i = 0; i + 1 < line->nvertices; ++i) { if (!probe_line(line, i, i + 1, &fragment)) return false; } if (line->primitive == GL_LINE_LOOP) { if (!probe_line(line, i, 0, &fragment)) return false; } } return true; }
static void test_line(const struct stipple_line *line) { GLuint i; glLineStipple(line->factor, line->pattern); glColor3f(line->color[0], line->color[1], line->color[2]); glBegin(line->primitive); for(i = 0; i < line->nvertices; ++i) glVertex2f(line->vertices[i].x + 0.5, line->vertices[i].y + 0.5); glEnd(); glReadBuffer(GL_BACK); if (line->primitive == GL_LINES) { for(i = 0; i+1 < line->nvertices; i += 2) probe_line(line, &line->vertices[i], &line->vertices[i+1], 0); } else { GLuint fragment = 0; for(i = 0; i+1 < line->nvertices; ++i) fragment = probe_line(line, &line->vertices[i], &line->vertices[i+1], fragment); if (line->primitive == GL_LINE_LOOP) probe_line(line, &line->vertices[i], &line->vertices[0], fragment); } }