mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 08:10:09 +01:00
improved AA subpixel sample positions (Ray Tice)
This commit is contained in:
parent
1b37d6c305
commit
0ee6a5604d
1 changed files with 51 additions and 38 deletions
|
|
@ -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…
Add table
Reference in a new issue