-/* $Id: s_aatriangle.c,v 1.19 2001/09/19 20:30:44 kschultz Exp $ */
+/* $Id: s_aatriangle.c,v 1.20 2001/11/13 00:26:39 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.5
+ * Version: 4.0.1
*
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
*
compute_coveragef(const GLfloat v0[3], const GLfloat v1[3],
const GLfloat v2[3], GLint winx, GLint winy)
{
-#define B 0.125
+ /* Given a position [0,3]x[0,3] return the sub-pixel sample position.
+ * Contributed by Ray Tice.
+ *
+ * Jitter sample positions -
+ * - average should be .5 in x & y for each column
+ * - each of the 16 rows and columns should be used once
+ * - the rectangle formed by the first four points
+ * should contain the other points
+ * - the distrubition should be fairly even in any given direction
+ *
+ * The pattern drawn below isn't optimal, but it's better than a regular
+ * grid. In the drawing, the center of each subpixel is surrounded by
+ * four dots. The "x" marks the jittered position relative to the
+ * subpixel center.
+ */
+#define POS(a, b) (0.5+a*4+b)/16
static const GLfloat samples[16][2] = {
/* start with the four corners */
- { 0.00+B, 0.00+B },
- { 0.75+B, 0.00+B },
- { 0.00+B, 0.75+B },
- { 0.75+B, 0.75+B },
+ { POS(0, 2), POS(0, 0) },
+ { POS(3, 3), POS(0, 2) },
+ { POS(0, 0), POS(3, 1) },
+ { POS(3, 1), POS(3, 3) },
/* continue with interior samples */
- { 0.25+B, 0.00+B },
- { 0.50+B, 0.00+B },
- { 0.00+B, 0.25+B },
- { 0.25+B, 0.25+B },
- { 0.50+B, 0.25+B },
- { 0.75+B, 0.25+B },
- { 0.00+B, 0.50+B },
- { 0.25+B, 0.50+B },
- { 0.50+B, 0.50+B },
- { 0.75+B, 0.50+B },
- { 0.25+B, 0.75+B },
- { 0.50+B, 0.75+B }
+ { POS(1, 1), POS(0, 1) },
+ { POS(2, 0), POS(0, 3) },
+ { POS(0, 3), POS(1, 3) },
+ { POS(1, 2), POS(1, 0) },
+ { POS(2, 3), POS(1, 2) },
+ { POS(3, 2), POS(1, 1) },
+ { POS(0, 1), POS(2, 2) },
+ { POS(1, 0), POS(2, 1) },
+ { POS(2, 1), POS(2, 3) },
+ { POS(3, 0), POS(2, 0) },
+ { POS(1, 3), POS(3, 0) },
+ { POS(2, 2), POS(3, 2) }
};
+
const GLfloat x = (GLfloat) winx;
const GLfloat y = (GLfloat) winy;
const GLfloat dx0 = v1[0] - v0[0];
compute_coveragei(const GLfloat v0[3], const GLfloat v1[3],
const GLfloat v2[3], GLint winx, GLint winy)
{
- /* NOTE: 15 samples instead of 16.
- * A better sample distribution could be used.
- */
+ /* NOTE: 15 samples instead of 16. */
static const GLfloat samples[15][2] = {
/* start with the four corners */
- { 0.00+B, 0.00+B },
- { 0.75+B, 0.00+B },
- { 0.00+B, 0.75+B },
- { 0.75+B, 0.75+B },
+ { POS(0, 2), POS(0, 0) },
+ { POS(3, 3), POS(0, 2) },
+ { POS(0, 0), POS(3, 1) },
+ { POS(3, 1), POS(3, 3) },
/* continue with interior samples */
- { 0.25+B, 0.00+B },
- { 0.50+B, 0.00+B },
- { 0.00+B, 0.25+B },
- { 0.25+B, 0.25+B },
- { 0.50+B, 0.25+B },
- { 0.75+B, 0.25+B },
- { 0.00+B, 0.50+B },
- { 0.25+B, 0.50+B },
- /*{ 0.50, 0.50 },*/
- { 0.75+B, 0.50+B },
- { 0.25+B, 0.75+B },
- { 0.50+B, 0.75+B }
+ { POS(1, 1), POS(0, 1) },
+ { POS(2, 0), POS(0, 3) },
+ { POS(0, 3), POS(1, 3) },
+ { POS(1, 2), POS(1, 0) },
+ { POS(2, 3), POS(1, 2) },
+ { POS(3, 2), POS(1, 1) },
+ { POS(0, 1), POS(2, 2) },
+ { POS(1, 0), POS(2, 1) },
+ { POS(2, 1), POS(2, 3) },
+ { POS(3, 0), POS(2, 0) },
+ { POS(1, 3), POS(3, 0) }
};
const GLfloat x = (GLfloat) winx;
const GLfloat y = (GLfloat) winy;