Browse Source

improved AA subpixel sample positions (Ray Tice)

tags/mesa_4_1
Brian Paul 24 years ago
parent
commit
0ee6a5604d
1 changed files with 51 additions and 38 deletions
  1. 51
    38
      src/mesa/swrast/s_aatriangle.c

+ 51
- 38
src/mesa/swrast/s_aatriangle.c View File

@@ -1,8 +1,8 @@
/* $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.
*
@@ -142,27 +142,43 @@ static GLfloat
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];
@@ -226,28 +242,25 @@ static GLint
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;

Loading…
Cancel
Save